来自 debian 团队的各大语言性能测试数据

2021-01-26 14:18:09 +08:00
 Rwing

debian 团队对每一个语言进行了 10 种算法的测试,结果包括了耗时,内存等等数据,并且基本上各语言都是最新版.

但是原始数据看起来不是很直观,我把它汇总做了个柱状图,结果如下.

更多子项的柱状图数据在这里

https://github.com/Rwing/debian-benchmarks-game-visualization

原始数据来自 debian

https://benchmarksgame-team.pages.debian.net/benchmarksgame/

12713 次点击
所在节点    Debian
119 条回复
Huelse
2021-01-27 11:37:10 +08:00
@nutting #26 rust 不是取代 java 的,主要目标应该是 C++和 C
jswh
2021-01-27 11:39:38 +08:00
@MrCard python 简单,数据处理库多,node 没有这些生态
SWALLOWW
2021-01-27 11:40:37 +08:00
c#天下无敌,来战,生态,不存在的
Flymachine
2021-01-27 11:46:45 +08:00
@lewis89 你这因果关系倒了。
1. QT 的 binder 确实很多,但官方开发套件是 C++的,所以是为了 QT 上 C++。
2. 很多时候,是因为成员会 C++,所以上 QT 。毕竟时常也会遇到要压榨性能的项目,或者项目的某一部分需要压榨性能。

话说,pyQT 在很多场景确实足以,我现在内部项目一般就是愉快地用 pyQT 来撸,完全不想用 C++了。不过考虑到未来的饭碗,Rust 和 Go 该研究还得研究啊
lewis89
2021-01-27 11:51:47 +08:00
@Flymachine #104 不是,需要压榨的 封装好 暴露 C ABI 然后用胶水语言 去黏合就好了.. 没必要为了 C++而 C++ ,因为写 C++ 头疼..
Jirajine
2021-01-27 11:56:37 +08:00
@ryd994 难用就会导致你实际中写出的程序变慢。c 最快应该说是理论上最快,实际中影响因素很多。就像我上面说的那个字符串的例子,确实理论上可以自己实现,但因为没有统一的标准,你和其他库交互时还是得转回来,一来一去还是快不起来。
superrichman
2021-01-27 12:06:57 +08:00
python 跑起来慢没关系,写起来快就好了🐶
wms
2021-01-27 12:30:03 +08:00
@Jirajine 你举的例子本身就是有问题的, 取子串 C 只需要在最后赋值一个 0, 而使用其他语言照样要赋值一个 size
mmdsun
2021-01-27 12:36:10 +08:00
go 比 Java 慢意料之中。编译器现在没有搞好。Java JIT 优化太强了
Jirajine
2021-01-27 12:45:15 +08:00
@wms #108 你这样做就把原字符串 mutate 了,其他语言(fat pointer 实现)可以直接取 slice 。
wangxiaoaer
2021-01-27 13:30:37 +08:00
哎,说起内存,我大 java 真是当仁不让啊,后面看到第一张内存图我就感觉非 java 莫属,果然哈哈哈哈。

Rust 是真的厉害。
darrh00
2021-01-27 13:49:30 +08:00
这种毫无意义的比较,居然还有人关注,Go 版本的 regex-redux 实现竟然用的是 pcre,做人居然可以这么无底线。。。
wms
2021-01-27 14:04:32 +08:00
@Jirajine #110 fat pointer 不是只有 rust 有, C 同样可以用
pmispig
2021-01-27 14:13:01 +08:00
这图左右翻转一下就符合我的预期了,这样子有点扯蛋
ryd994
2021-01-27 14:27:28 +08:00
@Jirajine 请不要用你的经历来代替所有的情况
Linux 内核是用 C 写的
Windows 内核是用 C++但关键部分都是 C 。C++部分也只是当作有高级数据结构的 C 来用。
谁写 C 只用标准库啊。标准库里没有的就得自己实现?
C string 这点小事。内部库早就有现成的实现了。常见的数据结构,比如链表,hash table,都是现成的。

对某些领域来说,简单,可控,比易用更重要。用标准库来说明语言的效率?
Jirajine
2021-01-27 14:59:05 +08:00
@ryd994 不是所有项目都有一套“内部库”,开发者选择简单、省事、现有的低效实现是很常见的状况。
不否认你说的的 C 的所有优点,简单、直接、可控。理论上的效能 C 也确实拥有最高的上限。但语言的标准、库、生态实实在在地影响实际上的软件性能。比如 ripgrep 和 fd 的性能明显的好于 GNU 的 grep 和 find 。
ryd994
2021-01-27 15:04:38 +08:00
@Jirajine 那照你的说法应该 Python 或者 java 最快啊。只要挑其他语言标准库里没有的功能,或者标准库里实现不好的功能。无敌啊,完爆啊。Python 最快,你满意了吗?
Flymachine
2021-01-27 15:07:32 +08:00
@lewis89 #105 这点我当然了解。内部项目也是这么做的(Qt for python)。但对外的项目,是一整个团队的事,所以没法这么做。懂得都懂。

至于我自己,
早年间我被中间语言坑过,所以我对 C#和 Java 都比较抵触。还好编程语言学习更多的是个人兴趣的事,毕竟编程语言大都是图灵完备语言,功能上没啥差异。所以我自然会更关注和更想学 Rust 与 Go 这种天生就可以编译成机器码的语言。
ryd994
2021-01-27 15:13:31 +08:00
@Jirajine 你这明显就是刚入门没多久只会用库的想法。
标准库是工具,不是束缚。大项目里,某些函数自己实现一套是很正常的事。标准库只是一个参考实现。但不可能涵盖所有的需求。
就算你用一个标准库性能逆天的语言,你还是得自己实现一遍。

知道为什么内核都是用 C 吗?贴近硬件,语言结构单纯是一方面。更重要的标准库绝大部分函数都没法用。因为标准库都是以用户空间为前提的。gc ?我不需要啊,我求你别 gc,触发一个 gc 我中断就要爆了。

有的程序要快速实现,那有健全生态的语言当然方便。然而也有很多软件是不计人力成本,只为了挤出最后一滴性能的,那 C 才是最佳选择。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/748518

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX