| 導購 | 订阅 | 在线投稿
分享
 
 
 

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

來源:互聯網網民  2008-06-14 05:54:07  評論

一、高可靠性的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。

 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
一、高可靠性的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。
󰈣󰈤
王朝萬家燈火計劃
期待原創作者加盟
 
 
 
>>返回首頁<<
 
 
 
 
 
 熱帖排行
 
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有