共计 1833 个字符,预计需要花费 5 分钟才能阅读完成。
能量使用数据是否能告诉我们编程语言的质量?
六位来自葡萄牙三所大学的研究人员针对这一问题进行了研究,并发表了一篇名为《编程语言的能效》的论文。
他们使用 27 种不同的编程语言实现了 10 个问题的解决方案(均采用相同算法),随后执行这些解决方案,并记录了每种语言的电量消耗以及运行速度和内存占用情况,结果如图示👇
这项研究揭示了一些有趣的发现:并非所有运行速度快的编程语言都具有低能耗。
虽然 C 语言通常被认为是速度最快的,并且在节能方面也表现优异,但在对 DNA 数据库进行特定基因序列扫描的基准测试中,Rust 语言显示出了更低的能耗,而 C 语言则排在第三位。
此外,” 最佳 ” 编程语言的评定标准也因测试的不同而异。例如,在一次测试中,C 语言在内存使用方面排名第二,而 Rust 排名第一;但如果按照内存使用排序,Rust 的排名会下降 9 位。
为了确保研究的可比性和代表性,研究者采用了 Computer Language Benchmarks Game 提供的 10 个标准算法问题进行测试。进行各种基准测试是至关重要的,因为不同的测试会得出不同的结果。
总体来看,尽管 C 语言在速度和节能方面通常被认为是最优的,但在涉及扫描 DNA 数据库中特定基因序列的基准测试中,Rust 是最节能的,而 C 语言位居第三。
运行速度快的语言更节能吗?
虽然普遍认为程序运行速度的提升可以降低能耗,但研究者们明确指出,” 并非所有运行速度快的语言都更节能 ”。
研究者们通过分析实验结果,得出了一个结论:CPU 消耗了大部分能量,大约平均占 88%。
此外,他们还发现 DRAM 的峰值使用量与能耗之间几乎没有直接联系。这项研究为一个长期存在的问题提供了解答:” 速度更快是否意味着更环保?”
是的,当按照执行时间排序时,前 5 名最节能的语言在能源效率上也几乎一致。
实际上,在 10 个基准测试中,有 9 项测试的最优结果是由速度最快且能源效率最高的三种语言之一获得的,这并不出乎研究者们的预料。
众所周知,C、C++ 和 Rust 这三种语言因其高度优化而在执行性能上表现出色。
然而,当对其他 24 种语言按照运行时间进行排名时,情况则有所不同。只有 OCaml、Haskell、Racket 和 Python 这四种语言在能耗和时间排名上保持一致,而其他语言的排名则出现了较大差异。
即便在单一基准测试中,也存在一些速度快但并不节能的语言。
编译型语言的优点
编译型语言似乎是最节能和运行最快的语言,这一点在论文中通过具体的数据得到了量化。
根据研究,编译语言需要花费 120J 能量来运行解决方案,而虚拟机和解释型语言要分别花费 576J 和 2365J。
在执行时间的对比上,研究者也采用了相同的精度,得出的结论是:平均而言,编译语言花费 5103 毫秒,虚拟机语言花费 20623 毫秒,解释型语言花费 87614 毫秒。
两项排名中的前 4 名均为编译型语言(有一个例外,Java 语言)。
5 种最慢的语言都是解释型语言:Lua、Python、Perl、Ruby 和 Typescript。
5 种能耗最多的语言也都是解释型语言:Perl、Python、Ruby、JRuby 和 Lua。
但同时,在使用正则表达式操作字符串时,5 种最节能的语言中有三种(TypeScript、JavaScript 和 PHP)是解释型语言。尽管在其他情况下,它们往往不是很节能。
编译型语言在占用内存最少的排名中也占据了前 5 名。
研究者指出,平均内存使用量方面,编译语言为 125Mb,虚拟机语言为 285Mb,解释语言为 426Mb。
4 种解释型语言内存消耗最高。
按编程范式排序,命令式语言平均使用 116Mb,面向对象语言 249Mb,函数式语言 251Mb,脚本 421Mb。
命令式编程在能源消耗和运行速度上通常优于其他范式。
研究者强调,编程范式和语言对能耗、时间和内存的影响各异,且重要性取决于具体需求。
例如,后台任务可能不需要极速运行。某些应用需同时考虑能耗和时间,C 语言在这两方面表现优异。
若要同时节省内存和时间,C、Pascal 和 Go 是合适选择。若考虑时间、能耗和内存三个因素,C 和 Pascal 在节能且内存使用少方面表现最佳。
原文链接:
https://greenlab.di.uminho.pt/wp-content/uploads/2017/10/sleFinal.pdf?utm_source=thenewstack&utm_medium=website&utm_campaign=platform
原文地址: 哪种编程语言最省电?编程质量与耗电多少有关吗?