Я просмотрел Программирование в Lua, я посмотрел на Ссылку Lua.
Однако они оба говорят мне, что эта функция делает это, но не как.
При чтении SICP я получил это чувство: "ах, вот схема лежания в основе вычислительной модели"; я пытаюсь получить тот же смысл относительно Lua - т.е. краткое описание, он - vm, "как", а не "какой".
Кто-либо знает хорошего документа (помимо источника C) описание этого?
Возможно, вы захотите прочитать No-Frills Intro to Lua 5(.1) VM Instructions (выберите ссылку, нажмите на вкладку Docs, выберите English -> Go).
Я не помню точно где я это видел, но я помню, что читал, что авторы Lua специально не рекомендуют конечным пользователям слишком подробно останавливаться на VM; я думаю, они хотят, чтобы это было как можно больше деталей реализации.
Кроме уже упомянутого A No-Frills Introduction to Lua 5.1 VM Instructions, вас может заинтересовать этот отличный пост Майка Полла о том, как читать исходники Lua.
Также смотрите соответствующую страницу Lua-Users Wiki.
See http://www.lua.org/source/5.1/lopcodes.h.html . Список начинается с OP_MOVE.
Я нашел Реализация Lua 5.1 очень полезной для понимания того, что на самом деле делает Lua.
В нем объясняются методы хеширования, сборка мусора и некоторые другие мелочи.
Вычислительная модель, лежащая в основе Lua, практически такая же, как и вычислительная модель, лежащая в основе Scheme, за исключением того, что центральной структурой данных является не ячейка cons, а изменяемая хэш-таблица. (По крайней мере, пока вы не перейдете к метапрограммированию с метатаблицами). В остальном все знакомое: вложенные функции первого класса с изменяемыми локальными переменными (let-bound variables в Scheme) и т.д.
Мне не совсем понятно, что вы получите от изучения VM. Я немного поковырялся в VM некоторое время назад, и она очень похожа на любую другую регистро-ориентированную VM, хотя, возможно, немного чище. Только несколько инструкций специфичны для Lua.
Если вам интересно узнать о метатаблицах, семантика описана ясно, хотя и несколько многословно, в разделе 2.8 справочного руководства для Lua 5.1. Если вы посмотрите на код VM в src/lvm.c
, то увидите почти точно такую же логику, реализованную на C (например, внутреннюю функцию Arith
). Инструкции VM специализированы для обычных случаев, но все это ужасно просто; ничего хитрого здесь нет.
В течение многих лет я хотел получить более формальную спецификацию вычислительной модели Lua, но мои вкусы больше склоняются к формальной семантике...