debian 团队对每一个语言进行了 10 种算法的测试,结果包括了耗时,内存等等数据,并且基本上各语言都是最新版.
但是原始数据看起来不是很直观,我把它汇总做了个柱状图,结果如下.
更多子项的柱状图数据在这里
https://github.com/Rwing/debian-benchmarks-game-visualization
原始数据来自 debian
https://benchmarksgame-team.pages.debian.net/benchmarksgame/
103
SWALLOWW 2021-01-27 11:40:37 +08:00
c#天下无敌,来战,生态,不存在的
|
104
Flymachine 2021-01-27 11:46:45 +08:00
@lewis89 你这因果关系倒了。
1. QT 的 binder 确实很多,但官方开发套件是 C++的,所以是为了 QT 上 C++。 2. 很多时候,是因为成员会 C++,所以上 QT 。毕竟时常也会遇到要压榨性能的项目,或者项目的某一部分需要压榨性能。 话说,pyQT 在很多场景确实足以,我现在内部项目一般就是愉快地用 pyQT 来撸,完全不想用 C++了。不过考虑到未来的饭碗,Rust 和 Go 该研究还得研究啊 |
105
lewis89 2021-01-27 11:51:47 +08:00
@Flymachine #104 不是,需要压榨的 封装好 暴露 C ABI 然后用胶水语言 去黏合就好了.. 没必要为了 C++而 C++ ,因为写 C++ 头疼..
|
106
Jirajine 2021-01-27 11:56:37 +08:00 via Android
@ryd994 难用就会导致你实际中写出的程序变慢。c 最快应该说是理论上最快,实际中影响因素很多。就像我上面说的那个字符串的例子,确实理论上可以自己实现,但因为没有统一的标准,你和其他库交互时还是得转回来,一来一去还是快不起来。
|
107
superrichman 2021-01-27 12:06:57 +08:00 via iPhone
python 跑起来慢没关系,写起来快就好了🐶
|
109
mmdsun 2021-01-27 12:36:10 +08:00 via Android
go 比 Java 慢意料之中。编译器现在没有搞好。Java JIT 优化太强了
|
110
Jirajine 2021-01-27 12:45:15 +08:00
@wms #108 你这样做就把原字符串 mutate 了,其他语言(fat pointer 实现)可以直接取 slice 。
|
111
wangxiaoaer 2021-01-27 13:30:37 +08:00
哎,说起内存,我大 java 真是当仁不让啊,后面看到第一张内存图我就感觉非 java 莫属,果然哈哈哈哈。
Rust 是真的厉害。 |
112
darrh00 2021-01-27 13:49:30 +08:00
这种毫无意义的比较,居然还有人关注,Go 版本的 regex-redux 实现竟然用的是 pcre,做人居然可以这么无底线。。。
|
114
pmispig 2021-01-27 14:13:01 +08:00
这图左右翻转一下就符合我的预期了,这样子有点扯蛋
|
115
ryd994 2021-01-27 14:27:28 +08:00 via Android
@Jirajine 请不要用你的经历来代替所有的情况
Linux 内核是用 C 写的 Windows 内核是用 C++但关键部分都是 C 。C++部分也只是当作有高级数据结构的 C 来用。 谁写 C 只用标准库啊。标准库里没有的就得自己实现? C string 这点小事。内部库早就有现成的实现了。常见的数据结构,比如链表,hash table,都是现成的。 对某些领域来说,简单,可控,比易用更重要。用标准库来说明语言的效率? |
116
Jirajine 2021-01-27 14:59:05 +08:00 via Android
@ryd994 不是所有项目都有一套“内部库”,开发者选择简单、省事、现有的低效实现是很常见的状况。
不否认你说的的 C 的所有优点,简单、直接、可控。理论上的效能 C 也确实拥有最高的上限。但语言的标准、库、生态实实在在地影响实际上的软件性能。比如 ripgrep 和 fd 的性能明显的好于 GNU 的 grep 和 find 。 |
117
ryd994 2021-01-27 15:04:38 +08:00 via Android
@Jirajine 那照你的说法应该 Python 或者 java 最快啊。只要挑其他语言标准库里没有的功能,或者标准库里实现不好的功能。无敌啊,完爆啊。Python 最快,你满意了吗?
|
118
Flymachine 2021-01-27 15:07:32 +08:00
@lewis89 #105 这点我当然了解。内部项目也是这么做的(Qt for python)。但对外的项目,是一整个团队的事,所以没法这么做。懂得都懂。
至于我自己, 早年间我被中间语言坑过,所以我对 C#和 Java 都比较抵触。还好编程语言学习更多的是个人兴趣的事,毕竟编程语言大都是图灵完备语言,功能上没啥差异。所以我自然会更关注和更想学 Rust 与 Go 这种天生就可以编译成机器码的语言。 |
119
ryd994 2021-01-27 15:13:31 +08:00 via Android
@Jirajine 你这明显就是刚入门没多久只会用库的想法。
标准库是工具,不是束缚。大项目里,某些函数自己实现一套是很正常的事。标准库只是一个参考实现。但不可能涵盖所有的需求。 就算你用一个标准库性能逆天的语言,你还是得自己实现一遍。 知道为什么内核都是用 C 吗?贴近硬件,语言结构单纯是一方面。更重要的标准库绝大部分函数都没法用。因为标准库都是以用户空间为前提的。gc ?我不需要啊,我求你别 gc,触发一个 gc 我中断就要爆了。 有的程序要快速实现,那有健全生态的语言当然方便。然而也有很多软件是不计人力成本,只为了挤出最后一滴性能的,那 C 才是最佳选择。 |