Перейти к содержимому
SergOmarov

The A Environment

Рекомендуемые сообщения

Что дает эта среда?

Стандартные библиотеки можно теперь не загружать при помощи require, это обеспечит среда.

 

Про оперативную память слышали? Нет? :facepalm:

 

 

Планируемые функции: замена l <name> на local <name> и аналогично для функций.

 

Если и делаешь, то добавь выключатель, не каждым глазам удобно смотреть на код типа

l f main()
  l a = "hello"
  a = a .. "!"
  print(a)
end

Мне кажется это просто клон моего servercore, из отличий только:

  • off метод. Честно говоря не вижу смысла этому методу, удалить слушателя можно и on'ом.
  • .aa формат

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я если честно не понял, зачем это. Что это даёт, и какая польза от этой программы? Я попробовал запустить ею пустой файл, комп завис.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Про оперативную память слышали? Нет?

 

Не ты этот алгоритм писал, ты не знаешь(а при чтении понять не может, как я вижу), что она ищет вхождения названий библиотек и в этом случает добавляет к исходному коду блок require)

Я если честно не понял, зачем это. Что это даёт, и какая польза от этой программы? Я попробовал запустить ею пустой файл, комп завис.

Странно, я пробовал - не виснет.

Вот какой результат загрузки пустого: Pr6maJR.png

 

 

Мне кажется это просто клон моего servercore, из отличий только: on'ом. .aa формат

 

Вызов только 1 файла и без вызова самой среды явно.

 

 

off метод. Честно говоря не вижу смысла этому методу, удалить слушателя можно и on'ом.

 

Плохой стиль.

Изменено пользователем SergOmarov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не ты этот алгоритм писал, ты не знаешь(а при чтении понять не может, как я вижу), что она ищет вхождения названий библиотек и в этом случает добавляет к исходному коду блок require)

 

А require по твоему маг, он загружает либы, не в оперативную память, а в магическое хранилище розовых пони какающих конфетами, в котором можно хранить сколько хочешь информации. :facepalm:

 

Например, когда мы пишем в коде:

local lib = require "lib"

Вызывается файл lib, берется то что возвратил этот файл и кладется в переменную lib. Естественно переменная забирает часть оперативной памяти.

 

 

Плохой стиль.

 

Ну если для тебя a.on("func") - плохой стиль, то так тому и быть, твоя функция, не моя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Если и делаешь, то добавь выключатель, не каждым глазам удобно смотреть на код типа

 

Можно и писать local, он его просто проигнорит.

 

 

А require по твоему маг, он загружает либы, не в оперативную память, а в магическое хранилище розовых пони какающих конфетами

 

Именно так и происходит: package.preload - это хранилище)

 

 

Что это даёт, и какая польза от этой программы?
 

Меньше и легче код писать.

Изменено пользователем SergOmarov

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Именно так и происходит: package.preload - это хранилище)

 

:facepalm:

package.preload - это хранилище либ, которые получаются не из файла, а из таблицы. Например:

package.preload["lox"] = {fuck = print, lol = table.insert}
...
lox = require "lox" -- файла lox.lua нету нигде
lox.print("lox") -- >> lox

:smile14: :smile14: :smile14:

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Пардон, package.loaded, перепутал немного)

 

А по твоему package.loaded - это переменная которая хранится не в оперативной памяти, а в облаке из радужных какашек и пони, в котором бесконечное количество прострнанства?

Если ты загружаешь все либы, они по твоему не займут никакого места? Фигушки. Они хоть и будут сидеть в package.loaded, но оперативку выжирать все равно будут.

 

:smile89:

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

А по твоему package.loaded - это переменная которая хранится не в оперативной памяти, а в облаке из радужных какашек и пони, в котором бесконечное количество прострнанства? Если ты загружаешь все либы, они по твоему не займут никакого места? Фигушки. Они хоть и будут сидеть в package.loaded, но оперативку выжирать все равно будут.
 

Софист ты, Леша) Хоть ты сам напишешь require, хоть среда за тебя это сделат, какая разница? Но во втором случае тебе не нужно думать о require)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Софист ты, Леша) Хоть ты сам напишешь require, хоть среда за тебя это сделат, какая разница? Но во втором случае тебе не нужно думать о require)

 

В моей практике были программы которые ели довольно много оперативной памяти компьютера. Но они подгружали совсем немного библиотек. А теперь представь если это немного превратиться в много? Компьютеру просто памяти не хватит

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Но они подгружали совсем немного библиотек. А теперь представь если это немного превратиться в много?

Грузиться будут только те, что используются в программе, вызываемой через среде. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Грузиться будут только те, что используются в программе, вызываемой через среде. 

 

Ты еще не понял? Вот добавили мы библиотеку - lol = require "lol". Она сразу загружается в оперативную память, сразу выжирает память. Пофиг, когда мы будем вызывать функции либы, она в любом случае будет жрать память

Изменено пользователем LeshaInc

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это ты еще не понял: если выполняемая программа не имеет вхождений "lol", то она и не будет загружена. А если ты ее явно загрузишь, то она займет столько же памяти, сколько бы заняла при загрузки ее средой.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А для чего нужна среда? Если не считать автозагрузку библиотек - интересная фича. Вон слушатели событий есть и в стандартных либах: http://ocdoc.cil.li/api:event.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Установка: pastebin run 7wMLkbK1

 

Нельзя было сделать работоспособную ссылку, чтобы из браузер просто нажать и посмотреть код?

 

0Oo6Fmh.jpg

Изменено пользователем qwertyMAN

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
lol = require "lol"
бла-бла-бла
lol = nil
бла-бла-бла

Если этим демонстрируется освобождение памяти от модуля "lol", то ничего не выйдет, модуль всё ещё хранится в таблице package.loaded. Да, я кеп.

Изменено пользователем Ktlo

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кстати,а если я напишу

c=require('component')
--код идёт дальше

То среда дополнительно сделает 

component = require('component')

Так ведь?


Если это так,то появляется лишняя переменная с библиотекой.Которая не используется в программе,но использует память.

Хотя,возможно,сборщик мусора уберёт это,но не сразу.(А вдруг у кого-то памяти есть мало,а требуется много,причём сразу)

Изменено пользователем Quant

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если этим демонстрируется освобождение памяти от модуля "lol", то ничего не выйдет, модуль всё ещё хранится в таблице package.loaded. Да, я кеп.

Спасибо, хорошее замечание. 

 

Глянул по диагонали код package.lua, насколько я понял, все что было когда-то require остается в памяти "навечно". Не взирая на то, что программа, для которой это require, уже отработала и выгружена. Поправьте меня если это не так... 

 

Думаю, что package.loaded["lol"] = nil исправит ситуацию. Грубо, но вполне корректно.


Можно пойти дальше, и добавить в систему модуль (назовем его rampurge.lua) с коротким кодом:

local loaded = {
  ["_G"] = _G,
  ["bit32"] = bit32,
  ["coroutine"] = coroutine,
  ["math"] = math,
  ["os"] = os,
  ["package"] = package,
  ["string"] = string,
  ["table"] = table
}
package.loaded = loaded

Теоретически, вызов require("rampurge") обнулит кеш package до состояния "после загрузки".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...