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

2022-06-27 13:06:40 +08:00
 wdwwtzy
来自 https://github.com/GoodManWEN/Programming-Language-Benchmarks-Visualization

21298 次点击
所在节点    程序员
182 条回复
fengjianxinghun
2022-06-28 10:34:19 +08:00
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 优化,但是它只在分层编译情况下。
wangyzj
2022-06-28 10:38:53 +08:00
你这个要看具体测试方法是啥把
tairan2006
2022-06-28 10:39:17 +08:00
python 最近在提速了,未来可期,战一战 nodejs 应该还是没问题的

另外就是移除 GIL 的提案看什么时候合入主分支。
leexy
2022-06-28 10:40:07 +08:00
@Protocol #71 因为 C++ 牛逼是意料之中的事儿
fengjianxinghun
2022-06-28 10:42:56 +08:00
@INCerry c#人是 avx 手工优化。。比你自动 simd 不知道高那里去了。
INCerry
2022-06-28 10:43:44 +08:00
@fengjianxinghun 那有什么问题呢?有些语言还没办法用 avx 手工优化呢
INCerry
2022-06-28 10:44:34 +08:00
@fengjianxinghun 你也可以给 rust 手工优化试试 看看能不能超过 C++
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
fengjianxinghun
2022-06-28 10:51:00 +08:00
@INCerry 这个层面上语言本身影响就很小了,就是一点抽象开销。
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 影响的语言根本不在考虑范围,即使性能差距不大。
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
pkoukk
2022-06-28 11:08:55 +08:00
看来我是时候捡起来 C#玩玩了
INCerry
2022-06-28 11:12:21 +08:00
> 这个层面上语言本身影响就很小了,就是一点抽象开销。
@fengjianxinghun 所以不存在啥作弊不作弊 我看 C++ Rust C# 都用上了 SIMD
ecloud
2022-06-28 11:35:48 +08:00
这种测试并不公平,没有体现到每个语言的业务使用场景。比如上面有人说到 lua 就有只少 2 种运行模式; c++这种东西有 boost,qt 和 mfc 等多种不同的风格; java 更是复杂,spring 和各种商业 J2EE 实现都有很大差别。样板程序的复杂度不足的话,不足以说明问题
ecloud
2022-06-28 11:39:19 +08:00
@KeyboardManS Fortran 要想快得用 intel 编译器,很贵的。不知道它这个测试用的啥编译器
Leviathann
2022-06-28 11:42:33 +08:00
@lilith01 几乎和 java 一致
@twl007 discord 不是跟国内一帮跟风的一样用 go 写业务,业务是用 elixir 写的,go 是写的中间件,由于 gc 的问题换成了 rust
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 ,你说的是最终单文件?
LawlietZ
2022-06-28 12:19:00 +08:00
牛逼
INCerry
2022-06-28 12:32:32 +08:00
@netnr 是啊 你创建一个项目 然后把项目文件按照我那样改一下 最后用我提到的命令 打包出来的二进制可执行文件就 1.5MB
你需要引用 Microsoft.DotNet.ILCompiler 这个 NuGet 包

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/862452

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX