研究指出:Clojure、CoffeeScript和Haskell是表现力最强的通用语言

一份研究显示,表现力最强的通用语言是Clojure、CoffeeScript和Haskell。这份研究使用了“每次提交代码行数”(LoC/commit)作为表现力的计量单元。

RedMonk公司的在职博士DonnieBerkholz针对不同的编程语言做了一份旨在量化其表现力的研究。这份研究基于Ohlol提供的数据,Ohlol持续追踪了过去20年里的50多万个开源项目,这些项目的开发涉及了约100种编程语言。

BerKholz采用“每次提交代码行数”作为表现力的计量单元,并补充说明他基于“代码提交一般用于增加单一概念的代码片段”这一假设开始这项研究。同时,该结果并不涉及对可维护性或生产率的衡量,也没有给出代码的可阅读程度或是需要多长时间来编写这个长度的代码片段。

下图展示了超过50种语言的表现力,并依据RedMonk在今年早些时候发布的语言排名中各个语言的流行度进行着色:红色表示最流行的语言,蓝色的语言在流行度方面属于第二梯队,而黑色的语言则属于第三梯队(点击以放大)。

每种语言的“每次提交代码行数”分布在一定范围内,因为这份研究对每种语言都覆盖了许多不同的项目,所以每种语言都拥有自己的平均量。这些语言按中 位数进行排名——也就是方框中的黑色线,它代表了50%的相关项目中的“每次提交代码行数”——方框的底部和顶部代表25%和75%的项目,而方框两端延 伸的上下引线段则分别下探到10%,以及上探到90%。

Berkholz的部分结论如下:

第三梯队的语言具有很高的表现力。

函数式语言倾向于具有高表现力。

特定领域的语言倾向于具有高表现力。

编译并不意味着表现力下降。

CoffeeScript(第6项)与JavaScript(第51项)相比,在表现力方面展现出了显著优势,实际上在所有的语言中CoffeeScript是最好的。

Clojure (第7项)是表现力最强的Lisp变体。

虽然Go(第24项)正在变得越来越热门,但是它在表现力方面并不出众……除此之外,它战胜了所有第一梯队的语言,因此如果一个人只拥有第一梯队语言的经验,那么他当尝试Go的时候必定会感觉到表现力的提升。

关于“第三梯队的语言具有很高的表现力”的结论,让人好奇为什么高表现力的语言难以盛行?是否因为它们的简洁特性导致普通的程序员难以掌握和使用这样的语言?又或者是否有其它的原因?

Berkholz还基于语言表现力的一致性对其进行了排序,即以其方框体的高度进行排序,展现在下图中(点击以放大):

Berkholz对此总结道:

第一梯队语言的表现在这里有很大提升。

第一梯队的语言倾向于具有显著地一致性,不管其表现力如何。

这反映出第一梯队的语言具有一个主要特性,即可预测性,这甚至比它们的生产率更重要。

第三梯队的语言在这里的表现则比较糟糕。

Java在“企业级”语言(C、C++、Java)中的表现最好。

CoffeeScript在一致性方面排名第一,其“每次提交代码行数”的IQR(译者注:四分位差)只有23行,而第四名的Clojure则是51行。

基于表现力在一致性方面的结果,以及Redmonk对语言流行度的排名,Berkolz得出这样的结论:Clojure、CoffeeScript和Haskell是最具表现力的通用语言。由David R. MacIver进行的另一份研究也部分佐证了Berkolz的结论,该研究通过Hammer Principle网站(注:这是一个调研网站)对2576名开发者进行了访谈。Maclver指出,最具表现力的语言是Haskell、Clojure和Scala,而表现力最弱的是C和PHP,还有TCL这种弱到极致的语言。不过Maclver的研究未涉及CoffeeScript。

Berkholz的文章在他的最初发表的网站Hacker News以及Twitter都引来了大量的评论,这些评论包括以下的想法:“每次提交代码行数”不能精准地体现语言的表现力,表现力应该考虑代码可读性和可维护性,DSLs不应该被纳入本项研究,以及其他许多内容。

Berkholz坚称他的研究并不是关于语言的可读性和可维护性,“而是关于代码在仓库中的状态、正在使用的开发实践、开发者可能面对的潜在的bug水平(考虑到bug与代码行数之间的关联)”,对此更详细的解释请见其另一篇独立的文章,阐述了为何他使用“每次提交代码行数”来衡量表现力。

译者注:该研究发表后,关于不同语言的表现力,以及该研究所采用的每次提交代码行数作为表现力的度量方式的准确性,引起了极大争论。各位读者你怎么看?

英文原文链接:Study: Clojure, CoffeeScript and Haskell Are the Most Expressive General-purpose Languages


感谢马国耀对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

This entry was posted in Case. Bookmark the permalink.

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s