作者Andrew Binstock,2013年1月8日

C++的复兴并没有出现,JAVA活的非常好,Object-C仍然原地打转。都发生了什么?

编程语言们经常遵循这么一种生存规律:他们出生后,幸运的那部分并不会在初期就消亡,这部分有时候可以活的更久、更滋润,然后,不可避免的进入到衰退期。和真实的生命不同,编程语言的衰退期可以持续很多年,因为很多遗留下来的代码需要在未来若干年内进行维护。一个编程语言在过去越流行,它的消亡期也会持续的越久。

一种新编程语言的诞生总是伴随着一个特定领域的需求而出现的,例如,Ruby的突然流行是伴随着Ruby on Rails(一种开发框架)出现的,那时候正是2007年iPhone刚刚上市的时候。因此,理解编程语言的上升或者下降——也包括起伏的趋势——经常会传递给人们一些当前编码问题领域中有价值的观点。

最近的处理器现象——从多核心(multicore)到众核心(many-core)的过渡经常被认为给函数式语言的出现奠定了基础,因为函数式语言能更好的适应并行编程,但是,在2012年中的大部分调查中,却并没有看到这个领域有什么突破。如果有能够脱颖而出的函数式语言,很可能是Scala和Clojure,因为Scala目前在该领域占有的份额较大。(这个观点的根据是,Ohloh's编程语言图解 ,此图覆盖了所有的开源项目,和Google搜索流量趋势。在比较权威的 Tiobe索引中——它会跟踪所有包含特定编程语言的网页的数量,Haskell, Erlang, and Scala都紧紧地跟着和压着Clojure.)

编程语言流行度数据往往会让一些语言的支持者和反对者都感到沮丧。多年以来,人们总是举很多例子来预测JAVA将会衰落,但是,来自于上面提到的那三个网站的数据却显示了相反的趋势。一年过了一年,JAVA的排名在最近的三年中一直没有变过,在所有主流语言的调查中,JAVA一直保持在第一或者第二(始终在C语言附近)。这个事实可能会引起人们对于编程语言的不断的抱怨,以及在JVM上运行多个语言的可行性(JRuby、Scala、Kotlin、Clojure、Fantom、Gosu,和一些其他的)却没有减少JAVA的流行度,但是,我认为更大的真相是,使用传统架构的语言确实正处于衰落期,但是Android的兴起却恰恰弥补了这个不足。

其他的主要开发移动应用的编程语言,比如Objective-C,也做的非常好:他在Tiobe索引排名中兴风作浪(搜集了很多年内编程语言的成长信息)。在Google趋向分析中,2007年之后,它一直保持在相同的排名(当iPhone第一次上市,移动应用开发变的非常有用的时候)。但是,如果Android继续蚕食Apple在世界市场的份额,我们在未来应该可以看到Objective-C会保持稳定,而Java将会增长。

在一些通用脚本语言中,Python持续慢速增长,JavaScript和Ruby则止步不前,Perl进入到了漫长的衰弱期。根据Google趋势分析,Perl的搜索量是2004年的19%。他在开源社区中的地位急剧下跌和它本身处于不可挽回的的衰落期密不可分。一个人应当很谨慎的宣布一个编程语言已经死亡或者正在死亡,因为编程语言的复活几率是相当低的: 这里并不包括JavaScript和Objective-C,它俩是两个例外。但是,由于Python更具有竞争力,并且相当流行,因此,Perl看起来并不可能在实际应用中重振雄风(相反,当Objective-C和JavaScript杀回来的时候,他们并没有替代品,因此他们可以东山再起)。

主要的原生语言,C和C++,仍然保持原样,在不同的调查报告中有微小的上升和下降。这些数据打破了微软的Herb Sutter关于C++“复兴“的预言。Google的搜索趋势图则表明了在过去的五年内,C++的搜索量一直在稳步下滑:

enter image description here

大多数已知的编程语言在过去的五年中的Google搜索量都处在一个下降的趋势,因此,这种下降并不一定是消亡的象征——虽然如果这个语言正处在复兴的阶段,你可能更希望看到它能处于上升趋势中。一些其他的指标(例如在OSS中LOCs的改变),事实上非常稳定,有些甚至稍微上涨了一些。我认为Sutter那部分关于复兴的期望是建立在C++11标准已经完成的基础上的,同时也来源于最近发行的Windows 8与最新的C++兼容的相当好的事实。但是,我却没并没看到任何C++复兴的迹象,同时,我也没看到任何C++快速会跌落到谷底的预兆。如果C++复兴可能发生的话,它必须成为可以在今天最热门的领域中使用的主要语言之一:移动应用,或云计算、抑或大数据,时间将会证明这一点。但是我可以很确定的说,C++可以在它的传统领域持续成长,成长速度可以和这些领域的成长速度相同。

一些其他想法:Lua和Tcl,在嵌入式C和C++中使用的最主要的两种语言,在朝着相反的方向发展。Lua在游戏领域被广泛应用,新的、效率超高的LuaJIT让Lua成为了一个在性能敏感环境中很有吸引力的一个选择。另一方面,Tcl则继续衰落,原因则是一些内部核心设计问题,版本发行太慢,以及匮乏的市场决策。

在2012年,我们报道了若干很有潜力的新兴编程语言,这些语言有的有进入主流应用的倾向,尤其是DGo,以及Dart。虽然 他们目前并没有进入到编程语言的主流层次,但它们正在以自己的方式前进着,并且获得了一些拥护者。我们将会在今年调查更多新的、有趣的编程语言,并且以开发者所热爱的方式报道它们的发展进程。

原文链接:The Rise and Fall of Languages in 2012