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

  • Abel Avram
  • 李彬

2013 年 4 月 25 日

话题:JavaJavaScriptC#C++语言 & 开发架构

一份研究显示,表现力最强的通用语言是 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)关注我们,并与我们的编辑和其他读者朋友交流。

JavaJavaScriptC#C++语言 & 开发架构