
2026/02/01 5:50
**Rust・Go・Swift・Zig・Julia などを対象としたデータ処理ベンチマーク**
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
概要:
この記事は、複数のプログラミング言語とバージョンにわたってベンチマークアルゴリズムの実行時間を劇的に短縮する一連のターゲット最適化を記録しています。
- Rust: v5 はループハッシュコストを 38 ms(および 52 ms)に削減し、v6 はバイナリヒープ操作を 23 ms(36 ms)に最適化しました。 Rust Rayon 並列処理はさらに実行時間を 9 ms(22 ms)まで短縮しました。
- Go: v2 は Rust スタイルのテクニックを適用し、実行時間を 1.5 s から 80 ms に削減しました;v3 は
と汎用バイナリヒープを使用してこれを 56–70 ms に改善しました。Go Concurrency バリアントは 10 ms(33 ms)を達成し、アリーナと WaitGroup を併用した場合は 5 ms(29 ms)になりました。goccy/go-json - Python: Rust の最適化後、性能は 7.81 s から 1.35–1.53 s に低下しました;純粋な NumPy 実装では 0.57–0.85 s がかかります。
- Crystal v2: バイナリヒープをカスタム優先度キューに置き換え、実行時間を 50/96 ms から 33/72 ms に改善しました。
- その他の言語: Odin (110 → 104 ms)、Dart VM (125 → 274 → 360 ms)、Vlang (339 → 560 ms)、Zig (80–110 ms)。
- Rust v4: キーをポストインデックスに切り替え、バイナリヒープを使用して実行時間を 0.13 s に削減しました。
これらの最適化はレイテンシを低減し、リソース使用量を削減し、開発者・クラウドプロバイダーおよびその他の高性能計算分野における本番システムでアルゴリズムの応用範囲を広げます。
本文
Rust
- 4.5 秒 初期版
- 2.60 秒 std HashMap を fxHashMap(phazer99)に置き換えた
- 1.28 秒 マップを事前確保して再利用、安定ソート (vdrmn, Darksonn)
- 0.13 秒 ポインタ+バイナリヒープの代わりに Post index をキーとして使用(RB5009)
- 38 ms / 52 ms ループからハッシュ化を除外、
をvec[count]
の代わりに使用(RB5009)map[index]count - 23 ms / 36 ms バイナリヒープ操作の最適化(scottlamb)
- 9 ms / 22 ms 並列処理(masmullin2000)
- 8 ms / 22 ms ホットループから比較を除外
Go
- 1.5 秒 初期版
- 80 ミリ秒 Rust の最適化を追加
- 56 ms / 70 ms
を使用goccy/go-json - 34 ms / 55 ms ジェネリックバイナリヒープ(DrBlury)
- 26 ms / 50 ms カスタム優先度キューへ置き換え
- 20 ms / 43 ms ホットループから比較を除外
- 10 ms / 33 ms tirprox & DrBlury による並列化
- 5 ms / 29 ms アリーナ、WaitGroup を使用し、バイナリヒープを削除(DrBlury)
Python
- 7.81 秒 初期版
- 1.35 s / 1.53 s Rust の最適化を追加(dave‑andersen)
- 0.57 s / 0.85 s NumPy 実装(Copper280z)
Crystal
- 50 ms / 96 ms 前回の最適化を踏まえた初期版
- 33 ms / 72 ms バイナリヒープをカスタム優先度キューへ置き換え
Odin
- 110 ms / 397 ms Go コードから移植
- 104 ms / 404 ms ホットループから比較を除外
Dart VM
- 125 ms / 530 ms Go コードから移植
Dart bin
- 274 ms / 360 ms コンパイル済み実行ファイル
Vlang
- 339 ms / 560 ms Go コードから移植
Zig
- 80 ms / 110 ms akhildevelops による提供