<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 學(xué)習方法與實(shí)踐 > 程序語(yǔ)言的新星:走近Erlang的世界

程序語(yǔ)言的新星:走近Erlang的世界

——
作者:顧宏軍 時(shí)間:2007-12-21 來(lái)源:軟件世界 收藏
  提起,相信許多人都會(huì )撓頭,因為它實(shí)在是太陌生了。在2007年6月由TIOBE Programming Community提供的排名中,占有率僅為0.08%,排名第49位。與之形成鮮明對比的是,Java以20.025%的占有率高居榜首,緊隨其后的是C(15.967%)、C++(11.118%)、VB (9.332%)、PHP(8.871%)、Perl(6.177%)、C#(3.483%)、Python(3.161%)、JavaScript (2.616%)和Ruby(2.132%)。相對于傳統老牌“大佬”相比,語(yǔ)言絕對算得上是一種“小眾”語(yǔ)言,但其未來(lái)的發(fā)展前景卻是無(wú)法估量的,因為它可以解決傳統語(yǔ)言很難解決在并行計算中的難題,甚至有專(zhuān)家預言可能成為下一個(gè)Java,在正在迅猛發(fā)展的并行計算時(shí)代,Erlang將會(huì )迅速的崛起。

  認識Erlang

  Erlang并非一門(mén)新語(yǔ)言,它出現于1987年,只是當時(shí)對并發(fā)、分布式需求還沒(méi)有今天這么普遍,當時(shí)可謂英雄無(wú)用武之地。Erlang語(yǔ)言創(chuàng )始人Joe Armstrong當年在愛(ài)立信做電話(huà)網(wǎng)絡(luò )方面的開(kāi)發(fā),他使用Smalltalk,可惜那個(gè)時(shí)候Smalltalk太慢,不能滿(mǎn)足電話(huà)網(wǎng)絡(luò )的高性能要求。但Joe實(shí)在喜歡Smalltalk,于是定購了一臺Tektronix Smalltak機器。但機器要兩個(gè)月時(shí)間才到,Joe在等待中百無(wú)聊賴(lài),就開(kāi)始使用Prolog,結果等Tektronix到來(lái)的時(shí)候,他已經(jīng)對 Prolog更感興趣,Joe當然不滿(mǎn)足于精通Prolog,經(jīng)過(guò)一段時(shí)間的試驗,Joe給Prolog加上了并發(fā)處理和錯誤恢復,于是Erlang就誕生了。這也是為什么Erlang的語(yǔ)法和Prolog有不少相似之處,比如它們的List表達都是[Head | Tail]。

  1987年Erlang測試版推出,并在用戶(hù)實(shí)際應用中不斷完善,于1991年向用戶(hù)推出第一個(gè)版本,帶有了編譯器和圖形接口等更多功能。1992年,Erlang迎來(lái)更多用戶(hù),如RACE項目等。同期Erlang被移植到 VxWorks、PC和 Macintosh等多種平臺,兩個(gè)使用Erlang的產(chǎn)品項目也開(kāi)始啟動(dòng)。1993愛(ài)立信公司內部獨立的組織開(kāi)始維護和支持Erlang實(shí)現和 Erlang工具。

  目前,隨著(zhù)網(wǎng)絡(luò )應用的興起,對高并發(fā)、分布部署、持續服務(wù)的需求增多,Erlang的特性剛好滿(mǎn)足這些需求,于是Erlang開(kāi)始得到更多人的關(guān)注。

  Erlang特性

  Erlang是一種函數式語(yǔ)言,使用Erlang編寫(xiě)出的應用運行時(shí)通常由成千上萬(wàn)個(gè)輕量級進(jìn)程組成,并通過(guò)消息傳遞相互通訊。使用Erlang來(lái)編寫(xiě)分布式應用比其它語(yǔ)言簡(jiǎn)單許多,因為它的分布式機制是透明的,即對于而言并不知道自己是在分布式運行。Erlang運行環(huán)境是一個(gè)虛擬機,有點(diǎn)類(lèi)似于Java虛擬機,代碼一經(jīng)編譯,同樣可以隨處運行。它的運行時(shí)系統甚至允許代碼在不被中斷的情況下更新。另外如果需要更高效的話(huà),字節代碼也可以編譯成本地代碼運行。 

 
                  


                           Erlang的結構圖

  相較于其它語(yǔ)言,Erlang有很多天生的適應現代網(wǎng)絡(luò )服務(wù)需求的特性:

       ◆并發(fā)性,Erlang具有超強的輕量級進(jìn)程,這種進(jìn)程對內存的需求是動(dòng)態(tài)變化的,并且它沒(méi)有共享內存和通過(guò)異步消息傳送的通訊。Erlang支持超大量級的并發(fā)線(xiàn)程,并且不需要操作系統具有并發(fā)機制。

       ◆分布式,Erlang被設計用于運行在分布式環(huán)境下。一個(gè)Erlang虛擬機被成為Erlang節點(diǎn)。一個(gè)分布式Erlang系統是多個(gè)Erlang節點(diǎn)組成的網(wǎng)絡(luò )(通常每個(gè)處理器被作為一個(gè)節點(diǎn))。一個(gè)Erlang節點(diǎn)能夠創(chuàng )建運行在其它節點(diǎn)上的并行線(xiàn)程,而其它節點(diǎn)可以使用其余的操作系統。線(xiàn)程依賴(lài)不同節點(diǎn)之間的通訊,這完全和它依賴(lài)于單一節點(diǎn)一樣。

       ◆ 軟實(shí)時(shí)性 Erlang支持可編程的“軟”實(shí)時(shí)系統,這種系統需要反應時(shí)間在毫秒級。而在這種系統中,長(cháng)時(shí)間的垃圾收集(garbage collection)延遲是無(wú)法接受的,因此Erlang使用了遞增式垃圾收集技術(shù)。

       ◆ 熱代碼升級 一些系統不能由于軟件維護而停止運行。Erlang允許代碼在運行系統中被修改。舊代碼能被逐步淘汰而后被新代碼替換。在此過(guò)渡期間,新舊代碼是共存的。這也使得安裝Bug補丁、在運行系統上升級而不干擾系統操作成為了可能。

       ◆ 遞增式代碼裝載 用戶(hù)能夠控制代碼如何被裝載的細節。在系統中,所有代碼通常是在啟動(dòng)時(shí)就被完全裝載。而在開(kāi)發(fā)系統中,代碼是按需裝載的,甚至在系統運行時(shí)被裝載。如果測試到了未覆蓋的Bug,只需替換具有Bug的代碼即可。

  Erlang應用場(chǎng)合

  未來(lái)的計算是并發(fā)計算?,F今甚至桌面CPU也是多核的,當用戶(hù)給服務(wù)器購買(mǎi)了越來(lái)越多的CPU時(shí),他們更期望能最大限度地利用他們的新投資,但是今天的許多軟件系統并不能很好地做到這一點(diǎn)。

  整個(gè)軟件行業(yè)也在發(fā)生重大變革,由賣(mài)工具軟件轉向賣(mài)服務(wù)(軟件免費,這也是開(kāi)源軟件興起的過(guò)程),由單純客戶(hù)端向B/S或C/S轉化,相應的存儲和計算向服務(wù)器端轉移,由原來(lái)的PC客戶(hù)端向客戶(hù)端多元化(如手機、PDA、電視機頂盒等)轉化。這些變革趨勢,使得用戶(hù)可以更方便地訪(fǎng)問(wèn)到服務(wù)的同時(shí),服務(wù)器也要承受越來(lái)越高的負荷,并行/分布的需求逐漸增加。

  Erlang語(yǔ)言不是用來(lái)解決所有問(wèn)題的語(yǔ)言,至少現在還不是。Erlang最初專(zhuān)門(mén)為通信應用設計的,比如控制交換機或者變換協(xié)議等,非常適合于構建分布式,實(shí)時(shí)軟并行計算系統。它是一門(mén)專(zhuān)注的語(yǔ)言,可以適應現代服務(wù)器要求高負荷、高可靠、持續服務(wù)的需求。它要解決的問(wèn)題域包括:高并發(fā)、分布式、持續服務(wù)、熱升級和高可靠等問(wèn)題。

  Erlang應用實(shí)例

  典型的Erlang應用是由很多被分配不同任務(wù)的“節點(diǎn)(Node)”組成的“集群 (Cluster)”。一個(gè)Erlang節點(diǎn)就是一個(gè)Erlang虛擬機的實(shí)例,用戶(hù)可以在一臺機器(服務(wù)器、臺式機或者筆記本)上運行多個(gè)節點(diǎn)。 Erlang節點(diǎn)自動(dòng)跟蹤所有連接著(zhù)的其他節點(diǎn)。要添加一個(gè)節點(diǎn)僅僅需要將其指向任何一個(gè)已建節點(diǎn)就可以了。只要這兩個(gè)節點(diǎn)建立了連接,所有其他節點(diǎn)馬上就會(huì )感應到新加入的節點(diǎn)。Erlang進(jìn)程使用進(jìn)程ID向其他進(jìn)程傳遞報文,進(jìn)程ID包含著(zhù)運行此進(jìn)程的節點(diǎn)信息。因此進(jìn)程不需要理會(huì )正在與其交流的其他進(jìn)程實(shí)際在何處運行。一組相互連接的Erlang節點(diǎn)可以看作是一個(gè)網(wǎng)格計算體或者一臺超級計算機。


                     
                         erlang的odbc應用程序結構圖

       Yaws是一個(gè)Erlang寫(xiě)的Web服務(wù)器。ErLang本身帶有一個(gè)HTTP Server,叫做inet。Yaws對于inet,就相當于Servlet對于Http Server。Yaws也可說(shuō)是一個(gè)Web開(kāi)發(fā)框架,Yaws的ehtml類(lèi)似于jsp、 php、ruby template。Yaws并發(fā)能力是Apache的15倍,有人利用16臺集群服務(wù)器所做的顯示,Yaws可以承受超八萬(wàn)并發(fā)活動(dòng),Apache在四千就宕機了。 

                      

                           erlang和ruby的簡(jiǎn)單測試


  Ejabberd也是Erlang很好的應用實(shí)例,也是目前可擴展性最好的一種 Jabber/XMPP服務(wù)器,支持分布多個(gè)服務(wù)器,并且具有容錯處理,單臺服務(wù)器失效不影響整個(gè)集群運作。Ejabberd基于ErLang+ Mnesia構建,項目已成功發(fā)展5年,占據30%左右Jabber服務(wù)器市場(chǎng)。

  Tsung則是多協(xié)議分布式壓力測試工具,可用于測試Http、Soap、Postgresql和Jabber/XMPP服務(wù)器。而Wings則是一個(gè)3D建模程序,軟件支持Windows、Mac OSX和Linux等操作系統,這兩個(gè)項目都基于Erlang構建。
下一個(gè)Java?

  Erlang將會(huì )成為一個(gè)非常重要的語(yǔ)言。如果有了大公司的支持,它甚至可能成為下一個(gè)Java。因為它是個(gè)開(kāi)源項目,非常適合多核處理、Web服務(wù)等領(lǐng)域。事實(shí)上,它也是編寫(xiě)在多核機器上運行的高可靠性系統的唯一成熟語(yǔ)言。

  Erlang始于20年前,是一個(gè)并發(fā)性Prolog,Joe Armstrong創(chuàng )造了它。第一個(gè)大型Erlang項目是一個(gè)由幾百人創(chuàng )建的電信交換系統,系統有數百萬(wàn)行代碼。系統主要關(guān)注的就是可靠性,并且系統有難以置信的可靠性歷史。據Joe介紹,“它有99.9999999%的可靠性”。

  這意味著(zhù)每10億秒才有1秒宕機時(shí)間,或者說(shuō)10億分鐘有1分鐘宕機時(shí)間。十億秒大概是30年,10億分鐘大概有2000年。99.999%的可靠性大概是每年宕機5分鐘,這已經(jīng)是很好的了。了解可靠性的人都知道,可靠性系統有 99.9999%的,甚至99.99999%的,但是估計沒(méi)聽(tīng)過(guò)有99.9999999%可靠性的,可基于Erlang的系統實(shí)現了。

  但這還不是令Erlang壯大的理由,因為不是什么人都關(guān)注可靠性。也不是因為 Erlang是一個(gè)函數式語(yǔ)言,更不是并行Erlang是個(gè)面向對象語(yǔ)言。其發(fā)展迅速的主要原因是唯一一個(gè)有可靠實(shí)現和完善類(lèi)庫的成熟的并行開(kāi)發(fā)語(yǔ)言,在不久的將來(lái)所有的桌面系統、筆記本電腦都將是多核的,而要讓程序在多核上更快的運行就要使程序能充分利用多核處理的能力。

  Erlang帶有一組類(lèi)庫。多數類(lèi)庫是用于構建各類(lèi)Internet服務(wù)的。 Erlang有Web服務(wù)器和數據庫。Erlang社區認為它是構建可靠Web服務(wù)器和Web服務(wù)的首選語(yǔ)言。Erlang是一個(gè)構建可靠系統的框架/平臺,它構建的平臺可以持續運行而無(wú)需關(guān)閉,可以每天更新軟件,甚至可以定期的更換硬件。這些特性是電信應用所需要的,它還是在線(xiàn)銀行、在線(xiàn)商城等各類(lèi)在線(xiàn)應用所迫切需要的。

  Joe Armstrong最近寫(xiě)了本書(shū)《Programming.Erlang》,所有關(guān)注Erlang的人都值得一讀。Erlang符合所有面向對象語(yǔ)言特性,雖然它是個(gè)函數式語(yǔ)言,而不是面向對象語(yǔ)言。Erlang區分與面向對象語(yǔ)言的一個(gè)方面就是它的錯誤處理。在某消息出錯時(shí),進(jìn)程不是拋出出錯的部分,而是直接進(jìn)程糾錯。系統結構被設計為底部是工作進(jìn)程(它們可能會(huì )失?。?,上層是管理進(jìn)程,它們可以重新啟動(dòng)失敗的進(jìn)程。

  我不相信其它語(yǔ)言能迅速趕上Erlang。對其它語(yǔ)言而言,加入像Erlang這樣的語(yǔ)言特征是很容易的。但這將花費他們大量的時(shí)間構建一個(gè)高質(zhì)量的VM和成熟的并發(fā)性與可靠性類(lèi)庫。因此Erlang很自然會(huì )成功。如果將來(lái)要在多核系統上進(jìn)行開(kāi)發(fā),Erlang是非常理想的選擇。

  Erlang在中國

  目前,Erlang在全球都還是個(gè)小眾語(yǔ)言,其在中國影響力就更小了,好在有國內的 Erlang愛(ài)好者已經(jīng)組織起來(lái),在進(jìn)行相關(guān)的工作,成立了Erlang-china.org,發(fā)布了部分Erlang相關(guān)中文文檔,并且組織了兩次 Erlang愛(ài)好者聚會(huì ),Erlang-China.org將繼續為對Erlang感興趣的中文用戶(hù)提供便利,促進(jìn)用戶(hù)彼此之間的交流,推動(dòng)對這一語(yǔ)言的深入研究,促成一些Erlang開(kāi)源項目,幫助中文用戶(hù)為整個(gè)Erlang社區做出貢獻。

  Erlang沒(méi)有類(lèi)似Java、C++的語(yǔ)法,它不是面向對象語(yǔ)言,它是函數編程語(yǔ)言(Functional programming Language)。大量程序員并不熟悉函數式編程,我們的計算機教育里也都是基于面向對象和面向過(guò)程語(yǔ)言的,這會(huì )是所有想嘗試Erlang的用戶(hù)遇到的首要問(wèn)題,這會(huì )使得培訓成本加大,決策人員也需要足夠勇氣來(lái)選擇一個(gè)新語(yǔ)言來(lái)構建應用。

  另外,Erlang雖然內建了并行、分布的支持,但是程序員還需要學(xué)習和掌握并行的思維模式,并行的思維模式也許是更加難以跨越的門(mén)檻。

  要解決計算時(shí)代,可伸縮性、容錯性以及運行時(shí)可更新系統需求,就目前而言,只有 Erlang語(yǔ)言可以很好的解決。Erlang語(yǔ)言也正面臨這一場(chǎng)大的變革,從默默無(wú)聞走向更多人視野,會(huì )向更廣的網(wǎng)絡(luò )應用領(lǐng)域滲透。也許,不久的將來(lái),當你聽(tīng)到Erlang時(shí),就如同聽(tīng)說(shuō)Java一樣平常。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)


關(guān)鍵詞: 程序 語(yǔ)言 Erlang 嵌入式

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>