2010-05-04 2 views
8

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

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

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

Кто-нибудь знает хороший документ (помимо источника C), описывающий это?

ответ

15

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

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

+2

[Прямая ссылка на 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) –

3

Расчетная модель, лежащая в основе 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, но мои вкусы больше к формальной семантике ...

+0

Мне действительно интересно все, что связано с метатегами. Если они не зарегистрированы на виртуальной машине, где они задокументированы? – anon

+0

Я добавил несколько заметок о metatables, но на самом деле не так много сказать. –

3

Я нашел The Implementation of Lua 5.1 очень полезно для понимания того, что на самом деле делает Lua.

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

+1

Эта бумага хорошая, но обратите внимание, что это для Lua 5.0 не 5.1. – mlepage

-3

Я удивлен, что вы ссылаетесь на источник C для виртуальной машины, так как это защищено lua.org и tecgraf/puc rio в Бразилии специально, поскольку язык используется для реальных коммерческих и коммерческих приложений в ряде стран. В документе о реализации lua содержится подробная информация о виртуальной машине, наиболее подробно ее разрешено включать, но структура виртуальной машины является собственностью. Стоит отметить, что версии 5.0 и 5 'были заказаны IBM в Европе для использования на мэйнфреймах клиентов, а их версия на основе регистров имеет виртуальную машину, которая принимает определенный промежуточный код IBM.

+7

Источник Lua VM - бесплатное программное обеспечение и может использоваться свободно. В вашем ответе звучит похоже, что Lua является закрытым источником с юридическими вопросами, если он включен в какой-либо другой проект. Также представьте, что IBM заказала Lua VM. – Neopallium

0

Еще одна отличная статья - The Implmentation of Lua 5.0, в которой описывается дизайн и мотивация различных ключевых систем на ВМ. Я обнаружил, что чтение это отличный способ разобрать и понять, что я вижу в коде C.

Смежные вопросы