一、高可靠性的Erlang,有望取代Java
Erlang將成為一個(gè)非常重要的語(yǔ)言。它也許就是下一代的Java語(yǔ)言。目前Erlang發(fā)展的主要問題就在于沒有一個(gè)大的公司來(lái)支持它,作為它強(qiáng)大的后盾。結(jié)果,Erlang被推動(dòng)成為一個(gè)開源的項(xiàng)目。Erlang語(yǔ)言優(yōu)勢(shì)就是它非常適合多核,web服務(wù)的特點(diǎn)。事實(shí)上,Erlang是成熟的,非常穩(wěn)定可靠,適合開發(fā)運(yùn)行在多核機(jī)器上的高伸縮性的系統(tǒng)。
Erlang為并行的Prolog,始于20年前。Joe Armstrong發(fā)明了它,并成為推動(dòng)它發(fā)展的主要人物。Joe Armstrong在Erickson公司工作,Erickson是一家瑞典的科技公司。的個(gè)Erlang項(xiàng)目是開發(fā)一個(gè)電子開關(guān)系統(tǒng),此系統(tǒng)有幾百人開發(fā),他們寫了幾百萬(wàn)行的代碼。這個(gè)系統(tǒng)的要求重點(diǎn)就是可靠性,不專門是速度,終,這個(gè)項(xiàng)目具備了令人難以置信的優(yōu)良可靠性。Joe聲稱他們?nèi)〉昧?ldquo;9個(gè)9的可靠性”。
“9個(gè)9的可靠性”意識(shí)是什么了?意思就是說(shuō)在一百萬(wàn)秒鐘,只有一秒出現(xiàn)故障時(shí)間,或者說(shuō)在一百萬(wàn)分鐘,只出現(xiàn)一分鐘的故障時(shí)間。然而,一百萬(wàn)秒大約就是30年。一百萬(wàn)分鐘大約是2000年。這個(gè)系統(tǒng)生產(chǎn)出來(lái)已經(jīng)有上10年了,但是我認(rèn)為少于15年。該公司已經(jīng)賣出來(lái)上百個(gè)該系統(tǒng),或許有上千個(gè)。200個(gè)系統(tǒng)運(yùn)行10年的話,加起來(lái)就有2000年來(lái)了,如果所有的系統(tǒng)加起來(lái)總的故障時(shí)間少于1分鐘的話,那么他們就可以說(shuō)該系統(tǒng)達(dá)到了“9個(gè)9的可靠性”。
“5個(gè)9的可靠性”是指一年中只有5分鐘的故障時(shí)間,能達(dá)到這個(gè)水平就已經(jīng)很不錯(cuò)了。人們非常熱衷追求6個(gè)9,或者7個(gè)9。要說(shuō)達(dá)到9個(gè)9是簡(jiǎn)直前所未有的。但是,Erlang開發(fā)的系統(tǒng)達(dá)到了這個(gè)空前的水平。
優(yōu)良的可靠性還不能說(shuō)明問題,并不能使得Erlang偉大。并不是有足夠的人關(guān)注穩(wěn)定性。“順序的Erlang”作為一個(gè)函數(shù)型的編程語(yǔ)言也不是使得Erlang偉大的原因。“并行的Erlang'”作為一種面向?qū)ο蟮恼Z(yǔ)言也不是Erlang指的推崇的原因。值得我們稱道的是Erlang'是一個(gè)成熟的語(yǔ)言,帶有可靠的實(shí)現(xiàn)工具,和一組非常好的庫(kù),能讓你的軟件無(wú)縫的伸縮,從單個(gè)處理器系統(tǒng)到使用多個(gè)處理器系統(tǒng)使得你的應(yīng)用程序運(yùn)行的更快。
二、豐富的多處理器的支持,使Erlang如虎添翼
當(dāng)使用Erlang構(gòu)建一個(gè)系統(tǒng)的時(shí)候,你只能在進(jìn)程間通過傳遞消息,來(lái)使得一組進(jìn)程間通信。在Erlang里面沒有共享的狀態(tài),的方式就是通過發(fā)送消息和進(jìn)程通信。不像Java 或者 Smalltalk,只是在并發(fā)操作的時(shí)候,寫一些線程/進(jìn)程,Erlang程序員使用進(jìn)程來(lái)模塊化,提高可靠性,重用性。以后它們就能自發(fā)的并行運(yùn)行。理論上說(shuō),你可以在一個(gè)處理器上構(gòu)建你的系統(tǒng),但是實(shí)際中沒有這樣的Erlang程序員這么做。他們更喜歡當(dāng)作有上千個(gè)處理器來(lái)開發(fā)系統(tǒng)。當(dāng)在一個(gè)處理上運(yùn)行的時(shí)候并不影響性能。但是利用多處理器,來(lái)提高系統(tǒng)的性能。接著,把應(yīng)用程序放在10個(gè)處理器的系統(tǒng)上,你的應(yīng)用程序就會(huì)運(yùn)行快了十倍(或許八九倍,但是還是不錯(cuò)的)。
當(dāng)然,因?yàn)槟銓懩愕膽?yīng)用程序時(shí)候,寫了上千個(gè)的進(jìn)程并不能說(shuō)有伸縮性。像任何一個(gè)系統(tǒng)一樣,你也有瓶頸的。在等待另外一個(gè)進(jìn)程的時(shí)候,你要浪費(fèi)很多的等待時(shí)間,希望得到其它進(jìn)程提供的結(jié)果。為了實(shí)現(xiàn)Erlang系統(tǒng)的伸縮性,有許多的設(shè)計(jì)模式供你選擇。
Erlang自帶了很多程序庫(kù)。大多數(shù)的程序庫(kù)是為了構(gòu)建應(yīng)用程序,或者使用不同種類的網(wǎng)絡(luò)服務(wù)。Erlang有web服務(wù)和數(shù)據(jù)庫(kù)的功能。Erlang社區(qū)將Erlang定位為構(gòu)建可靠性web服務(wù)和web服務(wù)應(yīng)用程序的語(yǔ)言。但是自帶的程序庫(kù)名字大多稱為OTP,即開源電信平臺(tái)。毫不奇怪名字為什么這么起,雖然它與電信沒有任何關(guān)系。但是Erlang構(gòu)建運(yùn)行幾十年,在需要每天更新軟件,或者周期更換硬件而不中斷的開發(fā)框架和平臺(tái)。這正是電信應(yīng)用程序所需要的,同時(shí)是在線銀行,在線商店等等所需要的。
Joe Armstrong已經(jīng)完成了一本關(guān)于Erlang的書,已經(jīng)由Pragmatic Programmers.出版了。Joe還寫了一篇關(guān)于這本書的文章。這是一本非常好的書,任何對(duì)Erlang有興趣的人應(yīng)該去讀一讀。對(duì)于這本書,令我很發(fā)瘋的是它展現(xiàn)的更多的是Erlang為函數(shù)式的語(yǔ)言,而沒有很多的關(guān)于面向?qū)ο蟮姆矫妗J聦?shí)上,它否認(rèn)Erlang是面向?qū)ο蟮摹?
三、另類的設(shè)計(jì),將會(huì)帶給Erlang程序員更多的思想圣宴
Erlang里面的進(jìn)程就是一個(gè)對(duì)象。初我在講述面向?qū)ο蟮脑O(shè)計(jì)的課程上,我從三個(gè)角度解釋面向?qū)ο缶幊獭谋砻娴慕嵌日f(shuō),一個(gè)面向?qū)ο蟮南到y(tǒng)就是它的開發(fā)者要認(rèn)識(shí)到程序設(shè)計(jì)是一個(gè)模擬。從更深的角度來(lái)說(shuō),面向?qū)ο蟮南到y(tǒng)就是它有對(duì)象構(gòu)成,通過對(duì)象之間的發(fā)送消息來(lái)通信,通過對(duì)象間傳來(lái)傳去的消息來(lái)完成計(jì)算。從軟件工程的角度看面向?qū)ο蟮南到y(tǒng)就是它支持?jǐn)?shù)據(jù)抽象化,通過函數(shù)調(diào)用后期綁定,和繼承完成多態(tài)。
Erlang是行為驅(qū)動(dòng)模型的完美例子,也是從更新的角度來(lái)看的例子。進(jìn)程當(dāng)然支持?jǐn)?shù)據(jù)抽象多多態(tài)。一個(gè)Erlang進(jìn)程就是一個(gè)函數(shù),它從消息隊(duì)列中讀取消息,找到自己相匹配的消息,接著做出響應(yīng)。這種函數(shù)式結(jié)構(gòu)處理方法很像Smalltalk中的類。更有甚者,好幾個(gè)線程共同遵照一個(gè)協(xié)議,有一些共同的東西,很容易分析出他們有一些相同的函數(shù)可以調(diào)用。這就很像類的繼承性了。因此,你可以說(shuō)Erlang支持繼承的,雖然它和Java 和Smalltalk有很大的區(qū)別。我能想象的出很多的Erlang開發(fā)者認(rèn)為程序設(shè)計(jì)就是模型化。因此,Erlang適合所有的具有面向?qū)ο筇卣鞯南到y(tǒng),雖然說(shuō)順序的Erlang是函數(shù)式的語(yǔ)言,不是一種面向?qū)ο蟮恼Z(yǔ)言。
Erlang和面向?qū)ο蟮恼Z(yǔ)言不同的是它強(qiáng)調(diào)失敗故障。任何消息的發(fā)送可能失敗。進(jìn)程不能引發(fā)異常,它們出現(xiàn)失敗故障。系統(tǒng)構(gòu)造出工作進(jìn)程,在底層有可能出現(xiàn)失敗故障,而在它們上面有管理進(jìn)程,能夠重啟失敗的進(jìn)程,因?yàn)殚_發(fā)者能夠預(yù)期到失敗的進(jìn)程。
Joe講述了Erlang太多的函數(shù)式語(yǔ)言特性,他認(rèn)為Erlang缺乏易變的狀態(tài),也就是暗示沒有加鎖。但是,它的確是缺乏SHARED狀態(tài)。你可以用Basic, perl, 或者C寫進(jìn)程。我能肯定許多的人會(huì)學(xué)習(xí)Erlang,然后說(shuō):“我能把Erlang的特點(diǎn)引入到我們的語(yǔ)言中去”。但是依照我的觀點(diǎn),Erlang的并發(fā)程序設(shè)計(jì)的特點(diǎn),為并行和可靠性而設(shè)計(jì)的成熟的實(shí)現(xiàn)方法和強(qiáng)大的程序庫(kù)是它的特別之處。
相信任何一個(gè)其它的語(yǔ)言能追上Erlang。其它的語(yǔ)言也許會(huì)增加一些和Erlang相似的語(yǔ)言特點(diǎn)。但是需要它們花很長(zhǎng)的時(shí)間取構(gòu)建如此一個(gè)高質(zhì)量的虛擬機(jī)和為并發(fā)和可靠性開發(fā)的程序庫(kù)。因此,我認(rèn)為Erlang將會(huì)取得成功,并在10年內(nèi)成為現(xiàn)在Java語(yǔ)言的替代者。如果你想在將來(lái)的構(gòu)建多核的應(yīng)用程序,你應(yīng)該學(xué)習(xí)Erlang。
開源Erlang真的能成為下一代Java語(yǔ)言嗎
更新時(shí)間: 2008-06-13 15:25:22來(lái)源: 粵嵌教育瀏覽量:1093
粵嵌動(dòng)態(tài)
推薦閱讀
- ·北京朝歌數(shù)碼科技股份有限公司專場(chǎng)招聘
- ·深圳研賽自動(dòng)化設(shè)備公司專場(chǎng)招聘(長(zhǎng)沙校區(qū))
- ·深圳市興禾自動(dòng)化股份有限公司專場(chǎng)招聘(長(zhǎng)沙校區(qū))
- ·中山市弘億實(shí)業(yè)有限公司專場(chǎng)招聘會(huì)
- ·東莞市德聲實(shí)業(yè)有限公司專場(chǎng)招聘
- ·深圳華創(chuàng)智聯(lián)電子有限公司專場(chǎng)招聘
- ·廣州2512全網(wǎng)運(yùn)營(yíng)就業(yè)班
- ·廣州2511嵌入式開發(fā)就業(yè)班
- ·深圳市領(lǐng)世達(dá)科技有限公司專場(chǎng)招聘
- ·廣州2510嵌入式開發(fā)就業(yè)班