2013-07-29 4 views
7

Я читал исходный код Lua и неожиданно обнаружил, что он был реализован для создания некоторых нечетных инструкций (например, GETUPVAL, FORLOOP и т. Д.). Затем эти коды операций выполняются виртуальной машиной. Есть ли польза для этого (по сравнению с чистым интерпретатором на основе AST?)Почему Lua предназначен для генерации промежуточных кодов операций?

Спасибо.

ответ

9

Использование виртуальных машин - это старая технология реализации языков, датированная еще как минимум USCD Pascal, BCPL и Smalltalk. Большинство языков сценариев теперь используют виртуальную машину. Некоторые используют универсальную виртуальную машину. Lua использует специальную виртуальную машину, которая отражает семантику языка. Следовательно, специализированные коды операций. Lua представила новинку в этой области, переместив в версии 5.0 на виртуальную машину на основе регистров вместо традиционной на основе стека.

+0

Очень полезно. Спасибо :) – babel92

10

Для общего сравнения интерпретаторов байт-кода и абстрактных интерпретаторов синтаксиса см. Wikipedia:Interpreter.

Lua использует виртуальную машину с момента ее рождения и представляет виртуальную машину на основе регистров в Lua 5.0 (которая является первой виртуальной машиной на основе регистров, которая широко используется.) The Evolution of Lua, написанная авторами Lua, предоставляет много ресурсов по этой теме.

Другая статья, написанная авторами Lua, The Implementation of Lua 5.0 предоставляет множество деталей о реализации, Глава 7 виртуальной машины будет особенно полезно для вас, эта статья также большая ссылка для чтения исходного кода Lua в.

+0

Спасибо большое! Эти документы весьма полезны. – babel92