102
icyalala 2022-06-27 18:32:43 +08:00
|
104
minsheng 2022-06-27 19:24:53 +08:00
这里有具体的子任务 Swift vs Java: https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/swift.html
Swift 慢的原因很简单,所有涉及堆分配的操作(包括但不限于 class 、indirect enum ),都要使用引用计数,引用计数必须是一个原子操作,在 Intel 处理器上慢很多( M1 、A14 的情况会好不少)。所以你们看上面那个页面,大部分的情况下 Swift 对 Java 就是 native 对 bytecode 的性能,Swift 跟 C 没啥区别,但到最后的二叉树……跪惨了。 这个问题要解决,要不然就直接用裸指针,不是不能写,写出来也不一定比 C 难维护,不过确实有点耍赖的感觉。要不然就等 Swift 的所有权啥的继续推进,然后尽可能优化掉不必要的引用计数开销。 |
105
Mark24 2022-06-27 19:35:30 +08:00
|
106
Mark24 2022-06-27 19:36:10 +08:00
|
107
Mark24 2022-06-27 19:37:06 +08:00
|
108
musi 2022-06-27 20:11:39 +08:00
node 显然是 v8 优化的好
|
112
icyalala 2022-06-27 20:26:01 +08:00 via iPhone
@Mark24 你评测的这段代码太小了,如果非要对这段 kernel code benchmark ,那最好在内部取时间,而不是测试 binary 的运行时间,不然系统库和运行时初始化时间都被算进来了。然后不能写死输入,要让外部传入,不然就会出现这类编译期直接得到结果的问题。
|
114
Trim21 2022-06-27 20:35:48 +08:00 via Android
@fgwmlhdkkkw 图里有带 jit 的 python pypy (
|
115
Buges 2022-06-27 20:44:14 +08:00
这测试不能完全体现常用场景,go 不如 haskell ghc ,pypy 不如 php 。
|
116
DOLLOR 2022-06-27 20:45:11 +08:00 1
@fgwmlhdkkkw
感觉你们这些喷 JS 的,都是在反向奶。JS 从诞生到现在都被喷,结果反而越混越好,反观…… |
117
mxT52CRuqR6o5 2022-06-27 21:15:30 +08:00 via Android
@qrobot electron 也算吗?
|
118
nichijou 2022-06-27 21:20:43 +08:00
@abersheeran 这里面 WordPress 占多少。。
|
119
timothyye 2022-06-27 21:28:11 +08:00 via Android
Rust 牛逼
|
120
u823tg 2022-06-27 22:07:54 +08:00
@DOLLOR #116 两个设计上都有缺陷,在各自领域都是一霸。 没啥可比较的。 性能方面 js 作为浏览器指定的语言,不优化的没法用。web 端也发展不起。 python 没这方面要求,发挥胶水语言特性就好。
|
121
koebehshian 2022-06-27 22:36:45 +08:00
Lua 也太慢了
|
122
jeffh 2022-06-27 22:38:12 +08:00
想不到的是 nodejs 竟然比 ruby 和 python 快
|
123
lysS 2022-06-27 23:25:48 +08:00
这个制图真的搞,大多数定眼一看肯定是看 time, 真正排名却是乱序的、时间内存权重是 4:1
|
124
ToBeHacker 2022-06-28 00:08:47 +08:00
Python 往往只是调用层,单看这个其实没啥意义
|
125
AX5N 2022-06-28 00:14:27 +08:00
主流语言里,除了 java 以外,其余都跟我的认知差不多,我感觉 java 还要稍微快一些的。
|
126
llsquaer 2022-06-28 00:26:53 +08:00
这个图影响我写 python 了么?
|
127
silvernoo 2022-06-28 01:39:32 +08:00 1
难怪各大游戏引擎喜欢 C#
|
128
twl007 2022-06-28 06:09:50 +08:00 via iPhone
@qrobot 大部分项目开发效率远比运行效率重要的多 如果 Discord 一开始用 rust 开发 估计东西还没搞定市场都被抢走了
也就是现在地位稳固了才有精力投入到重构里面去 根本原因是因为业务大了有了性能要求才去用 rust 而不是单纯的因为 rust 表现好就去用 rust 另外 go 也可以很快 但是取决于你花多大的精力去优化了 |
129
MrKrabs 2022-06-28 06:33:20 +08:00
swift 完全兼容 c (除了宏之类的),当然可以接近 c 的效率,纯粹写代码的人的问题
|
130
zhanghua0 2022-06-28 08:26:35 +08:00 via Android
Python 的 Rank 不是倒数第一就算成功(
|
131
SJ2050cn 2022-06-28 09:17:05 +08:00
知道 julia 快,没想到这么快。
|
133
Guesser 2022-06-28 09:40:52 +08:00
计算机语言测试游戏可视化排行,单单一个维度就能决定一个语言性能是否太草率了?
|
134
cmdOptionKana 2022-06-28 10:00:55 +08:00
这样看 C# 在好用易用(至少有 GC )的语言中效率是最高的,可惜生态还是比不上 Java 。
|
135
yazoox 2022-06-28 10:14:14 +08:00
不是吧,lua 这么慢的么?那为啥 neovim 推荐使用 lua 写插件?是编译后的 lua ,不是解释执行的?和这个表格里面的速度不一样?
|
136
lilith01 2022-06-28 10:15:47 +08:00
kotlin 呢
|
137
netnr 2022-06-28 10:20:35 +08:00
@INCerry #51 新建控制台程序( .net6 .net7 ),添加属性 <IlcDisableReflection>true</IlcDisableReflection> 打包裁剪单文件还是 11M ,姿势不对?
|
138
silkriver 2022-06-28 10:26:31 +08:00
应该说是语言的实现,而非语言
|
139
KeyboardManS 2022-06-28 10:30:14 +08:00
为什么 Fortran 这么拉?这玩意儿不是以速度著称的吗?居然还干不过 C#
|
140
fengjianxinghun 2022-06-28 10:33:19 +08:00
@KeyboardManS 这个测试 c#作弊,nobody 的数学计算测试项就 c#用的 AVX simd ,rust 就是硬算
··· using System; using System.Runtime.CompilerServices; using System.Runtime.Intrinsics; using System.Runtime.Intrinsics.X86; using static System.Runtime.CompilerServices.MethodImplOptions; using V256d = System.Runtime.Intrinsics.Vector256<double>; public static unsafe class Net60_NBody_AVX_9_3b { [MethodImpl(AggressiveOptimization | AggressiveInlining)] private static V256d Square(V256d x) => Avx.Multiply(x, x); [MethodImpl(AggressiveOptimization | AggressiveInlining)] private static V256d Permute2x128AndBlend(V256d t0, V256d t1) => Avx.Add(Avx.Permute2x128(t0, t1, 0b10_0001), Avx.Blend(t0, t1, 0b1100)); [MethodImpl(AggressiveOptimization | AggressiveInlining)][SkipLocalsInit] private static void InitDiffs(V256d* positions, V256d* rsqrts) { V256d* r = rsqrts, p = positions; for (int i = 1, k = 0; i < 5; ++i) { V256d pi = p[i]; for (int j = 0; j < i; ++j, ++k) { V256d pj = p[j]; r[k] = Avx.Subtract(pi, pj); } } } ··· |
141
fengjianxinghun 2022-06-28 10:34:19 +08:00
|
142
INCerry 2022-06-28 10:37:08 +08:00
> 使用 avx 的 c#
> https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-csharpcore-9.html > 直接硬算的 Rust > https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-rust-6.html @fengjianxinghun 这个应该看汇编代码,rust 可能已经优化成 SIMD 了 C# 这边也有 JIT 优化,但是它只在分层编译情况下。 |
143
wangyzj 2022-06-28 10:38:53 +08:00
你这个要看具体测试方法是啥把
|
144
tairan2006 2022-06-28 10:39:17 +08:00
python 最近在提速了,未来可期,战一战 nodejs 应该还是没问题的
另外就是移除 GIL 的提案看什么时候合入主分支。 |
146
fengjianxinghun 2022-06-28 10:42:56 +08:00
@INCerry c#人是 avx 手工优化。。比你自动 simd 不知道高那里去了。
|
147
INCerry 2022-06-28 10:43:44 +08:00 1
@fengjianxinghun 那有什么问题呢?有些语言还没办法用 avx 手工优化呢
|
148
INCerry 2022-06-28 10:44:34 +08:00
@fengjianxinghun 你也可以给 rust 手工优化试试 看看能不能超过 C++
|
149
INCerry 2022-06-28 10:49:19 +08:00
> @fengjianxinghun 你也可以给 rust 手工优化试试 看看能不能超过 C++
@fengjianxinghun 看了下 rust 已经用了手工优化的版本了 https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-rust-9.html |
150
fengjianxinghun 2022-06-28 10:51:00 +08:00
@INCerry 这个层面上语言本身影响就很小了,就是一点抽象开销。
|
151
raptor 2022-06-28 10:52:04 +08:00
这种事情自己看看开心就好。
2011 年的时候 Milo 老师就拿一个光线追踪程序用几种语言实现后对比过性能,我也试着写了几个语言版本的实现,数据与这个图出入还挺大的。有兴趣可以去看看他当年的文章,当时就已经证实了.net 的性能好于 java ,接近 C++。 都已经过去超过十年了…… 那位拿 chrome 举例的真是很可笑,你是开发 chrome 的吗?基于 chrome 开发和开发 chrome 是一回事吗? 大家不过都是做 CRUD 的,跟数据库和网络的性能相比,语言的那点性能差距在 99%的情况下是可以忽略不计的。 真追求性能的人根本不会在这边讨论什么的,直接 C/C++上就是了,关键环节还要用汇编,考虑 Rust 的都很少(因为如果最后为了性能用了很多 unsafe ,还不如直接用 C++),至于 C#和 JAVA 这种可能受 GC 影响的语言根本不在考虑范围,即使性能差距不大。 |
152
INCerry 2022-06-28 10:53:51 +08:00
@netnr
我特意试了一下,你看看是不是漏引用了 nuget 包 ```xml <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net7.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> <IlcDisableReflection>true</IlcDisableReflection> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.DotNet.ILCompiler" Version="7.0.0-*" /> </ItemGroup> </Project> ``` 然后 `dotnet publish -c Release -r win-x64` 发布出来的大小: IlcDisableReflection.exe 1.5MB |
153
pkoukk 2022-06-28 11:08:55 +08:00
看来我是时候捡起来 C#玩玩了
|
154
INCerry 2022-06-28 11:12:21 +08:00 1
> 这个层面上语言本身影响就很小了,就是一点抽象开销。
@fengjianxinghun 所以不存在啥作弊不作弊 我看 C++ Rust C# 都用上了 SIMD |
155
ecloud 2022-06-28 11:35:48 +08:00
这种测试并不公平,没有体现到每个语言的业务使用场景。比如上面有人说到 lua 就有只少 2 种运行模式; c++这种东西有 boost,qt 和 mfc 等多种不同的风格; java 更是复杂,spring 和各种商业 J2EE 实现都有很大差别。样板程序的复杂度不足的话,不足以说明问题
|
156
ecloud 2022-06-28 11:39:19 +08:00
@KeyboardManS Fortran 要想快得用 intel 编译器,很贵的。不知道它这个测试用的啥编译器
|
157
Leviathann 2022-06-28 11:42:33 +08:00
|
158
netnr 2022-06-28 11:45:52 +08:00
@INCerry #152 没有成功
./dotnet new console -n Netnr.Native -o demo cd demo ../dotnet publish -c Release -r win-x64 -p:PublishSingleFile=true -p:PublishTrimmed=true 以上打包出来 11M ,你说的是最终单文件? |
159
LawlietZ 2022-06-28 12:19:00 +08:00
牛逼
|
160
INCerry 2022-06-28 12:32:32 +08:00
@netnr 是啊 你创建一个项目 然后把项目文件按照我那样改一下 最后用我提到的命令 打包出来的二进制可执行文件就 1.5MB
你需要引用 Microsoft.DotNet.ILCompiler 这个 NuGet 包 |
161
byzf 2022-06-28 12:53:48 +08:00
根据使用体验来说我感觉 rust 还是取代不了 cpp 的。写起来没有感觉比 cpp 快。不过 rust 确实只要编译通过了程序就能跑,而 cpp 经常不行。
go/java/.net 符合预期。唯一出乎意料的 swift 。 python 、php 、lua 本质上速度已经不重要了,就看接的库多不多,速度取决于库的速度。 node 。。本质上用 node 的人不会去和其他的语言比,不用 node 的人也不可能去用 node 。 |
165
fifa899 2022-06-28 15:18:08 +08:00
JAVA ! YYDS!
|
169
yejinmo 2022-06-28 16:35:20 +08:00
应该再结合开发效率做一个排名
|
170
MiketsuSmasher 2022-06-28 17:09:39 +08:00
Python 3 比 Ruby 还慢,这个是我没想到的
|
171
daokedao 2022-06-28 17:31:19 +08:00
Rust 太难了,导致 Servo 难产到现在
|
172
YUyu101 2022-06-28 22:17:28 +08:00
nodejs 性能这个样子已经可以了,开发效率比 goc#java 要快多了,web 全栈桌面 electron ,移动端 webview 凑活,也就数据分析机器学习方面打不过 python 的生态了,假以时日有望一统江湖啊。
|
174
featureoverload 2022-06-29 09:36:47 +08:00
有没有搞一个 [各大语言在终端输出一个 "Hello World!"] 的从零文件 coding 速度排名?
我先来: ```shell $ python3 -c "print('Hello World!')" ``` |
175
featureoverload 2022-06-29 09:37:30 +08:00
@featureoverload "从零文件开始 coding"
|
176
KeyboardManS 2022-06-29 09:43:57 +08:00
@ecloud 原来如此 涨姿势了
|
177
x1aoYao 2022-06-29 10:40:52 +08:00
Swift 的 class 用的 Arc 要原子计数,Array/Map/Set 这些 CoW 类型也是要原子操作,不管你跨不跨线程都是,这能快得起来吗?
上面有人提到 Apple 的 M1 为原子操作的优化非常大,所以 Swift 跑在 M1 Mac 上面还算好。不过根本还是要让没有 send 到其他线程的就用 Rc 就好。 |
178
hhjj3388 2022-06-29 11:25:20 +08:00
@fengjianxinghun ``你一个#9 一个#6 ····rust#9 的一样开了 simd
|
180
ecloud 2022-06-29 13:45:27 +08:00
@hhjj3388 你看一下 9 楼,不同的库还真不一样。再举个例子,python 连 redis ,装不装 hiredis 差别很大。当然你可以理解这为作弊,但是人家在生产中就是这样用的。另外就算 hiredis 本身不同版本速度就有区别,新版的就是比老板的慢一丢丢。再比如 FIX 库,有的库给你穷举所有标签,几千个元素 map 下来比你硬编码慢一个数量级。同样是排序,你用 boost 现成的和自己硬编码一个链表速度当然不一样。
|
181
v1200347 2022-10-29 16:15:37 +08:00
@ragnaroks 天真 dotnet7 只会更进一步 他们源码都有 你自己去看批判呗 debian 团队大佬写的测试
|
182
v1200347 2022-10-29 16:41:12 +08:00
@icyalala 知名个嘚 2.4k 的赞也算知名 而且直觉看这些测试全是些没什么鸭梨的东西 根本测不出多少差距 基本全是很小的误差 除了有些语言哪方面确实不行导致毫秒数多 我随便选个测试 本机比了下 java c# go 几乎就没什么差别 一会 1ms 一会 2ms 3ms 的 有什么意义?
|