Lua 和 Python 相比,哪一種語言更快更好

網上常常看到別人拿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++的老路了。函數

相關文章
相關標籤/搜索