Краткое описание Lua vm? - PullRequest
9 голосов
/ 05 мая 2010

Я просмотрел программирование на Lua, я посмотрел справочник Lua.

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

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

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

Ответы [ 7 ]

15 голосов
/ 05 мая 2010

Возможно, вы захотите прочитать Инструкции по виртуальной машине без излишеств к Lua 5 (.1) (выберите ссылку, нажмите вкладку Документы, выберите «Английский -> Перейти»).

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

7 голосов
/ 05 мая 2010

Помимо уже упомянутого A Без излишеств Введение в Lua 5.1 VM Instructions , вас может заинтересовать этот замечательный пост от Mike Pall о том, как читать источник Lua.

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

5 голосов
/ 05 мая 2010

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

4 голосов
/ 05 мая 2010

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

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

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

3 голосов
/ 05 мая 2010

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

Объясняет методы хеширования, сборки мусора и некоторые другие фрагменты.

0 голосов
/ 09 августа 2013

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

0 голосов
/ 13 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...