天天看點

走近Erlang世界

提起Erlang語言,相信許多人都會撓頭,因為它實在是太陌生了。在2007年6月由TIOBE Programming Community提供的程式語言排名中,Erlang占有率為0.080%,排名第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%)。

相對于傳統老牌“大佬”語言相比,Erlang語言絕對算得上是一種“小衆”語言,但其未來的發展前景卻是無法估量的,因為它可以解決傳統語言很難解決的并行計算中的難題。Erlang是一種函數式(變量隻能指派一次)、強類型、動态類型(變量類型在運作時決定,代碼需要編譯後才能執行,與Python,Ruby等不一樣)、面向并發(Concurrency Oriented)的語言。《程式員》雜志曾在去年9、10兩期雜志中對Erlang語言進行了介紹,《一場茶杯裡的風暴》和《輕松實作可伸縮性,容錯性,和負載平衡的大規模多人線上系統》。下面内容為兩文中對Erlang的一些介紹。

Erlang最初是由愛立信專門為通信應用設計的,比如控制交換機或者變換協定等,是以非常适合于建構分布式,實時軟并行計算系統。使用Erlang編寫出的應用運作時通常由成千上萬個輕量級程序組成,并通過消息傳遞互相通訊。程序間上下文切換對于Erlang來說僅僅隻是一兩個環節,比起C程式的線程切換要高效得多得多了。使用Erlang來編寫分布式應用要簡單的多,因為它的分布式機制是透明的:對于程式來說并不知道自己是在分布式運作。Erlang運作時環境是一個虛拟機,有點像Java虛拟機,這樣代碼一經編譯,同樣可以随處運作。它的運作時系統甚至允許代碼在不被中斷的情況下更新。另外如果你需要更高效的話,位元組代碼也可以編譯成本地代碼運作。

内建的并行計算模型使得Erlang非常适合編寫多人線上伺服器。具有良好伸縮性的大型多人背景系統用Erlang是這樣建構的:由很多被配置設定不同任務的“節點(Node)”組成的“叢集(Cluster)”。一個Erlang節點就是一個Erlang虛拟機的執行個體,你可以在一台機器(伺服器,桌上型電腦或者筆記本電腦上運作多個節點。Erlang節點自動跟蹤所有連接配接着的其他節點。要添加一個節點你僅僅需要把它指向任何一個已建節點就可以了。隻要這兩個節點建立了連接配接,所有其他的節點馬上就會感應到新加入的節點。Erlang程序使用程序ID向其他程序傳遞封包,程序ID包含着運作此程序的節點的資訊。是以程序不需要理會正在與其交流的其他程序實際在何處運作。一組互相連接配接的Erlang節點可以看作是一個網格計算體或者一台超級計算機。将大型多人線上遊戲裡的玩家,NPC以及其他個體抽象為很多并行運作的程序是最理想的,但是通常并行運算的實作讓人十分頭疼。Erlang天生就是簡化并行計算的實作。Erlang文法裡的比特操作讓二進制操作變得異常簡單,極大發揮了Perl和Python的打包/解包結構。使得Erlang非常适合操作二進制網絡通訊協定。

上一篇: Java vs Erlang

繼續閱讀