Lua虚拟机的简明描述是什么?
我已经大概浏览了《Lua 程序设计》和 Lua 参考手册。
然而,它们都只告诉我「这个函数是什么」,而不告诉我「它是如何运作的」。
当我阅读 SICP 时,我有这样一种感觉:“啊,这就是 Scheme 底层的计算模型。” 我正在尝试获得关于 Lua 相同的感觉,即一个简明的描述它的虚拟机,而不是一个「这是什么」的描述。
有没有人知道一个好的文档(除了 C 源代码)来描述这个?
原文链接 https://stackoverflow.com/questions/2769409
Lua所采用的计算模型与Scheme的计算模型基本相同,除了中心数据结构不是“cons cell”,而是可变哈希表(至少在你使用元表进行元编程之前)。否则,所有熟悉的东西都在那里:具有可变本地变量(在Scheme中称为let-bound variables)的嵌套一级函数等。
我不确定你能从研究虚拟机中得到多少好处。我之前在虚拟机上做过一些更改,它与任何其他基于寄存器的 VM 非常相似,虽然可能更简洁一些。只有少数几个指令是Lua特有的。
如果您对元表感到好奇,语义在Lua 5.1参考手册的第2.8节中清楚地描述,尽管有点啰嗦。如果您查看src/lvm.c
中的虚拟机代码,将看到类似于C实现的逻辑(例如,内部的Arith
函数)。虚拟机指令针对常见情况进行了专门优化,但所有内容都非常简单明了,没有任何巧妙的处理。
多年来,我一直希望能够获得更正式的Lua计算模型规范,但我更喜欢正式语义。
请参阅http://www.lua.org/source/5.1/lopcodes.h.html。列表从OP_MOVE开始。
除了已经提到的A No-Frills Introduction to Lua 5.1 VM Instructions,你可能会对Mike Pall关于如何阅读Lua源代码的这篇优秀文章感兴趣。
同时也请参考与之相关的Lua-Users Wiki页面:LuaSource。
我发现阅读《Lua 5.1 的实现》(The Implementation of Lua 5.1)对于理解 Lua 的实际运行非常有帮助。
该书解释了哈希技术、垃圾回收以及一些其他细节。
我很惊讶你要参考VM的C语言源代码,因为lua.org和位于巴西的tecgraf/puc rio将其保护起来,特别是考虑到该语言在许多国家用于实际商业和商业应用。有关实现lua的论文包含了VM中允许包含的大部分详细信息,但VM的结构是专有的。值得注意的是,版本5.0和5'是由IBM在欧洲委托,用于客户主机,其基于寄存器的版本具有接受IBM定义的中间指令格式的VM。
另一篇很好的论文是 The Implementation of Lua 5.0,它描述了虚拟机中各种关键系统的设计和动机。我发现阅读它是理解 C 代码中所看到的东西的好方法。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
你可能想阅读 No-Frills Intro to Lua 5(.1) VM Instructions(选择一个链接,点击 Docs 标签,选择 English -> Go)。
我不记得我在哪里看到过,但我记得 Lua 的作者明确地不鼓励最终用户过于详细地了解虚拟机;我认为他们希望它尽可能成为一个实现细节。