2012年5月編程語言排行榜:從愛立信走出來的Erlang
原創(chuàng)【51CTO獨家特稿】2012年5月9日,Tiobe公布了***一期編程語言排行榜。C語言繼續(xù)壓制Java位居***,兩者之間的差距有越拉越大的趨勢。而Object-C上升勢頭良好,已經開始威脅C++的老三位置。本期排行榜給我們一個問題,誰會是下一個***的編程語言?Tiobe給出5個答案,分別是Scala、F#、Groovy、Erlang和Clojure。今天我們要關注的,是從愛立信計算機科學實驗室走出來的Erlang。往期編程語言排行榜點這里。
大家先看2012年5月編程語言排行榜的榜單
對于愛立信(Ericsson),大家首先想到是那個大名鼎鼎的手機廠商。在上世紀九十年代,愛立信的地位與當初的諾基亞和今天的蘋果一樣,用戶數量巨大。不過英雄也有落幕之時,現(xiàn)在的索愛早已不如當年的愛立信那般風光了。
Erlang專為電信行業(yè)而生
在Erlang出生之前,軟件行業(yè)中沒有一款編程語言包容電信行業(yè)所需要的所有的特性。為了下一代電信產品的研發(fā),在20世紀80年代中期,愛立信的計算機科學實驗室接到為下一代電信產品尋找合適語言的任務。Joe Armstrong、Robert Virding和Mike Williams在Bjarne Dcker的帶領下,他們兩年里嘗試了所有的開發(fā)語言。在測試的過程中,實驗室發(fā)現(xiàn)盡管有一些語言在某些方面符合電信行業(yè)的要求,但都無法覆蓋所有的特性。看來很有必要創(chuàng)造一門編程語言來滿足需求。
Erlang之父Joe Armstrong
51CTO推薦:Erlang之父Joe Armstrong訪談:程序調試與啤酒
從此Erlang誕生了,它受到了函數語言(比如ML和Miranda),并發(fā)語言(比如ADA、Modula、Chill)以及邏輯編程語言Prolog語言的啟發(fā)和影響。與愛立信專有語言EriPascal和PLEX一樣,Smalltalk語言的軟件升級特性在Erlang中也得到了深刻的體現(xiàn)。
1991年,Mike Williams終于寫成了以C語言為基礎的Erlang虛擬機的最初版本,一年之后,***個應用Erlang的商業(yè)項目也在一個小團隊的帶領下誕生了。該項目是一個移動服務器,它允許DECT無線電話的用戶漫游于私人辦公室網絡。該產品在1994年成功問世,并隨后得到了用戶很多關于技術改進和新特性的寶貴反饋, 這些建議都在1995年的Erlang新的版本中得以實現(xiàn)。
Erlang到底能做什么?
雖然Erlang本身是一種很有吸引力的編程語言,但當你把它與虛擬機(VM)、OTP中間件和類庫相結合的時候,其真正的實力才能完全體現(xiàn)出來。其中的每一點都使Erlang軟件開發(fā)變得如此特別。那么,具體有哪些功能體現(xiàn)出Erlang與其他類似語言的不同呢?
51CTO技術文章推薦:Erlang實戰(zhàn)文本排版和Erlang實戰(zhàn)建立文本索引
高級構造
Erlang是一種聲明性的語言。聲明性語言工作的原則是去描述應該計算什么,而不是去解釋這個值是如何計算而來的。一個函數定義就像一組等式,尤其是當使用模式匹配從不同的情況中去選擇和從復雜的數據結構中抽取組件的時候。下面是一個簡單的例子:
- area({square, Side}) -> Side * Side ;
- area({circle, Radius}) -> math:pi() * Radius * Radius.
這個函數定義包含一個形狀參數(這里是一個方形或者圓形),依靠它收到的形狀類型,系統(tǒng)匹配正確的函數定義,并返回面積計算結果。
并發(fā)進程和消息傳遞
并發(fā)是Erlang成功的根本。Erlang不提供共享內存的線程,而是每個Erlang進程都在它自己的內存空間里執(zhí)行,并擁有它自己的堆和棧。 進程之間不能隨意相互干擾,而這在線程模型中很容易發(fā)生,從而極易導致死鎖和其他可怕的事情
可擴展、安全和高效的并發(fā)
Erlang的并發(fā)具有快速和可擴展的特性。它的進程是輕量級的,Erlang虛擬機不會為每一個已生成的進程創(chuàng)建一個操作系統(tǒng)線程。Erlang進程在虛擬機中生成、調度和處理,而與底層的操作系統(tǒng)無關。因此,進程的生成時間是以微秒為單位的,并且獨立于現(xiàn)存的進程的數量。比較而言,Java和C#為每一個進程生成一個底層的操作系統(tǒng)線程:由此你能得出一個有競爭性的結論是,Erlang在這方面以絕對的優(yōu)勢勝過其他兩種語言。
軟實時性
盡管Erlang是一種高級語言,但你同樣可以利用它的軟實時性。Erlang中的存儲管理是自動的,垃圾收集的實現(xiàn)是以每個進程為基礎。即使存在需要垃圾收集的內存,系統(tǒng)的響應時間也能以毫秒級計算。正因為如此,即使在持續(xù)高峰的時候,Erlang也能不降低吞吐量而高負荷運行。
健壯性
如何創(chuàng)建一個健壯的系統(tǒng)呢?雖然Erlang未必能解決你的所有問題,但和其他語言相比它在很大程度上給你的工作提供了便利。Erlang擁有一整套簡單但有效的錯誤處理機制和異常監(jiān)控機制,并且已經內置了大量通用庫模塊,其內核加入了健壯性的設計。通過針對正確分支進行編程和由類庫來處理錯誤,程序變得簡短易懂,而且錯誤往往更少。
#p#
下面是本期榜單第21-50的編程語言排名:
Position | Programming Language | Ratings |
---|---|---|
21 | RPG (OS/400) | 0.557% |
22 | Assembly | 0.517% |
23 | MATLAB | 0.485% |
24 | Bash | 0.465% |
25 | SAS | 0.456% |
26 | Fortran | 0.411% |
27 | COBOL | 0.405% |
28 | Scheme | 0.394% |
29 | R | 0.381% |
30 | cg | 0.372% |
31 | ABAP | 0.372% |
32 | Groovy | 0.344% |
33 | Scratch | 0.343% |
34 | D | 0.327% |
35 | Haskell | 0.295% |
36 | Prolog | 0.293% |
37 | (Visual) FoxPro | 0.268% |
38 | NXT-G | 0.252% |
39 | PL/I | 0.245% |
40 | F# | 0.239% |
41 | Smalltalk | 0.238% |
42 | Awk | 0.237% |
43 | APL | 0.236% |
44 | Erlang | 0.229% |
45 | Forth | 0.224% |
46 | Scala | 0.221% |
47 | ML | 0.214% |
48 | JScript.NET | 0.195% |
49 | VBScript | 0.194% |
50 | Alice | 0.180% |
以下是本期第51-100的語言排名
ActionScript, Algol, Apex, bc, Boo, C shell, CFML, CL (OS/400), Clean, Clojure, Curl, Dart, Dylan, Eiffel, Euphoria, Factor, Felix, Go, Icon, Inform, J, JavaFX Script, LabVIEW, Ladder Logic, Lingo, LPC, Mathematica, Max/MSP, MUMPS, NATURAL, Oberon, OCaml, Occam, OpenCL, OpenEdge ABL, Oz, PowerShell, Processing, Q, REALbasic, REXX, S, S-PLUS, SPARK, SuperCollider, Tcl, Verilog, VHDL, X10, xBase
Tiobe編程語言變化趨勢
【2012年榜單回顧】
- 2012年1月編程語言排行榜:Objective-C成為年度語言
- 2012年2月編程語言排行榜:用圖形編程的LOGO語言
- 2012年3月編程語言排行榜:JavaScript語言的回歸
- 2012年4月編程語言排行榜:C語言榮歸寶座