巴西的編程語言都佔領全世界了,中國怎麼就不行呢?

如果看一看主流的編程語言,都是由發達國家的程序員創造的。

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正陷於苦悶當中。

他希望有一種自定義的腳本語言,把遊戲引擎和邏輯給分離開,這樣就可以輕鬆地編寫遊戲邏輯:

但是,自己公司的腳本語言SCUMM卻不夠用,苦惱之時,同事給他遞來一期《Dr. Dobb’s Journal》雜誌, 上面有正是關於Lua的介紹。

Bret看後,激動萬分,如獲至寶,立刻給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

(完)