漫話Lua:在游戲中崛起之后 這個熱門語言何去何從?
原創(chuàng)我其實是非常不想討論編程語言的好壞的,一個是因為這本身無法定論,就好像非要爭論到底是中文好還是英文好一樣;另一個是一旦有人談?wù)摮绦蛘Z言,必然各種聲音四起,導致沒完沒了的“戰(zhàn)爭”。把以前關(guān)于語言的爭論打印出來,恐怕可以蓋一座摩天大樓了。以下內(nèi)容只是我個人觀點,存在偏見和誤解還請原諒,如果有不同觀點,可以討論,我保留態(tài)度。
既然要聊Lua,那么首先需要介紹一下它,Lua是一門設(shè)計優(yōu)雅,輕量、易擴展的可嵌入式腳本語言。提起它,但凡使用過的朋友都會聯(lián)想到這么幾個關(guān)鍵詞:輕量、快速、可嵌入等等。
一門語言想要流行,很大程度上并不取決于語言本身,而是由行業(yè)決定的。近年來Lua的流行,不得不承認,很大程度上是因為魔獸世界使用它所帶來的影響,但是這也只是達成了大家使用它的前提,如果不是Lua自身的一些特點讓大家覺得值得用它,Lua也不會有現(xiàn)在這么火爆。
我覺得Lua在游戲領(lǐng)域以及嵌入式設(shè)備上能夠獲得那么多人的支持,最主要的原因有3點:
首先是Lua足夠的小。有人說小也能夠成為用它的理由嗎?在別的領(lǐng)域可能很難讓人信服,但是在編寫程序上,這絕對有說服力。Lua官網(wǎng)發(fā)布的版本,比如Lua5.1,實現(xiàn)的內(nèi)容包括整個Lua的核心加上幾個基本的庫,整個實現(xiàn)也就只有2萬多行代碼,代碼量如此的精簡,讓人不得不佩服Lua作者在追求語言的簡練性上所做出的努力。Lua源碼采用C語言實現(xiàn),能夠非常容易地嵌入到C\C++的程序中,因為Lua的小巧,你可以根據(jù)自己需要來調(diào)整Lua的源碼,讓它滿足自己程序的要求,在閱讀源碼的時候,可以非常清楚得弄明白,語言的內(nèi)部到底在做些什么,而不必去擔心因為引入它而出現(xiàn)一些意想不到的bug。
第二個使用Lua的原因是它極佳的可移植性。因為Lua使用ANSI C編寫而成,這使得它天生就具備極佳的可移植性,我們能夠在各種設(shè)備的開發(fā)上使用它,比如目前最火的手機軟件的開發(fā),國內(nèi)流行的手游開發(fā)模式cocos2dx + Lua也證明了這一點。相信在不久的將來,我們能夠在更多的設(shè)備開發(fā)中發(fā)現(xiàn)Lua的身影。
另一個重要的原因我認為是Lua從5.0版本后使用了MIT協(xié)議進行發(fā)布,這使得幾乎所有人都可以把它放進自己的產(chǎn)品中,而不用去擔心版權(quán)的問題,至少對于商業(yè)軟件來說,這一點屬于必須考慮的問題之一。使用它會不會有法律糾紛,修改它有沒有那么自由,這些也是一個有責任的程序員所必須面對的問題。
Lua語言受到這么多開發(fā)者的擁戴,在我看來也是十分正常的。一門程序語言能不能得到使用者的喜愛,最重要的一個標準就是能否拿它實現(xiàn)自己想要的目標。Lua的小巧,代碼的精煉,使得它相對于其他龐大的腳本語言來說有著極大的優(yōu)勢,這門語言是否剔除了不必要的冗余結(jié)構(gòu),是否干凈、整潔、KISS,這都是非常重要的,它內(nèi)部實現(xiàn)的各個模塊是否邏輯正交,是否已經(jīng)達到最簡。作為一名程序員,我當然希望我所使用的語言如同數(shù)學公理系統(tǒng)一樣完美,滿足相容、獨立、完備的性質(zhì)。當然,我不是說Lua達到了這樣的標準,在我使用過的所有語言當中,我也找不到滿足這樣標準的語言,但是Lua精簡的源碼,卻是讓人眼前一亮。
不得不說目前Lua用的最火的地方,還是在游戲開發(fā)上(當然,像Adobe Photoshop Lightroom這樣大量使用Lua的軟件也不在少數(shù))。我們看到除了《魔獸世界》、《孤島危機》這樣的PC端大作使用它以外,像《憤怒的小鳥》以及網(wǎng)上流行的開源版本的《Flappy Bird》也使用Lua作為腳本來處理從邏輯到UI的各種工作。在我自己的項目當中,也大量的使用到了Lua,無論是作為服務(wù)端的邏輯,還是客戶端的UI處理,Lua的優(yōu)勢都顯而易見,它的各種語言特性讓人處處驚喜。Lua的語法雖然談不上極為簡潔,但是寫起來是十分舒服的,而且讓看代碼的人也不會很痛苦,心理負擔相對較?。籐ua中最重要的數(shù)據(jù)類型table類型,也讓人在使用的時候有一種發(fā)現(xiàn)寶藏的感覺,table的實現(xiàn)方式采用數(shù)組和散列表的組合,無論是查詢效率還是插入效率,都讓人滿意,至少在處理一般邏輯問題上,table的描述能力和性能是十分強大的;作為一門動態(tài)類型語言,Lua的gc處理以及弱引用機制也讓人印象深刻;在面向?qū)ο蠓矫妫琇ua自身所具備的機制(比如元表)提供了實現(xiàn)面向?qū)ο缶幊痰亩喾N途徑;還有Lua的協(xié)程機制,對于編寫并行邏輯是非常有用的,它讓我們可以用同步的方式寫出異步回調(diào)的邏輯,減少學習的時間,降低使用的成本。Lua的性能也是它的一大亮點,基于寄存器的虛擬機本來是Lua作者的一次嘗試,但是結(jié)果證明,這是成功的。Lua還有各種各樣的特點,比如優(yōu)秀的C API等等,所以我覺得,在未來,Lua將會繼續(xù)在各個設(shè)備和領(lǐng)域得到廣泛的運用。
因為最近Lua的火爆,有人拿它和Javascript做對比,既然編輯也問到這個問題,我也說一下我的看法,Javascript的火爆是有目共睹的,在github上,js的代碼項目無疑是最多,自從存在Web應(yīng)用以來,js就一直被人們所關(guān)注,并在不斷的發(fā)展壯大當中,現(xiàn)在越來越多的非Web應(yīng)用也采用了js來編寫,它無疑是一種被大家認可且喜愛的語言,它已經(jīng)被證明擁有構(gòu)建大規(guī)模復雜程序的能力。它和Lua有許多相似之處,也有大量的不同,這源于js的設(shè)計目的本來就和Lua是有所差異的,Lua的作者也曾說過,Lua并非是為了設(shè)計成為主流的編程語言,但在嵌入C\C++程序,或者是作為API的封裝以及作為宿主程序和邏輯層之間的粘合劑,Lua有著天然的優(yōu)勢。到底是使用js還是選擇Lua則要根據(jù)它們自身的特點以及自己所面對的應(yīng)用場景來定。
前面談的,其實在各種資料和業(yè)內(nèi)新聞以及博客中都能夠看到,為了表示我沒有敷衍了事,下面說點我對Lua未來的想法。
Lua目前被大家廣泛使用,有一部分原因是因為它強大的性能,我們可以在網(wǎng)上看到各種語言和Lua比速度、比性能的報告,但是在未來,隨著計算機運算速度的提升,我相信我們考慮性能問題會越來越弱化,這并不是說性能問題不重要,在任何時候,追求性能的卓越都是值得鼓勵的,而且在某些方面,性能是越快越好,比如一些數(shù)值運算或者是圖形的渲染處理等等。但是作為程序員,更多的去關(guān)注程序的邏輯,把性能問題交給編譯器才是我理想中的情況。在這種弱化性能問題的情況下,Lua能否繼續(xù)被廣泛使用呢?這是我的第一個考慮。
其次,在未來,我相信大多數(shù)語言的核心都會被設(shè)計的精簡、強壯,而各種各樣的庫才是我們大家關(guān)注的焦點,當程序庫成為比語言核心更為重要的東西的時候,一個很明顯的例子就是python語言,python有著各種各樣豐富多彩的程序庫,我身邊的朋友使用python的時候,從來就不操心有功能沒辦法實現(xiàn),因為已經(jīng)有大量可用的程序庫可以選擇,而相比下來,Lua的程序庫就要少了許多,Lua的能力更多的是依靠它的宿主語言賦予的,那么將來Lua能否擁有一些可供選擇,不需要重新造輪子,完善的程序庫供我們使用呢?這是我的第二個考慮。
第三個考慮是,在Lua廣泛使用之前,使用者的人數(shù)比較少,Lua的作者可以對語言進行大刀闊斧的修改,而不會引起大規(guī)模的恐慌或不滿,每個用戶都可以向作者提出自己的意見和方案,就好像拍美劇一樣,每一集都由不同的編劇來寫,但是最終由總編劇來把握整個劇情的發(fā)展,Lua的一切修改,最終都由Lua的作者來決定并實現(xiàn),用戶數(shù)少的時候這沒有問題,但是當用戶數(shù)量增多之后,這種發(fā)布方式能否跟得上現(xiàn)代開源軟件的發(fā)展趨勢呢?比如Lua5.2和LuaJIT的分裂就讓我們痛心疾首,而Lua各個版本之間的不兼容也讓我們寢食難安,我懷著良好的心態(tài)相信這最終會得到解決。
最后我希望Lua的社區(qū)能夠更加活躍,更加團結(jié)一些,由于Lua的核心非常精簡,而且提供了強大的可擴展性,目前很難統(tǒng)一或者是規(guī)劃Lua的方方面面,舉個例子,比如用Lua實現(xiàn)面向?qū)ο蟮姆椒?,就有好多個不同的版本,這些風格分裂的代碼根本無法統(tǒng)一起來,這讓Lua的初學者比較苦惱,當然這也會激發(fā)各種各樣的靈感,畢竟語言定要處在發(fā)展當中才有生命力。
在新的一年中,我相信Lua的使用度會越來越高,而且隨著可穿戴式設(shè)備的火熱,我們將會在這些領(lǐng)域也能看到Lua的身影。當然,在游戲行業(yè),Lua天生可擴展和性能良好的語言特性,讓它成為C\C++編寫的游戲程序,去選擇腳本語言的首要考慮,今年這個趨勢應(yīng)該不會改變,而且隨著移動端游戲的火熱開發(fā),使用Lua的人數(shù)將會越來越多,我想Lua的作者恐怕是想象不到,有一天,這門語言會受到如此大范圍的關(guān)注。