16 ポイント 投稿者 xguru 2024-06-24 | 10件のコメント | WhatsAppで共有
  • 数億人のユーザー向けにサービスを提供する会社(非公開)で、コアシステムに C と C++ を使用中
  • 2023年の1年間を通じて、Rust と Zig のどちらの言語を採用するかについて議論を実施
  • 主な検討事項:
    1. C 言語との相互運用性
    2. エンジニアのスケーラビリティ(採用、保守など)
  • 最終的な選択: Zig
  • この選択プロセスは、大規模な企業で「コードが多様な対象環境で実行され、数億人のユーザーに影響を与えるときに考慮する要素」をよく示していると思い、共有する

C 相互運用性の重要性

  • 書き換えようとしているライブラリは、すべてのプラットフォーム(Web、モバイル、VR ヘッドセット、ゲームコンソール、デスクトップなど)で使われる可能性がある
  • そのため、C API の提供と FFI を通じた利用が、すべてのプラットフォームでの実行を保証する唯一の方法

主な議論の論点

Rust

  1. 当時は Zig より 25 倍以上人気があった(アンケート調査およびサブレディット基準)
  2. より長い期間にわたって安定した状態を維持している
  3. Rust Foundation に対する産業界からの支援は安定しているように見える
  4. 優れた LSP と開発者体験
  5. Cargo: 業界最高水準のパッケージマネージャー
  6. メモリ安全性と「未定義動作がない」(完全に正しいわけではないが、議論の中で言及された)
  7. C++ から脱却するなら、メモリエラーや未定義動作の可能性がない Rust の方が適している
  8. nightly バージョンで SIMD をサポート
  9. WASM サポートは Zig と同じくらいスムーズ
  10. 性能面では Zig と同等、または一部のケースでは「かなり高速」
Rust の C 相互運用性:
  • Rust には独自の豊かなエコシステムがあり、C 相互運用性の重要度は相対的に低い
  • Python バインディングなど、高水準言語との連携の可能性に優れる
  • Rust を使う利点が、C バインディングを提供する欠点を相殺するという主張

Zig

  1. C/C++ または TypeScript を背景に持つ開発者が容易に学べる
  2. C を背景に持つ開発者に楽しいコーディング体験を提供
  3. Zig コンパイラは C と C++ のコンパイルも可能で、依存関係管理や C ABI ライブラリ構築に有利
  4. 多様な対象プラットフォームのサポートが非常に容易(zig targets コマンドが高評価)
  5. 高速なソフトウェアを簡単に書ける(ネイティブな Vector サポート、SIMD 活用など)
  6. 既存のデバッガと互換性がある
  7. 優れたビルドシステム(既存の Makefile より 100 倍改善)
  8. Zig Software Foundation の高い財務透明性
  9. 既存の C++ コードを段階的に移植し、「Zig 化」できる
  10. すべての対象プラットフォームにおけるリンク/コンパイルの問題解決が確実

結論

  • Zig は既存コードベースの移植と、すべてのプラットフォーム互換性を保証するために必要な時間と労力を大きく削減する
  • 予想外の決定要因:
    1. 学習のしやすさと採用が予想以上に大きな影響を与えた(Zig に有利)
    2. ツールチェーンに関する開発者体験が重要な役割を果たした
    3. Zig コンパイラとビルドシステムは、既存コードベースとの互換性のため大いに役立った
    4. Rust のエコシステム、コミュニティ、メモリ安全性の保証は、予想より影響力が小さかった

10件のコメント

 
qpfjf56 2025-04-30

とても面白い記事で、楽しく読みました! Node と Bun、そして Deno について調べていたところ、Bun が Zig という聞き慣れない言語で書かれていると知って、どんな言語なのか気になっていたのですが、いい入門になりました!

 
ahwjdekf 2025-01-17

Zig の大きな問題のひとつは、コンパイル時にユーザーが書いたコードにエラーがある場合、正確な位置や情報を教えてくれないことです。標準ライブラリまでしか示されないようです。

 
cosine20 2024-07-01

検討事項や議論の論点、結論などを読んでみると、そもそも Rust が必要な環境ではなかったようですね。料理を配達するのにオフローダーを乗り回す配達員を見たことがありますか?
ネイティブ言語で開発する必要はあるにしても、memory-critical な作業でないなら開発しやすい方を選ぶのが正しいでしょう。これを何も1年間も議論するほどのことでは……

 
[このコメントは非表示になっています。]
 
botplaysdice 2024-06-24

数億人のユーザーを対象にしている……

どの会社なのか気になりますね。認証という形式的な手続きに縛られない会社のようで……うらやましい……

 
bus710 2024-06-24

年に一度くらいは Zig を見て回るのですが、ほぼ毎年 breaking change があった気がします;;
そのうえ、言語自体としてキューやスレッド間メッセージ受け渡しライブラリが用意されていないので、Rust の成熟度と比べると、まだ先は長い気がします。
もちろん、ユーザーが OS API に精通していれば大きな問題ではないかもしれませんが…

 
tested 2024-06-24

RustはZigより25倍以上人気がありますが、採用面ではZigのほうが有利なのですね。

 
rlcks97 2024-07-01

1番目の項目である、C/C++ または TypeScript を背景に持つ開発者が学びやすいからだと思います

 
daejin 2024-06-24

C言語バックグラウンドの開発者に楽しいコーディング体験を提供
高速なソフトウェアの作成が容易(ネイティブのVectorサポート、SIMD活用など)

初めてPythonを学んだときの感覚ですね

 
tsboard 2024-06-24

BunがZig言語で開発されているのを見て、なぜよりによってZigだったのだろうと気になっていましたが、Rustとの良い比較記事のおかげで理解できました。とはいえ、C言語は本当に永遠に不滅のようですね。