Joe Armstrong:關於Erlang,有很多東西我想改變(圖靈訪談)

盼盼姐發表於2014-07-08

Joe Armstrong,Erlang最初的設計者和實現者,他也是Erlang OTP系統專案的首席架構師。他擁有瑞典皇家理工學院博士學位,是容錯系統開發領域的世界級專家。Armstrong起初是一名物理工作者,在攻讀物理學博士學位時因為用完積蓄而轉向了電腦科學,找到一份研究員的工作,為英國人工智慧領域奠基人之一的Donald Michie工作。在此期間,他成為英國機器人學會的創始成員並撰寫了一些有關機器人視覺的論文。人工智慧的資金來源枯竭,Armstrong又回到了物理學領域。開始時他在歐洲非相干散射科學協會工作,後來又到了瑞典空間研究中心,最後加入了愛立信電腦科學實驗室,Erlang就是在那裡發明的。

在現代語言的版圖中,Erlang有點另類。同很多流行的語言相比,它既老又新。早在1986年,也就是Perl出現的前一年,Armstrong就已經開始了Erlang的工作,當時它只作為商用產品出售並且主要在愛立信公司內部使用。這種情況直到1998年Erlang作為開源專案釋出後才發生變化,那時Java和Ruby已經問世3年了。當時Erlang設計初衷也相當明確,它針對的軟體是類似於電話交換機那樣的高可用性、高可靠性系統。

英文版訪談

世界上有上百種程式語言,有一些語言效率很高,也很簡潔,但是它們從未真正流行起來。您認為一個語言背後的成功的關鍵是什麼?

一個新的語言必須極其擅長解決某一類問題。這類問題必須是人們想要解決的問題,而與其競爭的語言在解決這個問題的時候捉襟見肘。在商業成功上,必須有人能夠通過使用這個語言掙到大錢。通過使用這種語言會帶給你使用其他語言無法比擬的競爭優勢。

有哪些至關重要的因素讓Erlang成為如今的Erlang?

Erlang的第一個機會來自於一個用其他語言程式設計的大專案的失敗。我們通過用Erlang重新程式設計而拯救了這個專案。

第二個重要因素是1998年,Erlang被愛立信公司暫時禁用。於是當Erlang開源的時候引發了一系列的事件,一大批公司從此選擇Erlang作為他們的主要技術。

最近的一次,WhatsApp被Facebook以190億美元收購,此次收購成為有史以來最大的軟體收購。WhatsApp就是用Erlang編寫的,這個事實也吸引了很多注意力。

您對Elixir的評價很高,您認為Erlang在未來的發展會受到Elixir的影響嗎?

是的,但是不單單是Elixir,Erlang也會被其他語言的發展所影響。

未來Erlang將會如何演進?有什麼要點可以和我們分享嗎?

Erlang剛開發出來的時候,那時機器記憶體還只有幾兆位元組,所以我們決定僅僅允許同一個模組的兩個版本同時存在。現在我們已經有千兆位元組的記憶體,所以我們可以有上千個版本,然後讓垃圾收集器把沒用的版本移除。

在原始的Erlang實現裡,同一臺機器上的程式間的資訊通過時間是恆定的。在多核計算機上,這點將改變,所以我們需要考慮在多核處理器上的物理位置排布。

在不遠的將來,我們將會看到每個晶片上有幾千個CPU的多核計算機的大量出現,其中的一些核會由於生產問題而無法使用,所以我們需要學會如何把Erlang程式分佈在可用的核上。

我們還需要理解能量使用。從環境因素考慮,我們需要知道如何把效能最大化,同時讓能耗最小化。大量多核可以在低壓下執行,時脈頻率可以用來讓能耗最小化,但是我們仍需要很大的努力才能知道如何用程式設計來實現這些。

你認為Erlang和Scala之間存在競爭關係嗎?他們各自獨特的優勢在哪?

他們確實是對手——但是Scala和JVM之間繫結地更緊密。Scala為Java程式設計師提供了一條遷移路徑,但是Scala和Erlang執行時的特點完全不同。有很多Erlang擅長而Scala不擅長的問題,反之亦然。

併發、並行、分散式的程式設計模式,Erlang更擅長哪一個?不擅長哪一個?為什麼?

Erlang最擅長協調並行活動,處理故障,Erlang程式在執行多核的時候也可以很好地擴充套件。

Erlang在儲存密集型的數值計算上並不擅長。這背後的原因在於容錯系統和儲存管理系統。為了實現高容錯,我們必須在不同的地方存放資料拷貝,所以當程式崩潰的時候我們可以在其他的地方重啟。所有這些複製都需要時間。高效的數值計算可以在記憶體中進行,不需要複製,但是它的代價就在於容錯性低。

高容錯性需要CPU時間和儲存,所以如果你不需要容錯和分佈,那就不應該使用Erlang。

如果可以重新來過,你希望對Erlang做哪些改動?

有很多東西。但是這個語言也在緩慢地改變。我希望能看到幾樣東西。其中每樣都是頭等重要。但是比如說模組,它就不是頭等重要的,我們不能輕而易舉地把模組變成一系列的功能,或者把一系列功能變成一個模組。我們應當可以構建或解構任何Erlang物件。像協議這樣的東西,雖然是隱式的,但是它們應該變成顯式的。

Erlang分散式程式設計的程式設計模型需要擴充套件成“全球範圍分佈”。雖然現在我們可以在單獨Erlang節點或節點叢集上註冊程式,但是離開了就不行,這樣就無法讓世界上的每臺計算機都可以訪問。

XML語言似乎無法適應如今的大資料環境。新語言ML9應該具備什麼樣的特性才能保持XML的優勢同時去除它的缺點?

ML9是一個實驗,我現在已經不再維護了。XML可以用,但是不應被用來長期儲存或傳送大量資料。對於小結構檔案,XML足以勝任。

有很多Ruby, Java, Python程式設計師想要學Erlang,對他們你有什麼建議嗎?

看我的書!

你曾經提到過Dave Thomas給過你很多關於寫作的建議,你從你的寫作經歷裡學到了什麼?對其他初出茅廬的作者你有什麼樣的建議?

我學會了享受寫作,通過不斷地修改和重寫來提高我的文字。我還找了一群不同背景的讀者來讀我的文字,然後他們會告訴我他們是否理解了。我很喜歡大量的反饋,如果人們不理解我寫的東西,那我就要再多解釋一些。沒有反饋的話,我不會知道哪個部分更容易理解,哪個部分更艱澀。

曾經有很多年,我認為寫作是件非常困難的事,在學校的時候我的數學很好,寫作很糟,但是我努力克服了自己的缺點,Dave Thomas也給了我很多很好的建議,所以現在這件事對我來說不再困難了。

作為一位作者,最難的莫過於把自己置身於讀者的位置上,而讀者對你所瞭解的知識一無所知,所以你要想象他們即將遇到的問題,然後趕在他們遇到之前,把這些問題解決掉。


更多精彩,加入圖靈訪談微信!

相關文章