debian 团队对每一个语言进行了 10 种算法的测试,结果包括了耗时,内存等等数据,并且基本上各语言都是最新版.
但是原始数据看起来不是很直观,我把它汇总做了个柱状图,结果如下.
更多子项的柱状图数据在这里
https://github.com/Rwing/debian-benchmarks-game-visualization
原始数据来自 debian
https://benchmarksgame-team.pages.debian.net/benchmarksgame/
1
beyondex 2021-01-26 14:28:26 +08:00 6
C# 猛,基本都在前 3~4 名普遍比 go 快(内存占用则大得多)。
|
2
wdwwtzy 2021-01-26 14:35:15 +08:00
rust 这么屌吗?
|
3
liprais 2021-01-26 14:36:00 +08:00 36
语言圣战预警,无关人员迅速撤离!
|
4
Austaras 2021-01-26 14:38:11 +08:00
rust 天下第一!
|
5
scr 2021-01-26 14:38:17 +08:00 5
node 这么能打的吗, 比第一名只差 4 倍...
|
6
Leviathann 2021-01-26 14:40:25 +08:00 2
c# 快于 java 快于 go
可以开战了 |
7
baiyi 2021-01-26 14:42:37 +08:00 1
震天的战鼓再次被敲响,有请各语言选手入场
|
8
baiyi 2021-01-26 14:45:04 +08:00
为什么 rust 这么能打,性能高,内存还低
|
9
qwerthhusn 2021-01-26 14:45:04 +08:00
我走上路,来个能打的
|
10
0clickjacking0 2021-01-26 14:50:48 +08:00
不能光看直接比较吧,感觉不是很可靠,就像 1 楼老哥说的,要看内存占比
|
11
0clickjacking0 2021-01-26 14:51:18 +08:00
@0clickjacking0 光看时间,少打了字
|
12
chenqh 2021-01-26 14:52:54 +08:00
如果 py 有 php 那么快就好了
|
13
chenqh 2021-01-26 14:53:19 +08:00
能有 node 那么快就好了
|
14
neoblackcap 2021-01-26 15:00:09 +08:00
@scr node 跟 Java 都是一样有强大 JIT 的语言,性能高没啥奇怪
|
15
janxin 2021-01-26 15:06:05 +08:00
什么版本的 Ruby ?看起来是没 jit 支持的版本,要不然应该是 Python 垫底
|
16
rogwan 2021-01-26 15:08:49 +08:00 via iPhone
一直知道 py 怂,没想到这么怂
|
17
wdwwtzy 2021-01-26 15:09:12 +08:00
@Leviathann 这个应该是共识了吧...开不了战....
|
18
rogwan 2021-01-26 15:09:26 +08:00 via iPhone
erlang 不是很强吗,怎么也这么弱?
|
19
oneonesv 2021-01-26 15:11:23 +08:00
@janxin
64-bit Ubuntu quad core ruby 3.0.0preview1 (2020-09-25 master 0096d2b895) [x86_64-linux] --jit |
20
Evilk 2021-01-26 15:12:32 +08:00
PHP-8 开启 JIT,还是这么慢吗?
|
21
Mohanson 2021-01-26 15:13:14 +08:00 via Android 4
看了下他们用的代码,mandelbrot,第一名的 c++ 代码用了向量指令加多线程,第 3 名 rust 多线程,第 8 的 c 只用了向量指令,再往后的很多老实人,内置基础数据单线程实现。没太大说服力,所以同一梯队内的语言(c,cpp,rust 这种算同一梯队)性能全看写代码的人愿不愿意花时间去扣
|
22
liuxu 2021-01-26 15:18:29 +08:00
rust 天下无敌!
|
23
wtks1 2021-01-26 15:19:36 +08:00 via Android
c#很符合用户感知...
|
25
love 2021-01-26 15:20:31 +08:00 1
我大 JS 果然是脚本语言一哥的存在
|
26
nutting 2021-01-26 15:24:31 +08:00
想学这个 rust,未来能取代 java 吗
|
27
wms 2021-01-26 15:24:54 +08:00 2
所有 C 不是第一的测试都是忽悠人的, 不管他是谁发布的
|
28
kikyous 2021-01-26 15:25:26 +08:00 via Android
node 确实能打
|
30
Jirajine 2021-01-26 15:35:19 +08:00 via Android
@wms 你这样说就过于绝对了,且不说工程上的复杂度导致 c 难以一直使用最优化的实现。一个最简单的例子,c 的 null terminated 字符串。
|
31
hongweiliuruige 2021-01-26 15:35:41 +08:00
node 厉害了
|
32
CommandZi 2021-01-26 15:36:50 +08:00
为什么你这个图表没有 Swift ?
|
33
Flymachine 2021-01-26 15:40:12 +08:00
@nutting rust 是想取代 C++的,他们觉得 C++太复杂了,也不够安全,所以设计了 rust,“更安全的 C++”。然而现实是 C++转 rust 的人少,python 转 rust 的人反而更多。
|
34
henryhu 2021-01-26 15:47:49 +08:00
ruby 3 据说快了 3 倍,不知道这个测试用的 ruby 是哪个版本
|
35
felixin 2021-01-26 15:52:16 +08:00 via Android
|
36
wms 2021-01-26 15:53:43 +08:00
@Jirajine C string 除了 length 比较低效,其他有什么地方低效了? 并且 length 很多情况也不必其他语言的 string 低效, 比如字面量的时候可以用 sizeof
|
37
longaiwp 2021-01-26 15:56:07 +08:00
语言圣战即将展开,无关人等迅速撤离!
|
38
whileFalse 2021-01-26 15:56:15 +08:00 2
感想如下:
1. Rust 好快,竟然比 C 快 2. C#好快,比其他的带 VM 的快辣么多 3. Node 好快,比其他的解释型快辣么多 4. Go 好慢,作为纯编译型连带 VM 的都打不过 5. Python 好慢。 |
39
hws8033856 2021-01-26 16:01:18 +08:00
C#该不会是编译成 native 了吧?这是作弊啊
|
40
wdwwtzy 2021-01-26 16:04:37 +08:00 1
@hws8033856
应该不是,哈哈 .NET SDK 5.0.100 Host Version: 5.0.0; Commit: cf258a14b7 <ServerGarbageCollection>true |
41
no1xsyzy 2021-01-26 16:05:30 +08:00
@Flymachine 其实是 Python 盯着半天 C++ 了,有个更舒服的选择自然转了。(我快了
|
43
zsj950618 2021-01-26 16:13:03 +08:00 via Android 5
标题党了,这和 Debian 没有任何关系,任何人都可以在 pages.debian.net 上新建网页,这是 Debian 的 gitlab 对应的 pages 网址。你总不能说我在 xxx.github.io 上发布了个东西,就说是 GitHub 团队发布的吧。
|
44
favourstreet 2021-01-26 16:20:44 +08:00
@Mohanson 说得在理啊,果然没有什么问题是 SHOW ME CODE 解决不了的。话说只要愿意去扣,c/cpp/rust 这仨甚至可以人为给它们随便安排名次
|
45
Flymachine 2021-01-26 16:27:19 +08:00
@no1xsyzy 哈哈,我们做 C++的其实也苦 C++久矣。所以 Rust 一出我就关注了,但实在是项目不好搬。主要是 Rust 和 C++主要区别就在线程安全性和节省心智精力上,对已有项目提升不大,迁移后可能问题更多。也是头大,只能慢慢先在新项目上试试。其实 GO 也不错,也是 Google 觉得 C++太复杂搞出来的。
|
46
anthongy 2021-01-26 16:30:08 +08:00 3
所有 C 不是第一的测试都是忽悠人的, 不管他是谁发布的
|
47
zjsxwc 2021-01-26 16:32:07 +08:00
pypy 性能可以和 c 媲美吧,应该没有测 pypy 版的 python
|
48
fiveelementgid 2021-01-26 16:35:11 +08:00 via Android
辣鸡 C#,Go 语言(。ノω\。)并发才是最快的!
什么?有实验数据? 我不听我不听( ≧Д≦),肯定是高并发的 go 快 |
49
lewis89 2021-01-26 16:35:51 +08:00
@Flymachine #45 用 C++的场景 基本上跟 GC 无缘了吧,你能忍受 golang 的 GC 停顿,那为什么不转 Java,Java jit 之后吊打 golang,而且又是企业级的 GC
|
50
rogwan 2021-01-26 16:37:47 +08:00
@westoy #29 印象里 WhatsApp 创始人吹过,说 WhatsApp 性能强悍,就是因为是用 erlang 写的
|
51
shuax 2021-01-26 16:37:50 +08:00
C/C++ yyds
|
52
williamherry 2021-01-26 16:37:55 +08:00
可怜的 Ruby
|
53
laike9m 2021-01-26 16:48:16 +08:00 via Android 1
说真的,谈性能还是要看场景
|
54
tigerZhang 2021-01-26 17:04:44 +08:00
rust 有点出乎意料
|
55
BBCCBB 2021-01-26 17:19:18 +08:00
@rogwan 他说的这个性能强应该是 io 密集型场景下, whatsapp 这种基本是 io 密集型的应用, 用 erlang 跑, actor 模型很合适. 异步 io 相比同步 io 效率提升非常明显. 很多推送系统也是在用 erlang. 但要单核跑算法这种, 性能还是不够快的.
就像 python 有了 asyncio, 在 io 密集型应用下也能实现高并发. |
56
Jirajine 2021-01-26 17:21:02 +08:00 via Android
@wms 取子串、取后缀。
再就是由于其糟糕的依赖管理,某些算法 /数据类型在其他语言你可以轻易导入其他人很好的实现,在 c 里你可能就懒得用了。 当然我不是说 c 不行,我只是说 c 并不是**永远**最快的(尤其是 real world c programs )。 |
57
gamexg 2021-01-26 17:25:08 +08:00 via Android
rust 居然比 c 还牛,
go 和 rust 的差距很大啊 |
58
wms 2021-01-26 17:27:28 +08:00
@Jirajine 人这测试性能, 你说算法数据结构实现了,没在 C 里用, 这不是纯杠吗?
取子串、取后缀 没看出 C 比其他语言哪里慢了. |
59
Kilerd 2021-01-26 17:31:30 +08:00
LONG LIVE THE RUST 。
go 比 java 还慢是我没想到的。 python 比 ruby 还快也是我没想到的。 Python 牛逼就完事了。 |
60
ichanne 2021-01-26 17:37:03 +08:00
|
61
SuperMild 2021-01-26 18:02:54 +08:00
Go 果然很能打啊,速度仅比 Java 慢一点点,内存低好多。C# 和 Java 的内存占用太可怕了。
|
62
zealinux 2021-01-26 18:05:36 +08:00
Elixir 会比 Erlang 快多少?
|
63
Jirajine 2021-01-26 18:06:54 +08:00 via Android
@wms 取子串需要添加 null byte,取后缀需要先 count 。
语言的标准实现、库、生态当然会影响你写出程序的性能。就算你强行替换成最优实现,也只是理论上可行。比如标准的 null terminated 字符串性能慢,你改成 fat pointer 的实现,那你调用别人的库 /别人调用你的库都需要额外转换,性能还是不行。 |
64
AndyAO 2021-01-26 18:25:12 +08:00
|
65
AndyAO 2021-01-26 18:27:54 +08:00
Ruby 的优势不在于性能,而在于语法.
所以完全可以跑在其他平台以提高性能,例如 JRuby,相信有 JVM 加持,性能应该会提升很多. |
66
AndyAO 2021-01-26 18:32:31 +08:00
对 C#的性能表示满意,最近正准备开始学 C#.
|
67
no1xsyzy 2021-01-26 18:33:06 +08:00 1
@Flymachine 主要因为 Python 抛弃成本比较小。
go vs rust 也是经典了。go 败在 gc,rust 败在生命周期控制麻烦。 |
69
lysS 2021-01-26 18:37:10 +08:00 1
@Kilerd
@whileFalse 楼主统计只是时间,原始数据 go 比 java 快的项更多,而且内存一般少一半 https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/go.html |
70
starcraft 2021-01-26 18:41:33 +08:00 via Android
这就尴尬了。搞办公室政治 裁 Java 转 go 快圆不下去了。java 真就 yyds 。
|
71
wangkun025 2021-01-26 18:43:33 +08:00
Ruby 哭晕在厕所。
|
73
back0893 2021-01-26 18:56:16 +08:00
php 居然这么快..
|
74
jessun1990 2021-01-26 19:06:02 +08:00
@scr 哈哈,上班看到这句话笑出声。
|
75
daysv 2021-01-26 19:12:50 +08:00
node+rust 挺好
|
76
FightPig 2021-01-26 19:25:23 +08:00
rust 牛不意外 ,不过这个 ruby 应该没用 Ruby 3 Fiber 的,要不 py 是垫底的
|
77
Cbdy 2021-01-26 19:51:42 +08:00 via Android
Go 居然比 Java 都慢,.NET 要崛起了
|
78
sampeng 2021-01-26 19:56:44 +08:00 via iPhone
有啥意义? 500ms 以下的在 99%得场景下是够用了的。
|
79
wjwwq 2021-01-26 20:34:20 +08:00
看了下原始数据的链接,听良心的,各种语言都有,代码也放上去了
|
80
felixin 2021-01-26 20:42:41 +08:00 via Android
|
81
neoblackcap 2021-01-26 22:33:58 +08:00
@rogwan 是能支持大规模的用户,以及扩展好。whatsapp 没记错好像是 yahoo 出来的人搞的,复用以前的经验罢了
|
82
germain 2021-01-26 22:53:20 +08:00
和环境编译时间成反比
|
83
CEBBCAT 2021-01-27 00:38:50 +08:00 via Android
有没有人把编译速度也加入到横评之中?
|
84
12101111 2021-01-27 01:25:31 +08:00
rust/c/c++后端都可以是 llvm,(现在 rust 也有一个 gcc 的后端了,只是处于初级阶段,但是有公司赞助,应该不会弃坑)性能差距就是
1. 标准库. 这一点 C 垫底,rust 只有一个官方的标准库,个人认为代码质量很高,可读性很强,但是一些算法存在优化空间。c++有 3 个主流的标准库( STL )( gcc 的 libstdc++, llvm 的 libc++ 还有 ms 的 vc++),充斥着大写字母,下划线和模板,可读性很差,几乎没人愿意看这玩意。 2. 编译器优化。理论上 rust 因为编译期信息更多,优化会更好,但是仍有一些因 bug 导致较慢。c/c++的优化已经很成熟了。 3. 代码的实现。rust > c++ > c 当然想要对着编译器和 perf 写代码,这三个都可以是最快的,大不了上 intrinsics 和 asm go 的编译速度很快,但 go 编译器的优化并不充分。 C#的编译器 /运行时是.NET 5.0, 单就 C# 7.0 的 Span<T>就能让 Java 的性能再也不可能比得过 C#,Java 天生设计缺陷,为了根本不存在的向前兼容性不改这堆烂摊子,没治了。 Pascal 文物语言,再快也没人用。不知道为什么有几个项目内存占用那么低。 v8 优化到极致的虚拟机,吊打一众脚本语言没任何问题。 虽然 CPython 很拉垮,但是比 PHP 都拉垮就太丢人了。最近看到一个叫 Pyston 的解释器,号称性能更快且兼容 CPython,可惜最新版是闭源的。 |
85
lovestudykid 2021-01-27 06:29:56 +08:00
|
87
crclz 2021-01-27 08:29:04 +08:00 1
即使 C#比 go 慢 20 倍,我也愿意在开发者使用 C#。因为 go 的语言特性美其名曰“简洁”,实际就是缺胳膊少腿。
|
89
hatsuyuki 2021-01-27 09:28:28 +08:00
@Flymachine 感觉 Ruby 转 Rust 的人更多
|
90
yoohohoho 2021-01-27 09:51:05 +08:00
看完两个疑问,node 为啥这么快? golang 为啥这么慢?
|
92
cmdOptionKana 2021-01-27 10:42:42 +08:00
@yoohohoho golang 有 gc 有 runtime,本来就不是 c/c++ 那个级别的,只能和 c#, java 比,看楼主附言 “在 10 项测试中 go 胜出了 7 项,但是在输的其中一项里落后 java 一倍还多,导致整体落后了”,因此可以认为 c#, java, golang 三者大体上差别不算大,属第二梯队,比第三梯队的 php, python 快一大截。
|
93
Myprajna 2021-01-27 10:43:31 +08:00
pascal ?没看错吧,是中学微机课学的那个 pascal 吗?
|
95
h82258652 2021-01-27 10:53:01 +08:00
貌似值得投入一下去学 rust 了
|
96
missdeer 2021-01-27 11:16:55 +08:00
没想到 Go 慢这么多,还以为这些年下来已经优化得很好了呢
除掉 C/C++和 Go,剩下的也就 C#值得用了 |
97
Flymachine 2021-01-27 11:24:04 +08:00
@lewis89 你遗漏了 QT 场景,不是所有的 C++项目都要求压榨性能到极限。遇到不允许使用中间语言的场景,go 这种带 GC 的语言挺不错的。
当然,JAVA 和 C#现在也可编译成本地机器码了。 |
98
Flymachine 2021-01-27 11:30:46 +08:00
@no1xsyzy 我觉得他们的侧重点不一样吧。go 天生就是为了高并发,做高性能网络服务。rust 野心大一些,想替代 C++,场景更底层一些。rust 还有 rust-embedded 分支,搞 Cortex-M 的嵌入式开发尝试。
|
99
lewis89 2021-01-27 11:31:06 +08:00
@Flymachine #97 pyQT 足矣,另外 QT 的 binder 这么多 ,以 C++的上手难度 跟成本,如果不是为了极高的实时性以及性能压榨,完全没有必要上 C++
|
100
MrCard 2021-01-27 11:33:17 +08:00 1
node 好强呀,出乎意料地快。但怎么就是取代不了 python 呢?一样的动态语言,但人工智能都是用 python 来写
|