文章目录:
lua解析器用什么写的?
没有汇编,只有C语言,而且是最基本的C语言。
lua官方的解释器为保证lua解释器的可移植性和可嵌入性,用纯ANSI C写的,即其中只有保持最大兼容要求的标准C语言代码……通俗点说,没有使用任何各种编译器的方言语法以及更高版本的C语言语法,甚至没有使用复杂的函数库,在通俗点说就是只引入了std开头的那些C语言库,比如说常见的stdio.h和stdlib.h……
但是嵌入性是lua解释器的基本要求之一,你可以将其嵌入到自己的程序里面作为扩展,其本身也具有很强的扩展性,所以如果你问lua解释器本身,毫无疑问是C语言,如果是嵌入了lua的产品可能成分就并不单纯了……
源码可在此处下载到,整个源码只有五百来K,感兴趣可以看一下:
lua源码分析4(lua是怎么执行的)收藏
当分析到这里,对于lua生成中间码的过程就比较熟悉了。关键是生成的中间码必须要和lua虚拟机的执行联系在一起。所以,对于这里分析的函数调用,要结合lua虚拟机的执行一起来分析。
上篇文章对生成局部函数中间码做了简单的介绍。这里知道,当lua发现一个新定义的函数的时候,会生成OP_CLOSURE指令。那么,lua虚拟机执行到OP_CLOSURE后怎么执行呢?
在此之前,先说在lua解析代码完了以后,会做那些善后之事呢?
前面说过,lua会把一个代码文件当作是一个函数解析执行。在解析期间,它会率先生成一个FuncState的结构,作为最外面的函数。但这是解析时做的事情,运行期间,是不会有FuncState这个东西出现的。在运行期间,是由一个个叫CallInfo的数据结果的,它指的是当前运行的函数。
那么,在解析代码以后,是怎么转入运行的呢?
有没有关于C++开源软件解析的书籍?
“开源软件解析”?你的意思是源码剖析or源码阅读方法?
我所知道的(眼界有限,见笑了)纯粹C++的有:
《STL源码剖析》(作者侯捷,深入浅出剖析地STL源码的组织结构及其细节,值得推荐)
《C++网络编程 第一卷》(书的作者就是ACE的作者,主要向我们展示ACE的设计理念,如果你对网络编程不感兴趣,可以不用看)
关于源码阅读方法,我所知的有:
《代码阅读方法与实际》(书中列举了大量NetBSD的源码)
Linux源码方面的书貌似有不少,Apache,Nginx的源码书也有不少;这些好像都是纯C写的。
不过想要读懂这些和特定领域有关的开源代码,光有语言基础是不够的,还有足够的“领域知识”。读任何操作系统源码前你起码应该知道其上的API如何使用,读web服务器源码前你起码要知道TCP,HTTP协议的区别与联系,读物理引擎的源码前你起码要有高中物理的知识储备和线性代数的基础
如何学习 Lua VM 的源码
我最后希望能做到的是:把Lua某个版本的代码通透看完,在github上写一个开源的分析Lua源码的文档,最后能正确写一份英文的得到Lua社区的认可。
之所以花这么大功夫去啃Lua代码,是因为我觉得Lua是门很好的语言,参见知乎我在其他帖子中对Lua的评价。另一方面是Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。Lua是世界最流行的脚本语言之一,前几年还进过top20的流行语言,另外又是C\C++的完美伴侣。另外,我自己对如何实现一门语言也充满了好奇,Lua虽小五脏俱全而且还是正经实用的项目。就这些理由一直在支撑着我看下去。当然现在最难的时候已经过去了。
习 Lua VM 的源码我最后希望能做到的是:把Lua某个版本的代码通透看完,在github上写一个开源的分析Lua源码的文档,最后能正确写一份英文的得到Lua社区的认可。之所
LOSURE指令。那么,lua虚拟机执行到OP_CLOSURE后怎么执行呢? 在此之前,先说在lua解析代码完了以后,会做那些善后之事呢? 前面说过,lua会把一个代码文件当作是一个函数解析执行。在解析期间,它会率先生成一个FuncState的结构,作为