大家先看2012年5月编程语言排行榜的榜单
对于爱立信(Ericsson),大家首先想到是那个大名鼎鼎的手机厂商。在上世纪九十年代,爱立信的地位与当初的诺基亚和今天的苹果一样,用户数量巨大。不过英雄也有落幕之时,现在的索爱早已不如当年的爱立信那般风光了。
Erlang专为电信行业而生
在Erlang出生之前,软件行业中没有一款编程语言包容电信行业所需要的所有的特性。为了下一代电信产品的研发,在20世纪80年代中期,爱立信 的计算机科学实验室接到为下一代电信产品寻找合适语言的任务。Joe Armstrong、Robert Virding和Mike Williams在Bjarne Dcker的带领下,他们两年里尝试了所有的开发语言。在测试的过程中,实验室发现尽管有一些语言在某些方面符合电信行业的要求,但都无法覆盖所有的特 性。看来很有必要创造一门编程语言来满足需求。
Erlang之父Joe Armstrong
51CTO推荐:Erlang之父Joe Armstrong访谈:程序调试与啤酒
从此Erlang诞生了,它受到了函数语言(比如ML和Miranda),并发语言(比如ADA、Modula、Chill)以及逻辑编程语言 Prolog语言的启发和影响。与爱立信专有语言EriPascal和PLEX一样,Smalltalk语言的软件升级特性在Erlang中也得到了深刻 的体现。
1991年,Mike Williams终于写成了以C语言为基础的Erlang虚拟机的最初版本,一年之后,第一个应用Erlang的商业项目也在一个小团队的带领下诞生了。 该项目是一个移动服务器,它允许DECT无线电话的用户漫游于私人办公室网络。该产品在1994年成功问世,并随后得到了用户很多关于技术改进和新特性的 宝贵反馈, 这些建议都在1995年的Erlang新的版本中得以实现。
Erlang到底能做什么?
虽然Erlang本身是一种很有吸引力的编程语言,但当你把它与虚拟机(VM)、OTP中间件和类库相结合的时候,其真正的实力才能完全体现出来。其中的每一点都使Erlang软件开发变得如此特别。那么,具体有哪些功能体现出Erlang与其他类似语言的不同呢?
51CTO技术文章推荐:Erlang实战文本排版和Erlang实战建立文本索引
高级构造
Erlang是一种声明性的语言。声明性语言工作的原则是去描述应该计算什么,而不是去解释这个值是如何计算而来的。一个函数定义就像一组等式,尤其是当使用模式匹配从不同的情况中去选择和从复杂的数据结构中抽取组件的时候。下面是一个简单的例子:
- area({square, Side}) -> Side * Side ;
- area({circle, Radius}) -> math:pi() * Radius * Radius.
这个函数定义包含一个形状参数(这里是一个方形或者圆形),依靠它收到的形状类型,系统匹配正确的函数定义,并返回面积计算结果。
并发进程和消息传递
并发是Erlang成功的根本。Erlang不提供共享内存的线程,而是每个Erlang进程都在它自己的内存空间里执行,并拥有它自己的堆和栈。 进程之间不能随意相互干扰,而这在线程模型中很容易发生,从而极易导致死锁和其他可怕的事情
可扩展、安全和高效的并发
Erlang的并发具有快速和可扩展的特性。它的进程是轻量级的,Erlang虚拟机不会为每一个已生成的进程创建一个操作系统线程。Erlang 进程在虚拟机中生成、调度和处理,而与底层的操作系统无关。因此,进程的生成时间是以微秒为单位的,并且独立于现存的进程的数量。比较而言,Java和 C#为每一个进程生成一个底层的操作系统线程:由此你能得出一个有竞争性的结论是,Erlang在这方面以绝对的优势胜过其他两种语言。
软实时性
尽管Erlang是一种高级语言,但你同样可以利用它的软实时性。Erlang中的存储管理是自动的,垃圾收集的实现是以每个进程为基础。即使存在 需要垃圾收集的内存,系统的响应时间也能以毫秒级计算。正因为如此,即使在持续高峰的时候,Erlang也能不降低吞吐量而高负荷运行。
健壮性
如何创建一个健壮的系统呢?虽然Erlang未必能解决你的所有问题,但和其他语言相比它在很大程度上给你的工作提供了便利。Erlang拥有一整 套简单但有效的错误处理机制和异常监控机制,并且已经内置了大量通用库模块,其内核加入了健壮性的设计。通过针对正确分支进行编程和由类库来处理错误,程 序变得简短易懂,而且错误往往更少。
下面是本期榜单第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编程语言变化趋势