为什么“老掉渣”的编程语言永远阴魂不散?

标签:编程语言

访客:18600  发表于:2014-09-12 10:31:08

【导读】当今许多世界著名的编程语言的年纪已经够大了。举个例子,PHP已经20岁了,Python也23岁,HTML已经服务了21年,Ruby和JavaScript有19年,C语言已经到达42岁高龄。

为什么“老掉渣”的编程语言永远阴魂不散?

当今许多世界著名的编程语言的年纪已经够大了。举个例子,PHP已经20岁了,Python也23岁,HTML已经服务了21年,Ruby和JavaScript有19年,C语言已经到达42岁高龄。

没有人能够预测这些。甚至连计算机专业科学家Brian Kernighan都没能做到。他是世上第一本关于C语言主页书籍的合著者,这本书今天仍在被印刷着。语言本身是Kernighan的另一位合著者Dennis Ritchie所发明,但是他已经在2011年离开了人世。

“我隐约记得和编辑的早期对话,我告诉他们,我们会出售大约5000册的书。”Kernighan在最近的一次采访中如是说。“我们能做得更好,我不认为将来学生使用的教科书版本依旧是2014年的版本。”。

特别值得注意的是影响C语言持久性的拦路虎出现了,谷歌开发了一种新的语言,名字叫做Go,它可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布·派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧。 这种语言能够更有效更专业的去解决C现在需要解决的问题。不过,Kernighan很难想象Go能彻底消灭C,不管这种语言有多优秀。

他还说:“大多编程数语言不会死亡,或者至少一旦他们达到了一定程度的接受者数量,它们就不会死亡。C相对其他语言来说依旧还能够很好的解决一些问题,所以它依旧坚挺地活着。”

 
编程界的“习惯成自然”
 
为什么一些计算机语言变得比其他计算机语言更成功呢?这是因为有很多开发人员选择使用它们。这看似符合逻辑(甚至有些废话的感觉),但是当你想找出为什么那么多开发人员都选择这种语言作为他们使用的语言时,这个问题就变得有点棘手了。

Ari Rabkin和Leo Meyerovich分别是来自普林斯顿大学和加利福尼亚大学伯克利分校的研究专家。这两年来他们致力于回答那些问题,他们出版了一篇论文叫做《编程语言采用情况的证实与分析》(Empirical Analysis of Programming Language Adoption),文章主要描述了他们通过分析超过20万个开原版本的项目以及轮询了超过1.3万名程序员。

那么,他们主要的发现是什么呢?大多数时候,程序员们选择他们的编程语言的理由就是:他们知道这个语言而已。

“我们之所以使用这个语言那是因为我和我身边的人一直都在使用这个语言” Rabkin解释道,“举个例子,天文学家们在历史上使用IDE(Interactive Data Language)交互式数据语言,作为他们计算机程序编程语言,不是因为这种语言对太空星系有着什么特殊的功能,而是因为人们使用它有着一种巨大的惯性。程序员们曾经使用这种语言编出了很好的程序,他们只是想把这种感觉上的优势保持下去而已。”

换句话说,这在一定程度上要感谢知名度,是它使得语言保持不朽的生命力。当然,知名度的效应虽然强大,但是那也并不意味着这个流行的编程语言地位永不改变。Rabkin指出,我们现在使用的C语言已经不像当年Kernighan首次编写时那样了,如果不做改进,它有可能不会完全兼容现代的C语言编译器。

“这里有一个古老的,和编程语言相关的冷笑话,有一个工程师被人问到,什么语言人们会持续使用30年?他回到道:我不知道,但是以后它的名字将会是Fortran(公式翻译)” 。Rabkin说,“我们目前看到的使用寿命很长的语言已经不再是它们在70年代或者80年代时被设计出来的样子了。人们在优化语言的时候大多是添加进需要的功能而不是删除已有的东西,这是为了不打破程序向后兼容性,但是不管怎么变,有些功能永远是固定的。”

什么是程序向后兼容性呢,这意味着程序员不仅可以继续使用这个语言更新他们的程序,而且他们不需要返回去重写过去很老的程序。就是这些比较老的“遗留代码”让这种语言长期保留了下来。只不过这是有代价的。只要它存在,人们对于一种语言的信仰就会存在。

 
PHP:一个长寿语言的案例
 
遗留代码是指程序或者部分程序是由过时的源代码所编写。思考一下,举个例子,在商业领域或者工程项目上核心的程序功能用了一种奇葩语言编写而成,但是这种语言没有任何地方能够兼容它。这些遗留代码仍然秉承着原有的功能目的,并且很难用现代代码重新编写,即使可以也需要耗费巨大的人力、财力。鉴于此,它们只能原地打转,迫使程序员继续挣扎着使用它。

任何语言经历了几年以后都会遇到一些遗留代码的问题,PHP也不例外。PHP是一个很有趣的实例,那是因为它的遗留代码和现在的现代代码截然不同。可以说是一种巨大的改变。它的支持者和反对者都承认,这一改变是一个很大的进步。PHP 独特的语法混合了C、Java、Perl以及PHP自创的语法。它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。

Andi Gutmans是Zend Engine的联合发明者之一,它的编译器成为主流编译器的时候,是PHP4风靡的时期。Gutmans说他和他的搭档们最初只是想改进一下PHP3,因为PHP自打发明以来就非常成功。Rasmus Lerdorf后来也加入了他们的项目,所以最终成就了PHP4的编译器,以及后来的PHP5也沿用了这个编译器。

因此,今天我们所看到的PHP语言已经和它的祖先——最初版本的PHP语言相比已经截然不同了。然而,在Gutmans看来,他一直对基于老版本PHP语言的遗留代码有偏见,PHP是一种充满了各种安全漏洞的语言,它不可能承担得起“规模化”处理的大型计算任务。

他同时还指出,那些批评PHP的人们通常批评它还是1998年的东西。这些人是不了解今天的PHP语言的,当今的PHP语言已经是一个非常成熟的生态系统。

今天,Gutmans说,作为一个“管家”,他最重要的事情就是鼓励人们始终保持更新,更新到最新版本。他说,“PHP是一个足够大的社区,并且你有足够多的遗留代码基础。但是总的来说,在我们的社区里面,最低都在使用PHP3。”

可问题是,任何语言的用户都永远不会完整的升级他们的程序到最新版本,这就是为什么现在依旧有很多用户仍然在使用早在2000年就已经发布了的Python2,而不是在2008年发布的Python3。六年过去了,现在很多用户,例如谷歌,都不愿意升级他们的语言。其中有各种各样的原因,这使得很多开发商对于更新语言这件事持谨慎态度。

“永远都不会死亡。”Rabkin说,“任何具有遗留代码的语言都会沿用很久,因为重写它们是非常昂贵的,如果它没有出现大问题是永远都不会去修理它的。”

决定语言寿命的不是语言本身的优越性
 
当然,开发者不会选择这些仅保留哪些遗留代码的语言。Rabkin和Meyerovich发现它们谈及语言的偏好的时候,这款语言的年龄只是一个简单的数字而已。Rabkin还透露:

事情真的让我们感到很震惊,我们认为很重要的,将人们按年龄分成若干个小组,然后问他们知道多少种编程语言。我们的直觉是,答案的数量肯定会随着时间和阅历的增长而增多;可事实上并不是这样,25岁和45岁的受访群体都知道相同数量的编程语言。几个问题后答案还是相同的,这样,你就知道了一种给定的语言不随年龄的增长而增多。

换句话说,不仅仅是老开发人员始终坚持经典语言,有研究发现年轻的程序员们首次采用的编程语言也是旧的语言。这可能是因为这些语言都有一些有价值的库或者一些能够吸引人们使用它的特性。或者是因为在这个开发人员的团体中的一大部分人已经采用了这种语言作为团队的第一语言。

“世界上总会有固定数量的程序员关注这些语言,”Rabkin说,“如果一种语言能够提供足够的它所特有的价值,那么人们必将学习和使用这种语言。如果人们和你共享另外一种语言,通过这种语言交换代码和传递信息,你肯定也会乐意去学习这种语言。举个例子,只要大多数程序库是Python库以及团体经验都是Python的专业经验,那么毋庸置疑,Python这种语言肯定会做的很好。

有研究人员发现,语言的运作过程中,使用语言的群体至关重要。虽然高级语言两者之间并没有并没有很大明显的差别,就像Python和Ruby之间一样。举个例子,程序员很容易通过开发感受到其中一种语言的优越性,但其实另外一种语言也有它自有的优越性。

Rabkin同时还说:“Rails并没有使用Ruby编写,但是就是因为它,证明了编程语言的决定是由社会因素所影响的。例如让Objective-C这种语言复活的强心针是苹果的工程团队强调:“让我们用它吧!”,可事实上他们并没有去捡起这种语言。

通过社会影响力和遗留代码,我们最古老和最流行的计算机语言都具有相同的强大惯性。那么Go有可能超越C吗?那就看有没有正确的人或者强大的公司说它“没问题”,用以引导开发者们去使用这种语言,那么这一问题的答案有可能是肯定的。

Rabkin最后总结道:“一种语言的兴衰,可以归结于谁能够更好地宣传这种语言。”(via 猎云网)

评论(0)

您可以在评论框内@您的好友一起参与讨论!

<--script type="text/javascript">BAIDU_CLB_fillSlot("927898");