Краткое описание Lua vm?

Я просмотрел Программирование в Lua, я посмотрел на Ссылку Lua.

Однако они оба говорят мне, что эта функция делает это, но не как.

При чтении SICP я получил это чувство: "ах, вот схема лежания в основе вычислительной модели"; я пытаюсь получить тот же смысл относительно Lua - т.е. краткое описание, он - vm, "как", а не "какой".

Кто-либо знает хорошего документа (помимо источника C) описание этого?

9
задан Yu Hao 9 August 2013 в 01:05
поделиться

5 ответов

Возможно, вы захотите прочитать No-Frills Intro to Lua 5(.1) VM Instructions (выберите ссылку, нажмите на вкладку Docs, выберите English -> Go).

Я не помню точно где я это видел, но я помню, что читал, что авторы Lua специально не рекомендуют конечным пользователям слишком подробно останавливаться на VM; я думаю, они хотят, чтобы это было как можно больше деталей реализации.

15
ответ дан 4 December 2019 в 07:14
поделиться

Кроме уже упомянутого A No-Frills Introduction to Lua 5.1 VM Instructions, вас может заинтересовать этот отличный пост Майка Полла о том, как читать исходники Lua.

Также смотрите соответствующую страницу Lua-Users Wiki.

7
ответ дан 4 December 2019 в 07:14
поделиться

See http://www.lua.org/source/5.1/lopcodes.h.html . Список начинается с OP_MOVE.

5
ответ дан 4 December 2019 в 07:14
поделиться

Я нашел Реализация Lua 5.1 очень полезной для понимания того, что на самом деле делает Lua.

В нем объясняются методы хеширования, сборка мусора и некоторые другие мелочи.

3
ответ дан 4 December 2019 в 07:14
поделиться

Вычислительная модель, лежащая в основе Lua, практически такая же, как и вычислительная модель, лежащая в основе Scheme, за исключением того, что центральной структурой данных является не ячейка cons, а изменяемая хэш-таблица. (По крайней мере, пока вы не перейдете к метапрограммированию с метатаблицами). В остальном все знакомое: вложенные функции первого класса с изменяемыми локальными переменными (let-bound variables в Scheme) и т.д.

Мне не совсем понятно, что вы получите от изучения VM. Я немного поковырялся в VM некоторое время назад, и она очень похожа на любую другую регистро-ориентированную VM, хотя, возможно, немного чище. Только несколько инструкций специфичны для Lua.

Если вам интересно узнать о метатаблицах, семантика описана ясно, хотя и несколько многословно, в разделе 2.8 справочного руководства для Lua 5.1. Если вы посмотрите на код VM в src/lvm.c, то увидите почти точно такую же логику, реализованную на C (например, внутреннюю функцию Arith). Инструкции VM специализированы для обычных случаев, но все это ужасно просто; ничего хитрого здесь нет.

В течение многих лет я хотел получить более формальную спецификацию вычислительной модели Lua, но мои вкусы больше склоняются к формальной семантике...

4
ответ дан 4 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: