我的脚本开发到了中途,变量,函数,for,while,if then else elseif 都写完了。开始写的时候就定下誓约,不和Lua比速度。因为是自己写的,函数接口可以写的很友好,需要特殊的功能和语法也可以添加。虚拟机准备向c过度。
很长时间都是用luaide进行Lua的学习,lua用的最多的一次也都是LuaPlayer,所以最近尝试用Lua本身的编译器和解释器试下。 使用中还发现一个很搞笑的东西,从sourceforge上下载的最新lua5.1的代码有vc6.0 到2005的工程,打开2005编译,竟然有一个工程链接不过,遂查了一下,官方做工程时搞掉了一个原文件,而后自己做了一个vs2005pass的包。使用lua5.1.exe [filename] 可以运行脚本,用luac5.1.exe -l [filename] 就可以显示lua的机器码。看代码:
main <test.lua:0,0> (9 instructions, 36 bytes at 00375698)
0+ params, 2 slots, 0 upvalues, 0 locals, 4 constants, 0 functions
1 [39] LOADK 0 -2 ; 0
2 [39] SETGLOBAL 0 -1 ; a
3 [40] GETGLOBAL 0 -1 ; a
4 [40] ADD 0 0 -3 ; - 1
5 [40] SETGLOBAL 0 -1 ; a
6 [42] GETGLOBAL 0 -4 ; print
7 [42] GETGLOBAL 1 -1 ; a
8 [42] CALL 0 2 1
9 [42] RETURN 0 1
源码:
a = 0
a = a + 1
print(a)
很多人都称Lua的API像汇编一样晦涩,但Lua的设计却是最有创意和全局思想的。将脚本指令,机器指令和API统筹为同一个概念。全局函数和变量就是全局的一个table。整个代码编译出来就是在几个函数间的调用,再加上5.0之后的全寄存器架构,更让其成为地球上最快的语言
一直很迷惑很多人说Lua是解释执行,我们来分析下:如果load的是源码或者buffer并运行,lua分析代码并生成代码,最后运行的依然是机器码。但Python就是纯正的解释执行,毕竟你没有听说过Python的虚拟机。但是这并不代表Python没有虚拟机,Python也可以和Lua一样将代码编译成bytecode,但是并不是很低级的代码。所以Python的效率远远不如Lua。所以Lua必定是编译执行。
本文探讨了Lua的机器码和虚拟机,通过示例展示了如何使用luac5.1.exe显示Lua脚本的机器码,并讨论了Lua与Python的执行方式区别,指出Lua是编译执行,而Python的解释执行方式导致其效率低于Lua。
712

被折叠的 条评论
为什么被折叠?



