网上常常看到别人拿lua与python来进行对比,可是,本人认为,lua与python根本就不具备可比性.缘由以下:
一、二者的定位不一样。python的定位在于自身的独立开发,便是说python定位于本身能解决全部的问题。lua定位在与其它的代码,尤为是C++代码进行相互配合的编译,单独的Lua自己没有任何的意义。
二、站在解决问题的角度上看。python依靠自身愈来愈强大的库,让编程者能实现愈来愈多,愈来愈复杂的问题。lua自己则必须与其它的编译语言结合,才能解决问题。以C+++lua来举例。单独的C++,由于C++的复杂性,在其解决问题提供方便的同时,也给程序员带来了很大的麻烦,这些麻烦主要有两个方面:1,C++自己,特别是能用好C++,对程序员就来讲就是一个很高的要求。2,在解决复杂问题时,C++程序结构的复杂性和逻辑实现的复杂性,给程序员对程序的改进和维护带来了很大的麻烦。而C++与Lua的结合,让C++能够只负责为lua提供各类基本的功能函数库,而Lua调用这些库来实现各类逻辑功能。这种分工可让程序员将程序中的基本代码库和逻辑实现代码进行分离,使程序的效率和可维护有了很大的提升。因此,若是真的要站在解决问题的角度来对python和lua进行对比的话。实际上,是C++与python进行对比,而与lua无关。
三、python与C++对比,我以为python与C++对比的优点就在于其所提供的基本库,大大的下降了程序复杂度与可维护性对程序员自己的要求。好比,一样的功能,若是是C++来作的话,可能其程序员必须具有三年的经验,若是是python来作,而python又有解决问题所须要的库的话,一个具备一年程序经验的程序员可能就能完成了。可是,一样的,若是是C++与Lua结合来解决问题的话,可能就只须要半个高级程序员和一个只有c语言一年经验的程序员就能够了。半个高级程序员负责提供lua的函数库,另外一个程序员,只须要用这些代码库实现逻辑就好了。
但若是但就运行速度来比较的话,首先lua的虚拟机很是简单,指令设计也很精简。最关键的是, lua 是基于寄存器的虚拟机实现,而python还有不少其余脚本语言是基于堆栈的,基于寄存器的虚拟机字节码更简单,更高效,由于register based vm的字节码,通常同时包含了指令/操做数/操做目标等。
对比简单的加法操做:
stack based 生成的字节码大概是这样(仅仅是模拟,不表明实际)python
PUSH 1
PUSH 2
ADD // ADD 的操做结果存放eax
PUSH eax // 将结果push入堆栈,以便后面的代码不会覆盖eax程序员
而register based 生成的字节码大概是这样:
ADD 1,2,R1
就一行,R1存放1+2的结果编程
就这么简答的操做就已经相差4条指令,因此基于寄存器的虚拟机字节码运行更有效率。Lua的指令集很是很是很是简单,我对着指令说明看了半个小时就能看懂lua的汇编代码了,再花十来分钟就能手动修改lua二进制代码了,而我甚至没完整看过lua的源码。
综上所述,C++ +lua的开发模式,和python源代码库开发+python脚本开发模式实际上是同样的。可是站在程序员的角度上来讲,C++ +lua就更为简单一些,由于除去基本的lua解释代码外,C++能够为lua动态提供各类函数库。而python程序员则必须受制于python所提供的各类功能库。因此,若是解决一些具备广泛性和重复性的问题时,python是有优点的,由于有不少的代码能够不用重写,而C+++lua则必须重构。若是是解决一些非广泛的问题,若是python自己没有提供解决这些问题的库的话,python程序员,也许要必须走回C++的老路了。函数