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