SergOmarov 34 Опубликовано: 5 января, 2016 (изменено) _ Изменено 3 июля, 2017 пользователем SergOmarov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 5 января, 2016 Что дает эта среда? Стандартные библиотеки можно теперь не загружать при помощи require, это обеспечит среда. Про оперативную память слышали? Нет? Планируемые функции: замена l <name> на local <name> и аналогично для функций. Если и делаешь, то добавь выключатель, не каждым глазам удобно смотреть на код типа l f main() l a = "hello" a = a .. "!" print(a) end Мне кажется это просто клон моего servercore, из отличий только: off метод. Честно говоря не вижу смысла этому методу, удалить слушателя можно и on'ом. .aa формат 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 5 января, 2016 Я если честно не понял, зачем это. Что это даёт, и какая польза от этой программы? Я попробовал запустить ею пустой файл, комп завис. 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov Автор темы 34 Опубликовано: 5 января, 2016 (изменено) Про оперативную память слышали? Нет? Не ты этот алгоритм писал, ты не знаешь(а при чтении понять не может, как я вижу), что она ищет вхождения названий библиотек и в этом случает добавляет к исходному коду блок require) Я если честно не понял, зачем это. Что это даёт, и какая польза от этой программы? Я попробовал запустить ею пустой файл, комп завис. Странно, я пробовал - не виснет. Вот какой результат загрузки пустого: Мне кажется это просто клон моего servercore, из отличий только: on'ом. .aa формат Вызов только 1 файла и без вызова самой среды явно. off метод. Честно говоря не вижу смысла этому методу, удалить слушателя можно и on'ом. Плохой стиль. Изменено 5 января, 2016 пользователем SergOmarov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 5 января, 2016 Не ты этот алгоритм писал, ты не знаешь(а при чтении понять не может, как я вижу), что она ищет вхождения названий библиотек и в этом случает добавляет к исходному коду блок require) А require по твоему маг, он загружает либы, не в оперативную память, а в магическое хранилище розовых пони какающих конфетами, в котором можно хранить сколько хочешь информации. Например, когда мы пишем в коде: local lib = require "lib" Вызывается файл lib, берется то что возвратил этот файл и кладется в переменную lib. Естественно переменная забирает часть оперативной памяти. Плохой стиль. Ну если для тебя a.on("func") - плохой стиль, то так тому и быть, твоя функция, не моя. 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov Автор темы 34 Опубликовано: 5 января, 2016 (изменено) Если и делаешь, то добавь выключатель, не каждым глазам удобно смотреть на код типа Можно и писать local, он его просто проигнорит. А require по твоему маг, он загружает либы, не в оперативную память, а в магическое хранилище розовых пони какающих конфетами Именно так и происходит: package.preload - это хранилище) Что это даёт, и какая польза от этой программы? Меньше и легче код писать. Изменено 5 января, 2016 пользователем SergOmarov Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 5 января, 2016 (изменено) Именно так и происходит: package.preload - это хранилище) package.preload - это хранилище либ, которые получаются не из файла, а из таблицы. Например: package.preload["lox"] = {fuck = print, lol = table.insert} ... lox = require "lox" -- файла lox.lua нету нигде lox.print("lox") -- >> lox :smile14: Изменено 5 января, 2016 пользователем LeshaInc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov Автор темы 34 Опубликовано: 5 января, 2016 Пардон, package.loaded, перепутал немного) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 5 января, 2016 (изменено) Пардон, package.loaded, перепутал немного) А по твоему package.loaded - это переменная которая хранится не в оперативной памяти, а в облаке из радужных какашек и пони, в котором бесконечное количество прострнанства? Если ты загружаешь все либы, они по твоему не займут никакого места? Фигушки. Они хоть и будут сидеть в package.loaded, но оперативку выжирать все равно будут. Изменено 5 января, 2016 пользователем LeshaInc 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov Автор темы 34 Опубликовано: 5 января, 2016 А по твоему package.loaded - это переменная которая хранится не в оперативной памяти, а в облаке из радужных какашек и пони, в котором бесконечное количество прострнанства? Если ты загружаешь все либы, они по твоему не займут никакого места? Фигушки. Они хоть и будут сидеть в package.loaded, но оперативку выжирать все равно будут. Софист ты, Леша) Хоть ты сам напишешь require, хоть среда за тебя это сделат, какая разница? Но во втором случае тебе не нужно думать о require) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 5 января, 2016 (изменено) Софист ты, Леша) Хоть ты сам напишешь require, хоть среда за тебя это сделат, какая разница? Но во втором случае тебе не нужно думать о require) В моей практике были программы которые ели довольно много оперативной памяти компьютера. Но они подгружали совсем немного библиотек. А теперь представь если это немного превратиться в много? Компьютеру просто памяти не хватит Изменено 5 января, 2016 пользователем LeshaInc Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov Автор темы 34 Опубликовано: 5 января, 2016 Но они подгружали совсем немного библиотек. А теперь представь если это немного превратиться в много? Грузиться будут только те, что используются в программе, вызываемой через среде. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 5 января, 2016 (изменено) Грузиться будут только те, что используются в программе, вызываемой через среде. Ты еще не понял? Вот добавили мы библиотеку - lol = require "lol". Она сразу загружается в оперативную память, сразу выжирает память. Пофиг, когда мы будем вызывать функции либы, она в любом случае будет жрать память Изменено 5 января, 2016 пользователем LeshaInc 3 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
SergOmarov Автор темы 34 Опубликовано: 5 января, 2016 Это ты еще не понял: если выполняемая программа не имеет вхождений "lol", то она и не будет загружена. А если ты ее явно загрузишь, то она займет столько же памяти, сколько бы заняла при загрузки ее средой. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
JaggerDer 90 Опубликовано: 5 января, 2016 А для чего нужна среда? Если не считать автозагрузку библиотек - интересная фича. Вон слушатели событий есть и в стандартных либах: http://ocdoc.cil.li/api:event. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
qwertyMAN 1 723 Опубликовано: 7 января, 2016 (изменено) Установка: pastebin run 7wMLkbK1 Нельзя было сделать работоспособную ссылку, чтобы из браузер просто нажать и посмотреть код? Изменено 7 января, 2016 пользователем qwertyMAN 4 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
swg2you 403 Опубликовано: 7 января, 2016 lol = require "lol" бла-бла-бла lol = nil бла-бла-бла 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Ktlo 789 Опубликовано: 7 января, 2016 (изменено) lol = require "lol" бла-бла-бла lol = nil бла-бла-бла Если этим демонстрируется освобождение памяти от модуля "lol", то ничего не выйдет, модуль всё ещё хранится в таблице package.loaded. Да, я кеп. Изменено 7 января, 2016 пользователем Ktlo 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Quant 442 Опубликовано: 7 января, 2016 (изменено) Кстати,а если я напишу c=require('component') --код идёт дальше То среда дополнительно сделает component = require('component') Так ведь? Если это так,то появляется лишняя переменная с библиотекой.Которая не используется в программе,но использует память. Хотя,возможно,сборщик мусора уберёт это,но не сразу.(А вдруг у кого-то памяти есть мало,а требуется много,причём сразу) Изменено 7 января, 2016 пользователем Quant Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
swg2you 403 Опубликовано: 8 января, 2016 Если этим демонстрируется освобождение памяти от модуля "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 до состояния "после загрузки". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах