非商業轉載請註明做譯者、出處,並保留本文的原始連接:http://www.ituring.com.cn/article/114954程序員
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也給了我不少很好的建議,因此如今這件事對我來講再也不困難了。做爲一位做者,最難的莫過於把本身置身於讀者的位置上,而讀者對你所瞭解的知識一無所知,因此你要想象他們即將遇到的問題,而後趕在他們遇到以前,把這些問題解決掉。