【编程世界的杂谈轶事】比比27种编程语言的性能。

最近看到一个有趣的编程语言研究,它把27种编程语言放到一起做了一个基准测试。

一般的基准测试无非是看看哪个编程语言最快,而这个研究还要看看谁消耗的能量最高。

其中的一个结果让人震惊,Python竟然比C慢71倍,消耗的能量居然是C的75倍!不得不说还是C语言牛逼!!!

这个研究是葡萄牙的一个研究所做的,他们用了一个叫做“The Computer Language Benchmarks Game”测试集。

这个测试集很有趣,既包括程序员熟悉的“二叉树遍历”,也包括“N体问题”这样的天体运动模拟,目的是尽可能多地覆盖到更多领域。

图片

对于程序的运行时间很好计算,记录下开始时间和结束时间,相减就出来了。

对于程序的能耗,他们使用了Intel的RAPL(Running Average Power Limit),这是一种硬件功能,可以监控CPU、内存、GPU能耗,然后通过API来访问。

整体的程序框架大概是这样:

for (i = 0 ; i < N ; i++){  time_before = getTime (...);  rapl_before (...);  // 使用system系统调用来执行程序  // 例如system("/usr/bin/python binarytrees.py")  system(command);  rapl_after (...);  time_elapsed = getTime (...) - time_before ;  ...}

最终的结果是这样的(经过了标准化的处理):

在速度上,不出意料,C语言最快,以它为基准,Python是71.90,Lua最慢。

图片

在能量消耗上,C语言最低,以它为基准,Python是75.88,Perl最差。

图片

在内存占用上,Pascal这门语言竟然排到了第一,C语言屈居第三。

图片

从运行速度,能量消耗、内存使用这三项指标上都能看出C语言的王者之气。

运行速度最快的编程语言:C、Rust、C++、Ada、Java,在节能榜也名列前茅。

可以看出编译型的语言性能确实厉害,Java的虚拟机被优化得也非常强悍。

图片

而解释型语言PHP、Lua、Ruby、Python、Perl等就排名靠后了。

让人吃惊的是Lisp,执行速度靠前,消耗能量之少也名列前茅。

那么,这个结果的可信度如何呢?

The Computer Language Benchmarks Game测试集合有个特点:充分利用了编程语言的特性,致力于让程序运行得最快。

这在真正的实践中是不现实的,因为大部分程序员都不会这么写代码的。

所以研究团队找了一个叫Rosetta Code的测试集合,再次对结果进行验证。

图片

Rosetta Code的特点是是对同一个编程任务,有几百种编程语言的实现!

由于它的目标不是优化程序,而是为了展示不同编程语言的相似之处和不同之处,让学习者能快速地学习另外一种编程语言。

他们从中选了9个任务的代码,再次进行了测试。

图片

结果和之前差不多,C、Pascal、Ada、Rust、C++ 依然排在前面几位,Ruby、Perl、Python依然排在最后。

图片

唯一的例外是Java,排名大幅下降,因为在Rosetta Code的实现中,大量使用了Java集合(如List和Set),而不是静态的数组,从而拖累了Java的性能。

总结

看完这个研究,你有什么感想?

我想说,如果你是一个环保主义者,觉得应该对气候变暖负责任,根据这个研究结果,那你一定得选择C语言来编程!

图片

但是呢,这个研究只关注编程语言在运行时的表现,它不考虑软件的编写成本、维护成本。

C语言和硬件密切相关,是个“低级”的高级语言,想写出好代码不容易。

想用它写出和Java、Python同样功能的程序,花费的时间要长得多,电脑开机的时间也要长得多,这么算下来,用C语言消耗的能量可能远远超过Java和Python。

对于系统级的软件和对性能要求高的软件,C、C++、Rust是不二之选,对于应用层的软件,需要快速实现多变的业务逻辑,还是选择Python、Java、JS、Ruby等编程语言吧,适合的才是最好的!

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青少年编程作品集

你的赞赏将带来极佳的运气

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值