• 请不要在回答技术问题时复制粘贴 AI 生成的内容
wdwwtzy
V2EX  ›  程序员

这个各大语言性能测试结果挺有意思

  •  3
     
  •   wdwwtzy · Jun 27, 2022 · 23578 views
    This topic created in 1429 days ago, the information mentioned may be changed or developed.
    182 replies    2022-10-29 16:50:11 +08:00
    1  2  
    encro
        101
    encro  
       Jun 27, 2022
    @Chad0000


    c# runtime 决定了一切。
    icyalala
        102
    icyalala  
       Jun 27, 2022
    @Mark24 你这个简单到根本不能用啊。。
    想要作弊的话 C++ 直接编译时就出来了: https://godbolt.org/z/8WWYd6zvd
    Mark24
        103
    Mark24  
       Jun 27, 2022
    @icyalala 计算密集型跑。为啥要作弊?作弊还有什么意义。 其他语言也可以直接填结果
    minsheng
        104
    minsheng  
       Jun 27, 2022
    这里有具体的子任务 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 的所有权啥的继续推进,然后尽可能优化掉不必要的引用计数开销。
    Mark24
        105
    Mark24  
       Jun 27, 2022
    @icyalala 这个网站里不加 -O 才对吧。编译的应该是函数本身。 我的测试用的无参数。

    https://imgur.com/a/tKR7eaX
    Mark24
        106
    Mark24  
       Jun 27, 2022
    @icyalala 这个网站里不加 -O 才对吧。编译的应该是函数本身。 我的测试用的无参数。

    https://imgur.com/s0o4f0c
    Mark24
        107
    Mark24  
       Jun 27, 2022
    蛋疼。这个发图真是头大。

    无参数 GCC 编译。

    musi
        108
    musi  
       Jun 27, 2022
    node 显然是 v8 优化的好
    icyalala
        109
    icyalala  
       Jun 27, 2022 via iPhone
    @musi 对 C/C++ 来说,讨论语言性能不开编译优化是没意义的
    icyalala
        110
    icyalala  
       Jun 27, 2022 via iPhone
    icyalala
        111
    icyalala  
       Jun 27, 2022 via iPhone
    @Mark24 回错人了… 手机点起来不方便
    icyalala
        112
    icyalala  
       Jun 27, 2022 via iPhone
    @Mark24 你评测的这段代码太小了,如果非要对这段 kernel code benchmark ,那最好在内部取时间,而不是测试 binary 的运行时间,不然系统库和运行时初始化时间都被算进来了。然后不能写死输入,要让外部传入,不然就会出现这类编译期直接得到结果的问题。
    Cyshall
        113
    Cyshall  
       Jun 27, 2022 via iPhone
    @Protocol c++牛逼还需要喊?这不是大家默认的?如果掉出前三你看看大家不喷出💩
    Trim21
        114
    Trim21  
       Jun 27, 2022 via Android
    @fgwmlhdkkkw 图里有带 jit 的 python pypy (
    Buges
        115
    Buges  
       Jun 27, 2022
    这测试不能完全体现常用场景,go 不如 haskell ghc ,pypy 不如 php 。
    AV1
        116
    AV1  
       Jun 27, 2022   ❤️ 1
    @fgwmlhdkkkw
    感觉你们这些喷 JS 的,都是在反向奶。JS 从诞生到现在都被喷,结果反而越混越好,反观……
    mxT52CRuqR6o5
        117
    mxT52CRuqR6o5  
       Jun 27, 2022 via Android
    @qrobot electron 也算吗?
    nichijou
        118
    nichijou  
       Jun 27, 2022
    @abersheeran 这里面 WordPress 占多少。。
    timothyye
        119
    timothyye  
       Jun 27, 2022 via Android
    Rust 牛逼
    u823tg
        120
    u823tg  
       Jun 27, 2022
    @DOLLOR #116 两个设计上都有缺陷,在各自领域都是一霸。 没啥可比较的。 性能方面 js 作为浏览器指定的语言,不优化的没法用。web 端也发展不起。 python 没这方面要求,发挥胶水语言特性就好。
    koebehshian
        121
    koebehshian  
       Jun 27, 2022
    Lua 也太慢了
    jeffh
        122
    jeffh  
       Jun 27, 2022
    想不到的是 nodejs 竟然比 ruby 和 python 快
    lysS
        123
    lysS  
       Jun 27, 2022
    这个制图真的搞,大多数定眼一看肯定是看 time, 真正排名却是乱序的、时间内存权重是 4:1
    ToBeHacker
        124
    ToBeHacker  
       Jun 28, 2022
    Python 往往只是调用层,单看这个其实没啥意义
    AX5N
        125
    AX5N  
       Jun 28, 2022
    主流语言里,除了 java 以外,其余都跟我的认知差不多,我感觉 java 还要稍微快一些的。
    llsquaer
        126
    llsquaer  
       Jun 28, 2022
    这个图影响我写 python 了么?
    silvernoo
        127
    silvernoo  
       Jun 28, 2022   ❤️ 1
    难怪各大游戏引擎喜欢 C#
    twl007
        128
    twl007  
       Jun 28, 2022 via iPhone
    @qrobot 大部分项目开发效率远比运行效率重要的多 如果 Discord 一开始用 rust 开发 估计东西还没搞定市场都被抢走了

    也就是现在地位稳固了才有精力投入到重构里面去 根本原因是因为业务大了有了性能要求才去用 rust 而不是单纯的因为 rust 表现好就去用 rust

    另外 go 也可以很快 但是取决于你花多大的精力去优化了
    MrKrabs
        129
    MrKrabs  
       Jun 28, 2022
    swift 完全兼容 c (除了宏之类的),当然可以接近 c 的效率,纯粹写代码的人的问题
    zhanghua0
        130
    zhanghua0  
       Jun 28, 2022 via Android
    Python 的 Rank 不是倒数第一就算成功(
    SJ2050cn
        131
    SJ2050cn  
       Jun 28, 2022
    知道 julia 快,没想到这么快。
    newmlp
        132
    newmlp  
       Jun 28, 2022
    @tramm 能有 20%就不错了,某些特殊场景能用到指令加速的,差个几百倍都很轻松
    Guesser
        133
    Guesser  
       Jun 28, 2022
    计算机语言测试游戏可视化排行,单单一个维度就能决定一个语言性能是否太草率了?
    cmdOptionKana
        134
    cmdOptionKana  
       Jun 28, 2022
    这样看 C# 在好用易用(至少有 GC )的语言中效率是最高的,可惜生态还是比不上 Java 。
    yazoox
        135
    yazoox  
       Jun 28, 2022
    不是吧,lua 这么慢的么?那为啥 neovim 推荐使用 lua 写插件?是编译后的 lua ,不是解释执行的?和这个表格里面的速度不一样?
    lilith01
        136
    lilith01  
       Jun 28, 2022
    kotlin 呢
    netnr
        137
    netnr  
       Jun 28, 2022
    @INCerry #51 新建控制台程序( .net6 .net7 ),添加属性 <IlcDisableReflection>true</IlcDisableReflection> 打包裁剪单文件还是 11M ,姿势不对?
    silkriver
        138
    silkriver  
       Jun 28, 2022
    应该说是语言的实现,而非语言
    KeyboardManS
        139
    KeyboardManS  
       Jun 28, 2022
    为什么 Fortran 这么拉?这玩意儿不是以速度著称的吗?居然还干不过 C#
    fengjianxinghun
        140
    fengjianxinghun  
       Jun 28, 2022
    @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);
    }
    }
    }
    ···
    INCerry
        142
    INCerry  
       Jun 28, 2022
    > 使用 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 优化,但是它只在分层编译情况下。
    wangyzj
        143
    wangyzj  
       Jun 28, 2022
    你这个要看具体测试方法是啥把
    tairan2006
        144
    tairan2006  
       Jun 28, 2022
    python 最近在提速了,未来可期,战一战 nodejs 应该还是没问题的

    另外就是移除 GIL 的提案看什么时候合入主分支。
    leexy
        145
    leexy  
       Jun 28, 2022
    @Protocol #71 因为 C++ 牛逼是意料之中的事儿
    fengjianxinghun
        146
    fengjianxinghun  
       Jun 28, 2022
    @INCerry c#人是 avx 手工优化。。比你自动 simd 不知道高那里去了。
    INCerry
        147
    INCerry  
       Jun 28, 2022   ❤️ 1
    @fengjianxinghun 那有什么问题呢?有些语言还没办法用 avx 手工优化呢
    INCerry
        148
    INCerry  
       Jun 28, 2022
    @fengjianxinghun 你也可以给 rust 手工优化试试 看看能不能超过 C++
    INCerry
        149
    INCerry  
       Jun 28, 2022
    > @fengjianxinghun 你也可以给 rust 手工优化试试 看看能不能超过 C++

    @fengjianxinghun 看了下 rust 已经用了手工优化的版本了
    https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-rust-9.html
    fengjianxinghun
        150
    fengjianxinghun  
       Jun 28, 2022
    @INCerry 这个层面上语言本身影响就很小了,就是一点抽象开销。
    raptor
        151
    raptor  
       Jun 28, 2022
    这种事情自己看看开心就好。

    2011 年的时候 Milo 老师就拿一个光线追踪程序用几种语言实现后对比过性能,我也试着写了几个语言版本的实现,数据与这个图出入还挺大的。有兴趣可以去看看他当年的文章,当时就已经证实了.net 的性能好于 java ,接近 C++。

    都已经过去超过十年了……

    那位拿 chrome 举例的真是很可笑,你是开发 chrome 的吗?基于 chrome 开发和开发 chrome 是一回事吗?

    大家不过都是做 CRUD 的,跟数据库和网络的性能相比,语言的那点性能差距在 99%的情况下是可以忽略不计的。

    真追求性能的人根本不会在这边讨论什么的,直接 C/C++上就是了,关键环节还要用汇编,考虑 Rust 的都很少(因为如果最后为了性能用了很多 unsafe ,还不如直接用 C++),至于 C#和 JAVA 这种可能受 GC 影响的语言根本不在考虑范围,即使性能差距不大。
    INCerry
        152
    INCerry  
       Jun 28, 2022
    @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
    pkoukk
        153
    pkoukk  
       Jun 28, 2022
    看来我是时候捡起来 C#玩玩了
    INCerry
        154
    INCerry  
       Jun 28, 2022   ❤️ 1
    > 这个层面上语言本身影响就很小了,就是一点抽象开销。
    @fengjianxinghun 所以不存在啥作弊不作弊 我看 C++ Rust C# 都用上了 SIMD
    ecloud
        155
    ecloud  
       Jun 28, 2022
    这种测试并不公平,没有体现到每个语言的业务使用场景。比如上面有人说到 lua 就有只少 2 种运行模式; c++这种东西有 boost,qt 和 mfc 等多种不同的风格; java 更是复杂,spring 和各种商业 J2EE 实现都有很大差别。样板程序的复杂度不足的话,不足以说明问题
    ecloud
        156
    ecloud  
       Jun 28, 2022
    @KeyboardManS Fortran 要想快得用 intel 编译器,很贵的。不知道它这个测试用的啥编译器
    Leviathann
        157
    Leviathann  
       Jun 28, 2022
    @lilith01 几乎和 java 一致
    @twl007 discord 不是跟国内一帮跟风的一样用 go 写业务,业务是用 elixir 写的,go 是写的中间件,由于 gc 的问题换成了 rust
    netnr
        158
    netnr  
       Jun 28, 2022
    @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 ,你说的是最终单文件?
    LawlietZ
        159
    LawlietZ  
       Jun 28, 2022
    牛逼
    INCerry
        160
    INCerry  
       Jun 28, 2022
    @netnr 是啊 你创建一个项目 然后把项目文件按照我那样改一下 最后用我提到的命令 打包出来的二进制可执行文件就 1.5MB
    你需要引用 Microsoft.DotNet.ILCompiler 这个 NuGet 包
    byzf
        161
    byzf  
       Jun 28, 2022
    根据使用体验来说我感觉 rust 还是取代不了 cpp 的。写起来没有感觉比 cpp 快。不过 rust 确实只要编译通过了程序就能跑,而 cpp 经常不行。

    go/java/.net 符合预期。唯一出乎意料的 swift 。

    python 、php 、lua 本质上速度已经不重要了,就看接的库多不多,速度取决于库的速度。

    node 。。本质上用 node 的人不会去和其他的语言比,不用 node 的人也不可能去用 node 。
    novolunt
        162
    novolunt  
       Jun 28, 2022
    @byzf 速度取决于库的速度 yyds
    timothyye
        163
    timothyye  
       Jun 28, 2022 via Android
    @Protocol C++已经是性能基准了,不用喊牛逼了…
    Wanex
        164
    Wanex  
       Jun 28, 2022
    @jeffh js 本来就比 python 和 ruby 快啊,python 慢不是众所周知的吗
    fifa899
        165
    fifa899  
       Jun 28, 2022
    JAVA ! YYDS!
    xtinput
        166
    xtinput  
       Jun 28, 2022
    @MrKrabs swift 的自动引用计数开销还是要算上的
    icyalala
        167
    icyalala  
       Jun 28, 2022
    @ecloud Intel 那套编译器已经免费了,改名叫 oneAPI toolkit
    MrKrabs
        168
    MrKrabs  
       Jun 28, 2022
    @xtinput 又没禁止用指针
    yejinmo
        169
    yejinmo  
       Jun 28, 2022
    应该再结合开发效率做一个排名
    MiketsuSmasher
        170
    MiketsuSmasher  
       Jun 28, 2022
    Python 3 比 Ruby 还慢,这个是我没想到的
    daokedao
        171
    daokedao  
       Jun 28, 2022
    Rust 太难了,导致 Servo 难产到现在
    YUyu101
        172
    YUyu101  
       Jun 28, 2022
    nodejs 性能这个样子已经可以了,开发效率比 goc#java 要快多了,web 全栈桌面 electron ,移动端 webview 凑活,也就数据分析机器学习方面打不过 python 的生态了,假以时日有望一统江湖啊。
    rpish
        173
    rpish  
       Jun 29, 2022
    @DOLLOR 发展好才有人喷 /奶,发展不好的就默默消失了
    featureoverload
        174
    featureoverload  
       Jun 29, 2022
    有没有搞一个 [各大语言在终端输出一个 "Hello World!"] 的从零文件 coding 速度排名?

    我先来:

    ```shell
    $ python3 -c "print('Hello World!')"
    ```
    featureoverload
        175
    featureoverload  
       Jun 29, 2022
    @featureoverload "从零文件开始 coding"
    KeyboardManS
        176
    KeyboardManS  
       Jun 29, 2022
    @ecloud 原来如此 涨姿势了
    x1aoYao
        177
    x1aoYao  
       Jun 29, 2022
    Swift 的 class 用的 Arc 要原子计数,Array/Map/Set 这些 CoW 类型也是要原子操作,不管你跨不跨线程都是,这能快得起来吗?
    上面有人提到 Apple 的 M1 为原子操作的优化非常大,所以 Swift 跑在 M1 Mac 上面还算好。不过根本还是要让没有 send 到其他线程的就用 Rc 就好。
    hhjj3388
        178
    hhjj3388  
       Jun 29, 2022
    @fengjianxinghun ``你一个#9 一个#6 ····rust#9 的一样开了 simd
    hhjj3388
        179
    hhjj3388  
       Jun 29, 2022
    @ecloud 扯什么能··代码是比计算··你 java 就是不行,还框架··底层都不行同样质量的代码框架你还不是不行
    ecloud
        180
    ecloud  
       Jun 29, 2022
    @hhjj3388 你看一下 9 楼,不同的库还真不一样。再举个例子,python 连 redis ,装不装 hiredis 差别很大。当然你可以理解这为作弊,但是人家在生产中就是这样用的。另外就算 hiredis 本身不同版本速度就有区别,新版的就是比老板的慢一丢丢。再比如 FIX 库,有的库给你穷举所有标签,几千个元素 map 下来比你硬编码慢一个数量级。同样是排序,你用 boost 现成的和自己硬编码一个链表速度当然不一样。
    v1200347
        181
    v1200347  
       Oct 29, 2022
    @ragnaroks 天真 dotnet7 只会更进一步 他们源码都有 你自己去看批判呗 debian 团队大佬写的测试
    v1200347
        182
    v1200347  
       Oct 29, 2022
    @icyalala 知名个嘚 2.4k 的赞也算知名 而且直觉看这些测试全是些没什么鸭梨的东西 根本测不出多少差距 基本全是很小的误差 除了有些语言哪方面确实不行导致毫秒数多 我随便选个测试 本机比了下 java c# go 几乎就没什么差别 一会 1ms 一会 2ms 3ms 的 有什么意义?
    v1200347
        183
    v1200347  
       Oct 29, 2022
    @Mark24 你这测试纯纯搞笑 斐波那契 然后全写递归 到一定程度直接爆掉 不弄尾递归优化
    1  2  
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   3066 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 161ms · UTC 14:14 · PVG 22:14 · LAX 07:14 · JFK 10:14
    ♥ Do have faith in what you're doing.