2013-07-29 10 views
7

Ich las Lua's Quellcode und stellte überraschenderweise fest, dass es implementiert wurde, um einige ungerade Anweisungen zu erzeugen (z.B. GETUPVAL, FORLOOP, etc.). Dann werden diese Opcodes von einer virtuellen Maschine ausgeführt. Gibt es einen Vorteil, dies zu tun (im Vergleich zu reinen AST-basierten Interpreter?)Warum entwickelt Lua intermediate Opcodes?

Vielen Dank.

Antwort

9

Die Verwendung virtueller Maschinen ist eine alte Implementierungstechnik für Sprachen, die bis mindestens zu USCD Pascal, BCPL und Smalltalk zurückreicht. Die meisten Skriptsprachen verwenden jetzt eine virtuelle Maschine. Einige verwenden eine allgemeine virtuelle Maschine. Lua verwendet eine spezielle virtuelle Maschine, die die Semantik der Sprache widerspiegelt. Daher die spezialisierten Opcodes. Lua führte Neuerungen in diesem Bereich ein, indem er Version 5.0 in eine registerbasierte virtuelle Maschine statt in eine herkömmliche stapelbasierte virtuelle Maschine umstellte.

+0

Sehr hilfreich. Danke :) – babel92

10

Zum allgemeinen Vergleich von Bytecode-Interpretern und abstrakten Syntaxbaum-Interpreter siehe Wikipedia:Interpreter.

Lua verwendet seit seiner Geburt eine virtuelle Maschine und führte eine registerbasierte virtuelle Maschine in Lua 5.0 ein (die erste registerbasierte virtuelle Maschine, die weit verbreitet ist.) The Evolution of Lua, geschrieben von den Autoren von Lua, bietet viele Ressourcen zu diesem Thema.

Ein weiteres Papier von den Autoren von Lua geschrieben, The Implementation of Lua 5.0 viele Details über die Umsetzung bietet, Kapitel 7 Die Virtual Machine Sie besonders hilfreich sein würde, ist dieses Papier auch eine gute Referenz für die Code-Lua Quelle zu lesen.

+0

Vielen Dank! Diese Papiere sind sehr nützlich. – babel92