2012年5月編程語言排行榜:從愛立信走出來的Erlang
原創(chuàng)【51CTO獨(dú)家特稿】2012年5月9日,Tiobe公布了***一期編程語言排行榜。C語言繼續(xù)壓制Java位居***,兩者之間的差距有越拉越大的趨勢(shì)。而Object-C上升勢(shì)頭良好,已經(jīng)開始威脅C++的老三位置。本期排行榜給我們一個(gè)問題,誰會(huì)是下一個(gè)***的編程語言?Tiobe給出5個(gè)答案,分別是Scala、F#、Groovy、Erlang和Clojure。今天我們要關(guān)注的,是從愛立信計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室走出來的Erlang。往期編程語言排行榜點(diǎn)這里。
大家先看2012年5月編程語言排行榜的榜單

對(duì)于愛立信(Ericsson),大家首先想到是那個(gè)大名鼎鼎的手機(jī)廠商。在上世紀(jì)九十年代,愛立信的地位與當(dāng)初的諾基亞和今天的蘋果一樣,用戶數(shù)量巨大。不過英雄也有落幕之時(shí),現(xiàn)在的索愛早已不如當(dāng)年的愛立信那般風(fēng)光了。
Erlang專為電信行業(yè)而生
在Erlang出生之前,軟件行業(yè)中沒有一款編程語言包容電信行業(yè)所需要的所有的特性。為了下一代電信產(chǎn)品的研發(fā),在20世紀(jì)80年代中期,愛立信的計(jì)算機(jī)科學(xué)實(shí)驗(yàn)室接到為下一代電信產(chǎn)品尋找合適語言的任務(wù)。Joe Armstrong、Robert Virding和Mike Williams在Bjarne Dcker的帶領(lǐng)下,他們兩年里嘗試了所有的開發(fā)語言。在測(cè)試的過程中,實(shí)驗(yàn)室發(fā)現(xiàn)盡管有一些語言在某些方面符合電信行業(yè)的要求,但都無法覆蓋所有的特性??磥砗苡斜匾?jiǎng)?chuàng)造一門編程語言來滿足需求。
Erlang之父Joe Armstrong
51CTO推薦:Erlang之父Joe Armstrong訪談:程序調(diào)試與啤酒
從此Erlang誕生了,它受到了函數(shù)語言(比如ML和Miranda),并發(fā)語言(比如ADA、Modula、Chill)以及邏輯編程語言Prolog語言的啟發(fā)和影響。與愛立信專有語言EriPascal和PLEX一樣,Smalltalk語言的軟件升級(jí)特性在Erlang中也得到了深刻的體現(xiàn)。
1991年,Mike Williams終于寫成了以C語言為基礎(chǔ)的Erlang虛擬機(jī)的最初版本,一年之后,***個(gè)應(yīng)用Erlang的商業(yè)項(xiàng)目也在一個(gè)小團(tuán)隊(duì)的帶領(lǐng)下誕生了。該項(xiàng)目是一個(gè)移動(dòng)服務(wù)器,它允許DECT無線電話的用戶漫游于私人辦公室網(wǎng)絡(luò)。該產(chǎn)品在1994年成功問世,并隨后得到了用戶很多關(guān)于技術(shù)改進(jìn)和新特性的寶貴反饋, 這些建議都在1995年的Erlang新的版本中得以實(shí)現(xiàn)。
Erlang到底能做什么?
雖然Erlang本身是一種很有吸引力的編程語言,但當(dāng)你把它與虛擬機(jī)(VM)、OTP中間件和類庫相結(jié)合的時(shí)候,其真正的實(shí)力才能完全體現(xiàn)出來。其中的每一點(diǎn)都使Erlang軟件開發(fā)變得如此特別。那么,具體有哪些功能體現(xiàn)出Erlang與其他類似語言的不同呢?
51CTO技術(shù)文章推薦:Erlang實(shí)戰(zhàn)文本排版和Erlang實(shí)戰(zhàn)建立文本索引
高級(jí)構(gòu)造
Erlang是一種聲明性的語言。聲明性語言工作的原則是去描述應(yīng)該計(jì)算什么,而不是去解釋這個(gè)值是如何計(jì)算而來的。一個(gè)函數(shù)定義就像一組等式,尤其是當(dāng)使用模式匹配從不同的情況中去選擇和從復(fù)雜的數(shù)據(jù)結(jié)構(gòu)中抽取組件的時(shí)候。下面是一個(gè)簡(jiǎn)單的例子:
- area({square, Side}) -> Side * Side ;
 - area({circle, Radius}) -> math:pi() * Radius * Radius.
 
這個(gè)函數(shù)定義包含一個(gè)形狀參數(shù)(這里是一個(gè)方形或者圓形),依靠它收到的形狀類型,系統(tǒng)匹配正確的函數(shù)定義,并返回面積計(jì)算結(jié)果。
并發(fā)進(jìn)程和消息傳遞
并發(fā)是Erlang成功的根本。Erlang不提供共享內(nèi)存的線程,而是每個(gè)Erlang進(jìn)程都在它自己的內(nèi)存空間里執(zhí)行,并擁有它自己的堆和棧。 進(jìn)程之間不能隨意相互干擾,而這在線程模型中很容易發(fā)生,從而極易導(dǎo)致死鎖和其他可怕的事情
可擴(kuò)展、安全和高效的并發(fā)
Erlang的并發(fā)具有快速和可擴(kuò)展的特性。它的進(jìn)程是輕量級(jí)的,Erlang虛擬機(jī)不會(huì)為每一個(gè)已生成的進(jìn)程創(chuàng)建一個(gè)操作系統(tǒng)線程。Erlang進(jìn)程在虛擬機(jī)中生成、調(diào)度和處理,而與底層的操作系統(tǒng)無關(guān)。因此,進(jìn)程的生成時(shí)間是以微秒為單位的,并且獨(dú)立于現(xiàn)存的進(jìn)程的數(shù)量。比較而言,Java和C#為每一個(gè)進(jìn)程生成一個(gè)底層的操作系統(tǒng)線程:由此你能得出一個(gè)有競(jìng)爭(zhēng)性的結(jié)論是,Erlang在這方面以絕對(duì)的優(yōu)勢(shì)勝過其他兩種語言。
軟實(shí)時(shí)性
盡管Erlang是一種高級(jí)語言,但你同樣可以利用它的軟實(shí)時(shí)性。Erlang中的存儲(chǔ)管理是自動(dòng)的,垃圾收集的實(shí)現(xiàn)是以每個(gè)進(jìn)程為基礎(chǔ)。即使存在需要垃圾收集的內(nèi)存,系統(tǒng)的響應(yīng)時(shí)間也能以毫秒級(jí)計(jì)算。正因?yàn)槿绱?,即使在持續(xù)高峰的時(shí)候,Erlang也能不降低吞吐量而高負(fù)荷運(yùn)行。
健壯性
如何創(chuàng)建一個(gè)健壯的系統(tǒng)呢?雖然Erlang未必能解決你的所有問題,但和其他語言相比它在很大程度上給你的工作提供了便利。Erlang擁有一整套簡(jiǎn)單但有效的錯(cuò)誤處理機(jī)制和異常監(jiān)控機(jī)制,并且已經(jīng)內(nèi)置了大量通用庫模塊,其內(nèi)核加入了健壯性的設(shè)計(jì)。通過針對(duì)正確分支進(jìn)行編程和由類庫來處理錯(cuò)誤,程序變得簡(jiǎn)短易懂,而且錯(cuò)誤往往更少。
#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編程語言變化趨勢(shì)
 
【2012年榜單回顧】
- 2012年1月編程語言排行榜:Objective-C成為年度語言
 - 2012年2月編程語言排行榜:用圖形編程的LOGO語言
 - 2012年3月編程語言排行榜:JavaScript語言的回歸
 - 2012年4月編程語言排行榜:C語言榮歸寶座
 















 
 
 






 
 
 
 