🎈

GoとRustの比較まとめ

2022/02/24に公開

Go と Rust

前提

  • 参考資料を日本語で自分用にまとめ直したものです

類似点

  • 安全
  • スケーラブル
  • 開発者の生産性

現在人気である言語が前提としていたもの

  • ムーアの法則は永遠に真である
  • ほとんどのソフトウェアプロジェクトは小さいチームで開発され,チームは一緒に働く
  • ほとんどのソフトウェアは相対的に依存が小さい.ほとんどプロプライエタリである
  • 安全性は二の次.もしくは全く考慮されていない.
  • ソフトウェアは大抵ひとつのプラットフォームのために書かれる

GoとRustが現代の開発者の要求に答えている

  1. パフォーマンスと並行性
    • マルチコアを活かせる
  2. チームがスケール可能(レビュー可能)
    • 以下を気にする必要が減る
      • format
      • security
      • complex organization
        • コードを理解するためのコンテキストが相対的に小さい
        • buildと実行が容易
  3. Open Sourceを前提としている
    • どちらもpackage-managementシステムを持っている
  4. 安全
    • buffer overflow, use-after-freeなどといったよくある脆弱性を予防してくれる
  5. 真にポータブル
    • Write once, compile anywhere.

相違点

  1. パフォーマンス
    • GoはGoの外でパフォーマンスをギリギリまで突き詰めることはできない
    • Rustはギリギリまでチューニングできる
    • GoはGCがあり,そこの影響を気にするならRust
  2. 適応性
    • Goはコンパイルが早く,開発者がイテレーションを素早く回すのに適している
    • 一方Rustのコンパイルは遅い
    • よって要求の変化に適応するにはGoのほうが適しているだろう
      • 顧客のユースケースに近い部分
  3. 学習しやすさ
    • Goのほうが容易に学習できる
      • 数週間で本番にデプロイできるほど
    • Rustはより複雑で学習しづらいが,精密なコントロールとパフォーマンス向上が実現できる
  4. 精密なコントロール
    • Rustはメモリをどのように扱うかを開発者がより多くコントロールできる
      • 複雑さと引き換えに
    • Goは細かい部分を制御できない代わりにより素早い探索と修正回数を実現できる

まとめ

  • Goはシンプルでパフォーマンスがよく,開発者の生産性に寄与する.ユーザーに近い部分のアプリケーションとしては理想的
  • Rustはより細かいコントロールを可能にする.これは変化しづらいローレベルのオペレーションに適しており,Goより良いパフォーマンスを実現できる
  • Rustはマシンに近く,Goはユーザーに近い
  • ほとんどの企業やユーザーにとって,Goは正しいデフォルトの選択肢である.プロダクトが成熟し,安定性やよりパフォーマンスが求められたとき,Rustに投資する価値が最大化されるだろう.

参考資料

GitHubで編集を提案

Discussion