
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 C# 猛,基本都在前 3~4 名普遍比 go 快(内存占用则大得多)。 |
2 wdwwtzy 2021-01-26 14:35:15 +08:00 rust 这么吗? |
3 F281M6Dh8DXpD1g2 2021-01-26 14:36:00 +08:00 语言圣战预警,无关人员迅速撤离! |
4 Austaras 2021-01-26 14:38:11 +08:00 rust 天下第一! |
5 scr 2021-01-26 14:38:17 +08:00 node 这么能打的吗, 比第一名只差 4 倍... |
6 Leviathann 2021-01-26 14:40:25 +08:00 c# 快于 java 快于 go 可以开战了 |
7 baiyi 2021-01-26 14:42:37 +08:00 震天的战鼓再次被敲响,有请各语言选手入场 |
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 simple2025 2021-01-26 14:52:54 +08:00 如果 py 有 php 那么快就好了 |
13 simple2025 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 看了下他们用的代码,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 我大 JS 果然是脚本语言一哥的存在 |
26 nutting 2021-01-26 15:24:31 +08:00 想学这个 rust,未来能取代 java 吗 |
27 wms 2021-01-26 15:24:54 +08:00 所有 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 感想如下: 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 @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++ 了,有个更舒服的选择自然转了。(我快了 |
42 no1xsyzy 2021-01-26 16:06:38 +08:00/span> @felixin Haskell 的背景是偏学术界的…… 哲学系教授玩 Haskell 比我溜( pandoc 太好用了 |
43 zsj950618 2021-01-26 16:13:03 +08:00 via Android 标题党了,这和 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 所有 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 momo1999 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 说真的,谈性能还是要看场景 |
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 @Flymachine 主要因为 Python 抛弃成本比较小。 go vs rust 也是经典了。go 败在 gc,rust 败在生命周期控制麻烦。 |
69 lysS 2021-01-26 18:37:10 +08:00 @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 即使 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 node 好强呀,出乎意料地快。但怎么就是取代不了 python 呢?一样的动态语言,但人工智能都是用 python 来写 |