如果你像我一樣每個月持續追蹤TIOBE的編程語言需求排行榜,你應該也注意到,這兩個月名次竄升最猛烈的語言是Erlang,一口氣上升了約15個名次,好像有一點開始走紅的跡象。事實上,在電信產業,Erlang早就是最重要的語言之一。

大多數的電信公司,如:北電網路、T-Mobile,都會用Erlang開發分散式系統,以達到共時(Concurrent)與容錯(Fault-Torrent)的能力。除了共時與容錯,現在多核心與HT(超執行緒)的處理器環境,也提供Erlang語言相當好的發揮環境。

Erlang是由瑞典電信大學所創造,後來移轉到Ericsson(瑞典電信巨擘)的OTP(開放電信平臺)實驗室,之後又被釋出成為開放源碼的計畫。

Erlang雖然和電信產業的淵源很深,但是Erlang沒有畫地自限,用它開發財務系統或各種伺服器系統的案例,也不少見。總之,只要想開發出分散式、多核心、容錯、共時的系統,就相當適合使用Erlang。

Erlang提出「共時導向編程」(Concurrency-Oriented Programming,COP)的概念,讓我們可以輕易地寫出共時的程式。共時、平行(Parallel)運算、多工(Multi-task)、多執行緒(多線程),其實都是一樣的概念,儘管各個語言或平臺的作法可能不盡相同。

如果我們想要寫程式,使它像真實世界的物件一樣地運作,那麼這樣的程式就會用到共時(Concurrent)的結構。如果使用「專為共時應用設計」的語言,來開發這類的應用,一切就會簡單許多。而目前最棒的共時編程語言,應該就是Erlang了。Erlang可以幫助我們思考和互動,進而寫成程式。

用Erlang開發系統的好處有:
● 寫出來的程式,移到多核心的環境中執行,速度會自然變快(甚至有可能達到線性加速,n個核心就提升n倍)。
● 可以寫出容錯的系統,電腦當機之後會重新啟動。
● 可以寫出「程式碼熱抽換」的系統,可以一邊執行一邊升級,不用先暫停服務。
● 寫出來的程式不可思議地精簡。

對Erlang語言來說,共時是屬於語言的一部分,而不是作業系統的一部分。Erlang讓平行編程變得容易,作法是將世界塑模(Modeling)成一組平行的行程(Process),彼此之間只能透過訊息交換來互動(這裡所謂的行程,和作業系統的行程不一樣)。在Erlang的世界,有平行行程,但是沒有上鎖(Lock)、沒有同步化方法(Synchronized Method)、沒有共享記憶體而造成資料混亂的可能。Erlang程式可以由數千甚至上百萬個極度質輕的行程所組成,這些行程能夠在一個多核心處理器上執行,或者在許多處理器所形成的網路上執行。

Erlang提供了Mnesia的Erlang資料庫管理系統(Database Management System ,DBMS)。Mnesia是整合式的DBMS,存取速度相當快。它可以被設定成跨越數個實體分離的節點進行資料複製,以提供容錯的操作。

除了Mnesia之外,用Erlang開發系統,也幾乎都會用到OTP程式庫。OTP是一組Erlang程式庫與開放源碼程序,用來幫助Erlang程式建立工業等級的應用。儘管OTP的名稱有「電信」字眼,但是用途卻是沒有限制的。OTP是Erlang威力的來源之一,利用OTP可以相當容易地寫出牢靠的伺服器。

和我之前學過的語言相比,Erlang是一個很古怪的語言,具有相當陌生的語法,甚至還不支援物件導向。不只程式與眾不同,整個編程採用的手法也不一樣,但是語法相當簡潔有力。

我發現我之所以喜歡Erlang,是因為它夠奇怪(太普通的語言,我是沒興趣的)。沒想到Erlang光是透過Pattern Matching(樣式比對)的語法,居然可以做這麼多事,而且相當精簡;透過Messaging的方式,就可以輕易地做出多工、容錯、分散式的系統;Erlang還大量地使用Higher-Order Function,已經到了無孔不入的地步。

只要你的腦筋夠靈活,我覺得Erlang算是相當精簡好學的語言。不過我對於Erlang的執行環境大小則不敢恭維。雖然包含了Mnesia、OTP、GUI程式庫和各種程式庫,但40~50 MB的體積實在還是大得離譜。而且Erlang居然還不支援Unicode,這是個相當大的缺點。

如果你有分散式、容錯、多核心的開發需求,你應該將Erlang列入考慮。過去這兩年,我們已經品嚐過來自日本的Ruby,現在你準備好換個口味試試下一道菜──來自北歐的Erlang了嗎?

作者簡介:
蔡學鏞-技術顧問
清華大學資訊工程碩士,曾任華碩集團軟體工程師、元智大學資訊系講師、美商歐萊禮出版社技術編輯、臺灣微軟特約專欄作家。


Advertisement

更多 iThome相關內容