如果看一看主流的編程語言,都是由發(fā)達(dá)國家的程序員創(chuàng)造的。
C、C++、C#、Java、JavaScript、Go、Rust、PHP誕生于美國;Python誕生于歐洲。
但是Lua是個(gè)例外,它出生在遙遠(yuǎn)南半球、桑巴足球的國度:巴西。
巴西是個(gè)發(fā)展中國家,經(jīng)濟(jì)水平不高,IT界也不發(fā)達(dá),但是卻創(chuàng)造了一個(gè)世界流行的編程語言,它到底是怎么做到的?
1
編程界有個(gè)笑話:駱駝是委員會設(shè)計(jì)的馬。
笑話諷刺是由委員會設(shè)計(jì)出的編程語言都不怎么樣,比如Algol 68, PL/I ,Ada都沒有達(dá)到最初的期望。
Lua也是一個(gè)委員會設(shè)計(jì)的,但是,這個(gè)委員會非常小,只有三個(gè)人,他們都是里約熱內(nèi)盧天主教大學(xué)的同事:Roberto Ierusalimschy, Luiz Henrique de Figueiredo, 和Waldemar Celes。
里約熱內(nèi)盧天主教大學(xué)和巴西石油公司有一些合作項(xiàng)目,需要一個(gè)領(lǐng)域特定語言(DSL)來處理數(shù)據(jù)輸入和數(shù)據(jù)配置。
三人團(tuán)隊(duì)相繼創(chuàng)造了DEL, SOL這兩門語言,并且在石油公司的應(yīng)用中取得了成功。
隨著需求的越來越復(fù)雜,需要一門真正的腳本語言,可以賦值,有邏輯控制,函數(shù),可以嵌入到巴西石油公司的應(yīng)用中使用。
什么叫嵌入到別的應(yīng)用中呢?
舉個(gè)例子,你用C語言寫了一個(gè)應(yīng)用,其中有一段復(fù)雜的邏輯,是計(jì)算員工工資的,但是老板希望在應(yīng)用發(fā)布之后還可以修改工資,那么這段薪水計(jì)算邏輯就可以用Lua語言來寫,然后讓C語言應(yīng)用去調(diào)用。
每次老板想改變工資計(jì)算邏輯,你新寫一段Lua腳本,發(fā)布一下就可以了,整個(gè)應(yīng)用不需要改動。
這樣是不是挺爽?
當(dāng)時(shí)市面上用作腳本編程有這些:
Perl :過于復(fù)雜,不容易嵌入到別的應(yīng)用中
Python :1.0版還沒有發(fā)布,也不容易嵌入
Tcl:支持嵌入,但是語法對于非程序員太復(fù)雜了
于是三人決定,干脆創(chuàng)造一個(gè)新的編程語言吧!
1993年,Lua正式誕生!
Lua短小精悍,直到Lua5.3也只有不到1萬行C代碼!包含了I/O功能的二進(jìn)制包也只有200多K。(順便說一句,想深入學(xué)習(xí)C語言和語言設(shè)計(jì)的,Lua是個(gè)極好的范例)
它移植性很好,有著清晰而簡單的語法,是一個(gè)非常優(yōu)秀的、可擴(kuò)展的嵌入式語言。
Lua雖然在巴西石油公司用得不錯(cuò),但是外邊就默默無聞了。
在巴西本地,很少有程序員對Lua感興趣,無論是偏見還是實(shí)用主義,大家都傾向于向外看,尋求世界上最流行的技術(shù)來解決問題。
這是不是和現(xiàn)在的中國很像?
Lua這個(gè)巴西本地誕生的編程語言未來在哪里呢?
2
Lua團(tuán)隊(duì)做出了一個(gè)“艱難”的決定,暫時(shí)“切斷”和本地的聯(lián)系,走向全球。
他們說:“Lua 必須在國外取得成功才能在國內(nèi)獲得認(rèn)可?!?/p>
他們決定用英語來編寫Lua的文檔,而不是巴西的官方語言葡萄牙語。
就連《Programming in Lua》這樣的書,也只有英文版。
1996年,Lua團(tuán)隊(duì)開始向IT界最核心的區(qū)域——美國——進(jìn)發(fā),他們先后在美國的《Software: Practice & Experience》雜志和《Dr. Dobb’s Journal》雜志發(fā)表文章,介紹Lua這門可擴(kuò)展的嵌入式語言。
恰恰是《Dr. Dobb’s Journal》這本深受程序員喜愛的雜志的報(bào)道,徹底改變了Lua的命運(yùn)。
時(shí)任《冥界狂想曲》這款游戲的首席程序員Bret正陷于苦悶當(dāng)中。
他希望有一種自定義的腳本語言,把游戲引擎和邏輯給分離開,這樣就可以輕松地編寫游戲邏輯:
actor guybrush walk-to banana-tree
wait-for-actor
actor guybrush say-line “Mmm, bananas...”
actor guybrush face-camera
actor guybrush say-line “Wish I had a banana-picker”
但是,自己公司的腳本語言SCUMM卻不夠用,苦惱之時(shí),同事給他遞來一期《Dr. Dobb’s Journal》雜志, 上面有正是關(guān)于Lua的介紹。
Bret看后,激動萬分,如獲至寶,立刻給Lua開發(fā)團(tuán)隊(duì)發(fā)了一封郵件,大意如下:
Lua牛掰! 你好啊,我讀了Dr. Dobb’s關(guān)于Lua的文章,它在每個(gè)方面都超出了我的期望,它的優(yōu)雅和簡單把我給震住了,祝賀你們開發(fā)了這么一個(gè)思慮周全的編程語言。 對了,我是盧卡斯藝術(shù)娛樂公司的程序員,正在開發(fā)一個(gè)冒險(xiǎn)類游戲,我決定用Lua來替換掉公司的腳本語言。
Lua的開發(fā)者看到這封來自美國的郵件肯定是非常開心的吧,全球化的策略終于看到了一點(diǎn)成功的曙光。
Bret說到做到,他真的在《冥界狂想曲》中使用了Lua,并且還實(shí)現(xiàn)了Lua中并不支持的協(xié)程。
但是,只有一個(gè)游戲采用Lua并不能說明什么,幾年后的事情才真正讓人震撼。
3
1998年,游戲開發(fā)者的盛會Game Developers’s Conference在美國的圣何塞召開。
《絕地武士》游戲引擎的程序員,也盧卡斯藝術(shù)娛樂的Rob Huebner作為主講,講述了如何在游戲中使用腳本語言。
這個(gè)主題特別吸引人,現(xiàn)場爆滿,來了兩三百人。
Rob講解了腳本語言給游戲開發(fā)帶來的好處,也不厭其煩地介紹了如何從頭實(shí)現(xiàn)自己的腳本語言:詞法分析、語法分析、優(yōu)化等等。
聽眾有點(diǎn)兒沮喪:實(shí)現(xiàn)一個(gè)這樣的腳本語言太難了。
在提問環(huán)節(jié),Rob來了一個(gè)大轉(zhuǎn)折,他指著Bret說:其實(shí)不用那么麻煩,有現(xiàn)成的,他已經(jīng)在《冥界狂想曲》這款流行的游戲中使用Lua了,讓他來說說吧。
Lua ? 這是個(gè)什么東西?大家面面相覷。
Bret站了起來,說了自己的經(jīng)歷:Lua這個(gè)腳本又小又快,我只用了1天就嵌入到了游戲中。
這一下子把整個(gè)房間的激情點(diǎn)燃了,游戲程序員們紛紛在本子上做記錄,圍著Bret,向他打探Lua的細(xì)節(jié)。
經(jīng)過此役,Lua一戰(zhàn)成名,在游戲界迅速成燎原之勢,《半條命》、《模擬城市》、《魔獸世界》、《憤怒的小鳥》等一大批著名游戲都開始使用Lua。
隨著Lua知名度越來越高,更多的人認(rèn)識到,Lua滿足了一種全世界廣泛存在的一個(gè)需求:讓用戶改變軟件的行為,而不用深入到軟件的內(nèi)部。
不僅游戲可以用Lua,其他領(lǐng)域也可以用:比如TeX排版設(shè)置語言實(shí)現(xiàn)LuaTeX、鍵-值數(shù)據(jù)庫Redis、文本編輯器Neovim和Web服務(wù)器Nginx。甚至Google拼音輸入法都支持Lua腳本。
Lua還可以嵌入到硬件當(dāng)中,三星的電視,思科的路由器,Verizon的機(jī)頂盒,德州儀器的計(jì)算器,羅技的鍵盤都是Lua大施拳腳的場所。
隨著物聯(lián)網(wǎng)的發(fā)展,Lua肯定還會有爆發(fā)式增長。
4
和企業(yè)合作-->找到廣泛存在的需求-->發(fā)明編程語言-->面向全球推廣-->返回國內(nèi)。
Lua的發(fā)明者走出了一條漂亮的“曲線救國”的道路。
如果Lua誕生在創(chuàng)新的高地,如美國硅谷,它的發(fā)展肯定會快得多,因?yàn)樵谶@里有項(xiàng)目、有人、有組織,能幫助它提升在全球的知名度。
例如,JavaScript 是布蘭登僅僅花了10天就創(chuàng)建的語言,很多人抱怨其糟糕的設(shè)計(jì),但是它卻伴隨著網(wǎng)景瀏覽器占領(lǐng)了全世界。
從不發(fā)達(dá)地區(qū)發(fā)起的創(chuàng)新,則要難得多,不過,現(xiàn)在的好處是互聯(lián)網(wǎng)已經(jīng)非常發(fā)達(dá),只要你像Lua那樣,漂亮地解決了一個(gè)廣泛存在的問題,并且真正面向全球,互聯(lián)網(wǎng)會幫助你迅速傳播的。
遺憾的是,雖然中國的互聯(lián)網(wǎng)產(chǎn)業(yè)發(fā)展了二十多年,熱鬧非凡,到目前為止,中國還沒有一個(gè)世界流行的編程語言,不但沒有,還出現(xiàn)了“木蘭”這樣套殼造假的丑聞。
這不得不引起我們的思考,到底是我們不想弄呢,還是沒時(shí)間弄,還是不會踏踏實(shí)實(shí)地弄?
參考資料:
https://web.archive.org/web/20181125214924/https://www.foreignaffairs.com/articles/2013-04-21/brazil-wikipedia
https://dcc.ufrj.br/~fabiom/lua_20years.pdf
http://www.inf.puc-rio.br/~roberto/talks/hopl-slides.pdf
(完)
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.