程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> 開源Erlang真的能成為下一代Java語言嗎

開源Erlang真的能成為下一代Java語言嗎

編輯:JAVA編程入門知識
 

一、高可靠性的Erlang,有望取代Java

Erlang將成為一個非常重要的語言。它也許就是下一代的Java語言。目前Erlang發展的主要問題就在於沒有一個大的公司來支持它,作為它強大的後盾。結果,Erlang被推動成為一個開源的項目。Erlang語言最大優勢就是它非常適合多核,web服務的特點。事實上,Erlang是唯一成熟的,非常穩定可靠,適合開發運行在多核機器上的高伸縮性的系統。

Erlang最為並行的Prolog,始於20年前。Joe Armstrong發明了它,並成為推動它發展的主要人物。Joe Armstrong在Erickson公司工作,Erickson是一家瑞典的科技公司。最大的第一個Erlang項目是開發一個電子開關系統,此系統有幾百人開發,他們寫了幾百萬行的代碼。這個系統的要求重點就是可靠性,不專門是速度,最終,這個項目具備了令人難以置信的優良可靠性。Joe聲稱他們取得了“9個9的可靠性”。

“9個9的可靠性”意識是什麼了?意思就是說在一百萬秒鐘,只有一秒出現故障時間,或者說在一百萬分鐘,只出現一分鐘的故障時間。然而,一百萬秒大約就是30年。一百萬分鐘大約是2000年。這個系統生產出來已經有上10年了,但是我認為少於15年。該公司已經賣出來上百個該系統,或許有上千個。200個系統運行10年的話,加起來就有2000年來了,如果所有的系統加起來總的故障時間少於1分鐘的話,那麼他們就可以說該系統達到了“9個9的可靠性”。

“5個9的可靠性”是指一年中只有5分鐘的故障時間,能達到這個水平就已經很不錯了。人們非常熱衷追求6個9,或者7個9。要說達到9個9是簡直前所未有的。但是,Erlang開發的系統達到了這個空前的水平。

優良的可靠性還不能說明問題,並不能使得Erlang偉大。並不是有足夠的人關注穩定性。“順序的Erlang”作為一個函數型的編程語言也不是使得Erlang偉大的原因。“並行的Erlang'”作為一種面向對象的語言也不是Erlang指的推崇的原因。值得我們稱道的是Erlang'是唯一一個成熟的語言,帶有可靠的實現工具,和一組非常好的庫,能讓你的軟件無縫的伸縮,從單個處理器系統到使用多個處理器系統使得你的應用程序運行的更快。

二、豐富的多處理器的支持,使Erlang如虎添翼

當使用Erlang構建一個系統的時候,你只能在進程間通過傳遞消息,來使得一組進程間通信。在Erlang裡面沒有共享的狀態,唯一的方式就是通過發送消息和進程通信。不像Java 或者 Smalltalk,只是在並發操作的時候,寫一些線程/進程,Erlang程序員使用進程來模塊化,提高可靠性,重用性。以後它們就能自發的並行運行。理論上說,你可以在一個處理器上構建你的系統,但是實際中沒有這樣的Erlang程序員這麼做。他們更喜歡當作有上千個處理器來開發系統。當在一個處理上運行的時候並不影響性能。但是最好利用多處理器,來提高系統的性能。接著,把應用程序放在10個處理器的系統上,你的應用程序就會運行快了十倍(或許八九倍,但是還是不錯的)。

當然,因為你寫你的應用程序時候,寫了上千個的進程並不能說有伸縮性。像任何一個系統一樣,你也有瓶頸的。在等待另外一個進程的時候,你要浪費很多的等待時間,希望得到其它進程提供的結果。為了實現Erlang系統的伸縮性,有許多的設計模式供你選擇。

Erlang自帶了很多程序庫。大多數的程序庫是為了構建應用程序,或者使用不同種類的網絡服務。Erlang有web服務和數據庫的功能。Erlang社區將Erlang定位為構建可靠性web服務和web服務應用程序的語言。但是自帶的程序庫名字大多稱為OTP,即開源電信平台。毫不奇怪名字為什麼這麼起,雖然它與電信沒有任何關系。但是Erlang構建運行幾十年,在需要每天更新軟件,或者周期更換硬件而不中斷的開發框架和平台。這正是電信應用程序所需要的,同時是在線銀行,在線商店等等所需要的。

Joe Armstrong已經完成了一本關於Erlang的書,已經由Pragmatic Programmers.出版了。Joe還寫了一篇關於這本書的文章。這是一本非常好的書,任何對Erlang有興趣的人應該去讀一讀。對於這本書,令我很發瘋的是它展現的更多的是Erlang最為函數式的語言,而沒有很多的關於面向對象的方面。事實上,它否認Erlang是面向對象的。

三、另類的設計,將會帶給Erlang程序員更多的思想聖宴

Erlang裡面的進程就是一個對象。最初我在講述面向對象的設計的課程上,我從三個角度解釋面向對象編程。從表面的角度說,一個面向對象的系統就是它的開發者要認識到程序設計是一個模擬。從更深的角度來說,面向對象的系統就是它有對象構成,通過對象之間的發送消息來通信,通過對象間傳來傳去的消息來完成計算。從軟件工程的角度看面向對象的系統就是它支持數據抽象化,通過函數調用後期綁定,和繼承完成多態。

Erlang是行為驅動模型的完美例子,也是從更新的角度來看的例子。進程當然支持數據抽象多多態。一個Erlang進程就是一個函數,它從消息隊列中讀取消息,找到自己相匹配的消息,接著做出響應。這種函數式結構處理方法很像Smalltalk中的類。更有甚者,好幾個線程共同遵照一個協議,有一些共同的東西,很容易分析出他們有一些相同的函數可以調用。這就很像類的繼承性了。因此,你可以說Erlang支持繼承的,雖然它和Java 和Smalltalk有很大的區別。我能想象的出很多的Erlang開發者認為程序設計就是模型化。因此,Erlang適合所有的具有面向對象特征的系統,雖然說順序的Erlang是函數式的語言,不是一種面向對象的語言。

Erlang唯一和面向對象的語言不同的是它強調失敗故障。任何消息的發送可能失敗。進程不能引發異常,它們出現失敗故障。系統構造出工作進程,在底層有可能出現失敗故障,而在它們上面有管理進程,能夠重啟失敗的進程,因為開發者能夠預期到失敗的進程。

Joe講述了Erlang太多的函數式語言特性,他認為Erlang缺乏易變的狀態,也就是暗示沒有加鎖。但是,它的確是缺乏SHARED狀態。你可以用Basic, perl, 或者C寫進程。我能肯定許多的人會學習Erlang,然後說:“我能把Erlang的優秀特點引入到我們的語言中去”。但是依照我的觀點,Erlang的並發程序設計的特點,為並行和可靠性而設計的成熟的實現方法和強大的程序庫是它的特別之處。

相信任何一個其它的語言能追上Erlang。其它的語言也許會增加一些和Erlang相似的語言特點。但是需要它們花很長的時間取構建如此一個高質量的虛擬機和為並發和可靠性開發的程序庫。因此,我認為Erlang將會取得成功,並在10年內成為現在Java語言的替代者。如果你想在將來的構建多核的應用程序,你應該學習Erlang。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved