Erlang

Erlang

Erlang在1991年由愛立信公司向用戶推出了第一個版本,經過不斷的改進完善和發展,在1996年愛立信又為所有的Erlang用戶提供了一個非常實用且穩定的OTP軟體庫並在1998年發布了第一個開源版本。目前Erlang同時支持的作業系統有linux,windows,unix等,可以說適用於主流的作業系統上,尤其是它支持多核的特性非常適合現在的多核CPU,而分散式特性也可以很好融合目前的各種分散式集群。

基本介紹

  • 中文名:Erlang
  • 外文名:Erlang
  • 類型:程式語言
  • 開發者:CS-Lab
  • 問世1987年
  • 適用:主流的作業系統
簡介,歷史,語言特點,發展前景,

簡介

Erlang是一種通用的面向並發的程式語言,它由瑞典電信設備製造商愛立信所轄的CS-Lab開發,目的是創造一種可以應對大規模並發活動的程式語言和運行環境。Erlang問世於1987年,經過十年的發展,於1998年發布開源版本。Erlang是運行於虛擬機解釋性語言,但是現在也包含有烏普薩拉大學高性能Erlang計畫(HiPE)開發的本地代碼編譯器,自R11B-4版本開始,Erlang也開始支持腳本式解釋器。在編程范型上,Erlang屬於多重范型程式語言,涵蓋函式式、並髮式及分散式。順序執行的Erlang是一個及早求值,單次賦值和動態類型的函式式程式語言。
Erlang是一個結構化,動態類型程式語言,內建並行計算支持。最初是由愛立信專門為通信套用設計的,比如控制交換機或者變換協定等,因此非常適 合於構建分散式,實時軟並行計算系統。使用Erlang編寫出的套用運行時通常由成千上萬個輕量級進程組成,並通過訊息傳遞相互通訊。進程間上下文切換對於Erlang來說僅僅 只是一兩個環節,比起C程式的執行緒切換要高效得多得多了。
使用Erlang來編寫分散式套用要簡單的多,因為它的分散式機制是透明的:對於程式來說並不知道自己是在分散式運行。Erlang運行時環境是一個虛擬機,有點像Java虛擬機,這樣代碼一經編譯,同樣可以隨處運行。它的運行時系統甚至允許代碼在不被中斷 的情況下更新。另外如果需要更高效的話,位元組代碼也可以編譯成本地代碼運行。

歷史

Erlang得名於丹麥數學家及統計學家Agner Krarup Erlang,同時Erlang還可以表示Ericsson Language。
Erlang並非一門新語言,它出現於1987年,只是當時對並發、分散式需求還沒有今天這么普遍,當時可謂英雄無用武之地。Erlang語言創始人Joe Armstrong當年在愛立信做電話網路方面的開發,他使用Smalltalk,可惜那個時候Smalltalk太慢,不能滿足電話網路的高性能要求。但Joe實在喜歡Smalltalk,於是定購了一台Tektronix Smalltalk機器。但機器要兩個月時間才到,Joe在等待中百無聊賴,就開始使用Prolog,結果等Tektronix到來的時候,他已經對Prolog更感興趣,Joe當然不滿足於精通Prolog,經過一段時間的試驗,Joe給Prolog加上了並發處理和錯誤恢復,於是Erlang就誕生了。這也是為什麼Erlang的語法和Prolog有不少相似之處,比如它們的List表達都是[Head | Tail]。
1987年Erlang測試版推出,並在用戶實際套用中不斷完善,於1991年向用戶推出第一個版本,帶有了編譯器和圖形接口等更多功能。1992年,Erlang迎來更多用戶,如RACE項目等。同期Erlang被移植到VxWorks、PC和 Macintosh等多種平台,兩個使用Erlang的產品項目也開始啟動。1993愛立信公司內部獨立的組織開始維護和支持Erlang實現和Erlang工具。

語言特點

區別於傳統的面向對象語言,它有著自己的優點:首先它是基於進程並發的,這些進程是輕量級的並且互相協作有條理的處理著事務,用戶不用擔心具體的PV操作,這些進程對於作業系統而言是透明的,對作業系統來說只有一個進程在運行。其次,每個進程擁有自己的獨立記憶體,在進程間通信中完全依賴於訊息傳遞,每個進程都擁有自己獨立的信箱並通過模式匹配的方式來查找要處理的訊息,然後分別進行異步處理。這減輕了進程之間的耦合度,提高了獨立性。Erlang還具有可靠的容錯機制,由於進程之間相對獨立,於是Erlang里可以用一些進程去連結或監視另外一些進程,當這些被監視的進程因為錯誤而產生異常退出的時候,負責監視的程式就會收到這些進程退出的訊息並對這些進程進行相應的處理。在OTP中Erlang可以利用監控樹執行一對一或者一對多的監控。最重要的是,對多核CPU的支持,在Erlang中對於多核的操作不需要開發人員來管理,對開發人員來說是完全透明的,我們只需要和往常一樣編寫程式就可以。最後Erlang是支持熱代碼升級的,在Erlang中可以實現不停機就進行代碼的升級,來實現軟體運行中的熱升級。Erlang的版本管理中,可以保留一個模組的2種不同的版本,支持對版本的回滾。
Erlang語言專注於某方面的需求,並不是完全適合所有情況,在它有很多誘人的特性的同時也有一些缺點:它的語言的抽象能力不強,Erlang是一種弱類型語言,在匹配的時候可以較為方便的調整訊息的內容或者模式的要求,但發生錯誤的時候,這些錯誤的隱蔽性較強。另外,當項目規模比較大的時候會發現由於語言的特性各部分出現扁平化的特徵,程式中有非常多的元組和記錄程式結構混亂。其次,函式式編程與傳統語言有差別,目前主流的程式語言都是C語言系和面向對象,目前函式式編程缺乏成熟的編程理論,相關方面的人才和資料也較少這增加了學習的難度,另外面向對象的思想已經深入人心,這使得在學習函式式編程的時候思維難以轉變。最重要的是,Erlang是屬於IO密集型的語言,適合分散式特徵明顯的項目,對於計算密集型的要求,會比較吃力,但是仍然有最佳化提升的空間。

發展前景

Erlang近些年在國內的發展十分迅速,主要用於遊戲伺服器系統開發。Erlang上手容易,容錯率高,快速疊代等優點非常適用於頁游和手遊的開發。尤其以廣州,深圳等一些中,小型的遊戲公司幾乎都是用Erlang。以c++為基礎語言的遊戲伺服器系統需要長時間的技術積累,並且c++的開發效率不如Erlang,高額的招人成本對新興公司也是巨大的挑戰。但中小型公司注重產品大於技術,這對Erlang在於國內的發展是不利的,大部分公司都用著同一套已經成型的Erlang框架,著重於處理具體的業務邏輯忽視了底層最佳化。這對於Erlang的發展是極其不利的。
Erlang在國外發展的時間較長作為一種成熟的語言已經得到了證實,目前套用於包括愛立信的寬頻,GPRS和ATM交換解決方案系統等幾百個重大的開發項目,有著豐富的項目經驗,編程框架(OTP)為Erlang系統的提供了一套實現健壯性和容錯性的工具和類庫和完整的結構化框架。但相較於國內用於遊戲開發,國外主要用於web服務,計算機電話,訊息系統和商業銀行等領域。在本世紀初Erlang.org網站總共有36000個網頁左右,十年之後,這一數字上升到了280萬,這說明Erlang社區不斷的在擴大,包括商業,研究與開源項目,病毒行銷,書籍和部落格的組合,當然這些都源自於Erlang最初的設計-用於解決特定領域難題的需求和推動。

相關詞條

熱門詞條

聯絡我們