我已经浏览了Lua中的Programming,我查看了Lua Reference。
但是,他们都告诉我此功能执行此操作,而不是如何。
在阅读SICP时,我有这种感觉:“啊,这是计算模型的基础方案”;我试图对Lua有同样的感觉 - 即对它的简洁描述,“如何”而不是“什么”。
有没有人知道描述这个的好文件(除了C源)?
答案 0 :(得分:15)
您可能需要阅读No-Frills Intro to Lua 5(.1) VM Instructions(选择一个链接,点击文档标签,选择英语 - > Go)。
我不记得我在哪里看过它,但我记得读过Lua的作者专门阻止最终用户在VM上过多的细节;我认为他们希望尽可能多的实现细节。
答案 1 :(得分:7)
除了已经提及A No-Frills Introduction to Lua 5.1 VM Instructions之外,您可能对Mike Pall关于如何阅读Lua源码的this excellent post感兴趣。
答案 2 :(得分:5)
见http://www.lua.org/source/5.1/lopcodes.h.html。该列表从OP_MOVE开始。
答案 3 :(得分:3)
Lua的计算模型与Scheme的基本计算模型非常相似,只是中心数据结构不是cons单元;这是可变的哈希表。 (至少在你使用metatables进行元编程之前。)否则所有熟悉的东西都存在:嵌套的第一类函数,带有可变局部变量(Scheme中的let-bound变量),依此类推。
我不清楚你对VM的研究会有多大帮助。我曾经在VM上做过一些黑客攻击,它和其他任何面向寄存器的VM很像,虽然可能更清洁一点。只有少数指令是特定于Lua的。
如果你对metatables感到好奇,那么语法就会在Section 2.8 of the reference manual for Lua 5.1中清楚地描述,如果有些冗长的话。如果您查看src/lvm.c
中的VM代码,您几乎可以看到在C中实现的逻辑(例如,内部Arith
函数)。 VM指令专门针对常见情况,但它们都非常简单;没有什么聪明的。
多年来我一直想要一个更正式的Lua计算模型规范,但我的品味更多地倾向于形式语义......
答案 4 :(得分:3)
我发现The Implementation of Lua 5.1对了解Lua实际上在做什么非常有用。
它解释了散列技术,垃圾收集和其他一些碎片。
答案 5 :(得分:0)
另一篇很棒的论文是The Implmentation of Lua 5.0,它描述了VM中各种关键系统的设计和动机。我发现阅读它是解析和理解我在C代码中看到的内容的好方法。
答案 6 :(得分:-3)
我很惊讶你提到VM的C源代码,因为它受到lua.org和巴西的tecgraf / puc rio的保护,因为该语言被用于许多国家的真实商业和商业应用程序。关于lua的实现的文章包含了关于VM的详细信息,它允许包含VM,但VM的结构是专有的。值得注意的是,版本5.0和5'由IBM在欧洲委托用于客户大型机,其基于寄存器的版本具有接受IBM定义的中间指令格式的VM。