为什么Lua旨在生成中间操作码?

bab*_*l92 7 lua vm-implementation

我正在阅读Lua的源代码,并且惊奇地发现它被实现为生成一些奇怪的指令(例如GETUPVAL,FORLOOP等).然后这些操作码由虚拟机执行.这样做有什么好处(与基于AST的纯解释器相比?)

谢谢.

lhf*_*lhf 10

使用虚拟机是一种古老的语言实现技术,至少可以追溯到USCD Pascal,BCPL和Smalltalk.大多数脚本语言现在都使用虚拟机.有些使用通用虚拟机.Lua使用专用虚拟机来反映语言的语义.因此专门的操作码.通过将5.0版本移植到基于寄存器的虚拟机而不是传统的基于堆栈的虚拟机,Lua确实在这个领域引入了新颖性.


Yu *_*Hao 10

有关字节码解释器和抽象语法树解释器的一般比较,请参阅Wikipedia:Interpreter.

Lua自诞生以来一直在使用虚拟机,并在Lua 5.0中引入了基于寄存器的虚拟机(这是第一个广泛使用的基于寄存器的虚拟机.)Lua的演变,由Lua的作者撰写,提供有关该主题的大量资源.

另一篇由Lua的作者撰写的论文,Lua 5.0的实现提供了很多关于实现的细节,第7章虚拟机对你特别有用,本文也是阅读Lua源代码的一个很好的参考.