Расчетная модель, лежащая в основе Lua, в значительной степени совпадает с вычислительной моделью, лежащей в основе Схемы, за исключением того, что центральная структура данных не является ячейкой cons; это изменяемая хеш-таблица. (По крайней мере, пока вы не перейдете в метапрограммирование с метатегами.) В противном случае все знакомые вещи: вложенные функции первого класса с изменяемыми локальными переменными (let-bound variables в Scheme) и т. Д.
Мне непонятно, что вы могли бы получить много от изучения виртуальной машины. Некоторое время я немного взломал виртуальную машину, и она очень похожа на любую другую регистро-ориентированную виртуальную машину, хотя, возможно, немного чище. Только несколько инструкций Lua-specific.
Если вам интересно о метатежах, семантика описывается четко, если несколько словесно, в Section 2.8 of the reference manual for Lua 5.1. Если вы посмотрите на код VM в src/lvm.c
, вы увидите почти такую же логику, реализованную в C (например, внутреннюю функцию Arith
). Инструкции VM специализированы для обычных случаев, но все это ужасно прямолинейно; нет ничего умного.
В течение многих лет я желал более формальной спецификации вычислительной модели Lua, но мои вкусы больше к формальной семантике ...
[Прямая ссылка на 5.1 PDF] (http://luaforge.net/docman/view.php/83/98/ANoFrillsIntroToLua51VMInstructions.pdf), [Прямая ссылка на 5.1 ODT] (http://luaforge.net/ docman/view.php/83/98/ANoFrillsIntroToLua51VMInstructions.pdf) –