ЗАПИЛИЛ СЕРИАЛИЗАЦИЮ СТЕЙТА LUA!!! ^_^
Жмём F2/F3, внимание на
test/campfire.sav — в файле, полученном в отладочном режиме, по кускам текста можно понять, что вообще происходит и кто сколько занимает...
~some~ — луашные объекты,
<<some>> — нативные.
Фичи (конкретно сериализации скрипта, я только к ней не знал как подступиться, а без
lua_upvalueid /
lua_upvaluejoin и не подступился бы):
— скриптовые объекты хранятся по значению или по ссылке на выбор (например, короткие строки — по значению, длинные — по ссылке);
— дампы одинаковых Луа-функций, но с разными замыканиями, записываются лишь однажды (я не нашёл штатного средства установить их идентичность);
— окружения модулей задаются не содержимым таблицы, а именем файла. Это допустимо, т. к. в моей архитектуре их семантика не допускает изменения ни извне, ни изнутри, кроме как во время загрузки. И если внешний скрипт был изменён в оффлайне, а какая-нибудь сериализованная функция не додумалась замкнуться на
отдельную функцию из него вместо всего окружения, она увидит эти изменения.
Ну а фича нативной сериализации — объект может быть "встроен" в другой объект , а не распределён в куче.
P.S. Сериализаторы:
— нативных объектов:
https://sourceforge.net/p/rr-rr/code/39 ... zation.pas— луашных (блоб с вложенными функциями, т. к. писал в не очень вменяемом состоянии, "зато работает"):
https://sourceforge.net/p/rr-rr/code/39 ... .pas#l3067 (tScriptState.Serialize / tScriptState.Deserialize).