TIOBE近日发布了2010年5月的编程语言排行榜,上期榜单C语言反超Java, 本期C继续以18.186%的份额领跑,Java则位居第二。排名三到五位的依然是C++、PHP、VB,以下是本期编程语言排行榜前十名榜单:
2010年5月编程语言排行榜榜单
仔细观察本期榜单的Top10,我们会发现其中半数是动态语言,它们是:PHP、Visual Basic、Python、Perl和JavaScript。今天我们就一起走进动态语言的前世今生。
前10名编程语言趋势走向
何谓动态?
对于动态语言,网上比较流行的说法是:程序在运行时可以改变其结构,新的函数可以被引进,已有的函数可以被删除,即程序在运行时可以发生结构上的变 化。我们可以理解成:直接被解释执行的语言称为动态语言。而需要编译环境将程序转换为其它的中间编码再执行的语言称为静态语言。
事实上,动态语言的根本是在语言设计之初的编译策略选择,即:编译器能对一段程序作出哪些判定。如果一个语言使用的编译策略支持编译器静态决定某个 问题,我们认为这个语言使用了一个静态(static)策略,或这说这个问题可以在编译时刻(compile time)决定。另一方面,一个只允许在运行程序的时刻做出决定的策略成为动态策略(dynamic policy),或这被认为需要在运行时刻(run time)作出决定,(以上摘自《编译原理 2ed》)。一门语言动态与否的重点是在编译和运行,这在应用场景方面所产生的不同与程序员的工作密切相关:你能做什么,在何时做。
动态语言的历史
世界上第一门动态语言(也是世界上第二门编程语言)是Lisp,其后很多语言都从Lisp身上继承了必要的优势基因(比如Smaltalk、 Python、Ruby等),动态性就是其中之一。上世纪七十年代,Smalltalk语言出现,集合了面向对象和动态性获得当时开发界的认可;1986 年Perl出现,高效的开发效率和极少的语法限制获得了大量程序员的欢迎,也使更多人领教了动态语言的魅力。
目前,主要的动态编程语言有:PHP、Visual Basic、Ruby、Python、JavaScript、Groovy和Perl等,从动态与静态语言趋势图可以看出,动态语言已经逐渐转变成主流的 编程语言,它们是Web应用开发的主力,并以一种比较轻松的姿态渐渐走进软件开发的其他角落。动态语言近年的高速发展与其自身特点和IT界的高速发展有很 大关系。
近十年动态语言与静态语言走势图
因何而动?
与静态语言不同,动态语言对类型的要求并不十分严格,代码简洁自由,一般的动态语言多为动态类型和弱类型,自身即支持泛型编程(这里的类型归纳并不 绝对,一般认为Python属强类型语言,Groovy支持静态类型)。动态语言秉承的一个理念是:优化人的时间而不是机器的时间。因此动态语言会为提高 程序员的生产力方面不遗余力,但对程序性能方面的影响也不可忽视。
51CTO一直提倡从应用场景和程序员生产力两个方面来评价一门语言或技术。站在程序员的角度,使用动态语言进行程序开发要比静态编译型语言更加轻 松自如,没有过多的语法和编译限制。我们经常可以听到从其他语言转向Ruby或Python的人提到“编程的乐趣”,这种乐趣是源自动态语言更接近人的思 维(而不是机器思维),更符合项目需求流程而不是项目实现流程;同样一个功能,动态语言可以用更小的代码量来实现。动态语言对程序员生产力的提高,是其大 行其道的主要原因。
在性能方面,动态语言没有太大的优势,但动态语言的理念是:优化人的时间而不是机器的时间。提高开发者的生产力,宁肯牺牲部分的程序性能或者购买更 高配置的硬件。随着IT业的不断发展和摩尔定律的作用,硬件相对于人件一直在贬值,这个理念便有了合理的现实基础。从动态与静态语言趋势图可以看出,动态 语言的抬升自2002年开始,2004年达到高潮,这一区间也正是计算机硬件价格大幅降低、互联网高速发展的时段。动态语言的流行,事实上是动态语言的相 关特性迎合了互联网和IT界的发展,提高了程序员的生产力;虽然具有种种性能方面的不足,但很明显,动态语言的优点战胜了这些缺点。
其他编程语言及趋势
下面是本期榜单第21-50的编程语言排名:
以下是本期第51-100的语言排名
ABC, Algol, APL, Applescript, Awk, Beta, cg, Clean, cT, Dylan, Eiffel, Euphoria, Factor, Falcon, Focus, Heron, Icon, IDL, Inform, Informix-4GL, Io, LabWindows/CVI, Lingo, LotusScript, LPC, MAD, Maple, Mathematica, MAX/MSP, Modula-2, Modula-3, MS-DOS batch, MUMPS, Natural, Occam, Oz, PL/I, Postscript, Progress, Q, R, Revolution, REXX, Sed, Seed7, SIGNAL, SPSS, VBScript, VHDL, XSLT