Warum entwickelt Lua intermediate Opcodes?

7

Ich las den Quellcode von Lua und fand überraschenderweise heraus, dass er implementiert wurde, um einige ungerade Anweisungen zu erzeugen (z. B. GETUPVAL, FORLOOP usw.). Dann werden diese Opcodes von einer virtuellen Maschine ausgeführt. Gibt es einen Vorteil (im Vergleich zum reinen AST-basierten Interpreter)?

Danke.

    
babel92 29.07.2013, 17:31
quelle

2 Antworten

10

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.

    
lhf 29.07.2013, 18:07
quelle
10

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

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

Ein weiteres von den Autoren von Lua geschriebenes Papier Die Implementierung von Lua 5.0 bietet viele Details zur Implementierung , Kapitel 7 Die virtuelle Maschine wäre besonders hilfreich für Sie, diese Arbeit ist auch eine gute Referenz für das Lesen von Lua's Quellcode.

    
Yu Hao 30.07.2013 02:50
quelle

Tags und Links