GMTC北京站9折购票倒计时,部分日程已上线,戳此查看 了解详情
写点什么

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

  • 2013 年 4 月 25 日
  • 本文字数:1855 字

    阅读完需:约 6 分钟

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

2013 年 4 月 25 日 09:526266
用户头像

发布了 256 篇内容, 共 56.6 次阅读, 收获喜欢 10 次。

关注

评论 1 条评论

发布
用户头像
把 HTML 和 CSS 也算进去的话...
2021 年 02 月 02 日 01:49
回复
没有更多了
发现更多内容

React vs Angular,到底那个更好用

编程江湖

前端开发

python 数据分析找到老外最喜欢的中国美食【完整代码】

1_bit

Python

在线上传图片二维码识别解析

入门小站

工具

DataPipeline与海量数据完成产品互认证,助推数据管理信创生态新进程

DataPipeline数见科技

数据库 中间件 数据融合 数据迁移 数据管理

腾讯云商用密码合规解决方案,亮相2021商用密码应用创新高端研讨会

腾讯安全云鼎实验室

商用密码 云上安全 数字生态 安全服务

Log4j2 消停了,Logback 开始塌房了?

程序猿DD

Java 日志 漏洞

TCP 两次握手为什么无法阻止历史连接?

华为云开发者社区

TCP 报文 握手 RST 报文 两次握手

DM 分库分表 DDL “乐观协调” 模式介绍丨TiDB 工具分享

PingCAP

“数”驰天下,华为云DRS 高效支撑T3出行平稳迁移

华为云开发者社区

数据库 数据迁移 华为云DRS T3出行

学习乐器的好处

Tiger

28天写作

前端开发之JS中编写For循环的方法

@零度

JavaScript 前端开发

云小课|DGC数据开发之基础入门篇

华为云开发者社区

大数据 数据湖治理中心 云数据开发 DLF

愉悦圣诞 暖意融心

龙智—DevSecOps解决方案

大数据开发之sparkSQL的使用分享

@零度

大数据 Sparksql

HDFS(Hadoop分布式文件系统)

编程江湖

大数据 hdfs

给弟弟的信第22封|写技术博客有哪些益处?

大菠萝

28天写作

打造“智慧之眼”与“创新之轮”,华睿科技助推制造业智能升级

科技新消息

拿捏SQL数据分析:从基础破冰到面试题解

博文视点Broadview

图解带你掌握`JVM`运行时核心内存区

华为云开发者社区

Java JVM 内存 堆内存

Linux之tail命令

入门小站

Linux

服务器数量从21台降至3台,TDengine在跨越速运集团的落地实践

TDengine

数据库 tdengine 时序数据库

群聊泄密敲响警钟,WorkPlus织密信息安全“防护网”

WorkPlus Lite

Java开发之线程、多线程,线程池面试题

@零度

多线程 线程池 JAVA开发

Linux之tail命令

入门小站

Linux

从新手到专家:如何设计一套亿级消息量的分布式IM系统

WorkPlus Lite

解决 GitLab 报错:You are not allowed to force push code to a protected branch on this project

AlwaysBeta

git gitlab

专家视野:探寻运维趋势与ITSM落地之道

龙智—DevSecOps解决方案

运维 ITSM

如何有效使用预训练语言模型

云智慧AIOps社区

算法 智能运维 云智慧 语言模型 南加州大学

Linxu云计算这样学效率更快,Linux基础篇,expect-正则表达式-sed-cut的使用

学神来啦

Linux centos sed linux运维 expect

AI新手语音入门:认识词错率WER与字错率CER

华为云开发者社区

语音识别 词错率 WER 字错率 CER

研究指出:Clojure、CoffeeScript和Haskell是表现力最强的通用语言_Java_Abel Avram_InfoQ精选文章