Lua虚拟机的简明描述是什么?

我已经大概浏览了《Lua 程序设计》和 Lua 参考手册。

然而,它们都只告诉我「这个函数是什么」,而不告诉我「它是如何运作的」。

当我阅读 SICP 时,我有这样一种感觉:“啊,这就是 Scheme 底层的计算模型。” 我正在尝试获得关于 Lua 相同的感觉,即一个简明的描述它的虚拟机,而不是一个「这是什么」的描述。

有没有人知道一个好的文档(除了 C 源代码)来描述这个?

原文链接 https://stackoverflow.com/questions/2769409

点赞
stackoverflow用户126042
stackoverflow用户126042

你可能想阅读 No-Frills Intro to Lua 5(.1) VM Instructions(选择一个链接,点击 Docs 标签,选择 English -> Go)。

我不记得我在哪里看到过,但我记得 Lua 的作者明确地不鼓励最终用户过于详细地了解虚拟机;我认为他们希望它尽可能成为一个实现细节。

2010-05-04 22:41:58
stackoverflow用户41661
stackoverflow用户41661

Lua所采用的计算模型与Scheme的计算模型基本相同,除了中心数据结构不是“cons cell”,而是可变哈希表(至少在你使用元表进行元编程之前)。否则,所有熟悉的东西都在那里:具有可变本地变量(在Scheme中称为let-bound variables)的嵌套一级函数等。

我不确定你能从研究虚拟机中得到多少好处。我之前在虚拟机上做过一些更改,它与任何其他基于寄存器的 VM 非常相似,虽然可能更简洁一些。只有少数几个指令是Lua特有的。

如果您对元表感到好奇,语义在Lua 5.1参考手册的第2.8节中清楚地描述,尽管有点啰嗦。如果您查看src/lvm.c中的虚拟机代码,将看到类似于C实现的逻辑(例如,内部的Arith函数)。虚拟机指令针对常见情况进行了专门优化,但所有内容都非常简单明了,没有任何巧妙的处理。

多年来,我一直希望能够获得更正式的Lua计算模型规范,但我更喜欢正式语义。

2010-05-04 23:52:21
stackoverflow用户107090
stackoverflow用户107090

请参阅http://www.lua.org/source/5.1/lopcodes.h.html。列表从OP_MOVE开始。

2010-05-05 03:01:50
stackoverflow用户6236
stackoverflow用户6236

除了已经提到的A No-Frills Introduction to Lua 5.1 VM Instructions,你可能会对Mike Pall关于如何阅读Lua源代码的这篇优秀文章感兴趣。

同时也请参考与之相关的Lua-Users Wiki页面:LuaSource

2010-05-05 09:04:20
stackoverflow用户106967
stackoverflow用户106967

我发现阅读《Lua 5.1 的实现》(The Implementation of Lua 5.1)对于理解 Lua 的实际运行非常有帮助。

该书解释了哈希技术、垃圾回收以及一些其他细节。

2010-05-05 09:08:20
stackoverflow用户516274
stackoverflow用户516274

我很惊讶你要参考VM的C语言源代码,因为lua.org和位于巴西的tecgraf/puc rio将其保护起来,特别是考虑到该语言在许多国家用于实际商业和商业应用。有关实现lua的论文包含了VM中允许包含的大部分详细信息,但VM的结构是专有的。值得注意的是,版本5.0和5'是由IBM在欧洲委托,用于客户主机,其基于寄存器的版本具有接受IBM定义的中间指令格式的VM。

2010-12-13 16:49:07
stackoverflow用户328
stackoverflow用户328

另一篇很好的论文是 The Implementation of Lua 5.0,它描述了虚拟机中各种关键系统的设计和动机。我发现阅读它是理解 C 代码中所看到的东西的好方法。

2013-08-08 23:59:39