~/VibeHandbook
$39

言語

rust-lang.org

Rust

概要

Rustは静的型付けでコンパイル型のシステム言語で、ガベージコレクタなしのメモリ安全性に焦点を当てています。その所有権と借用のモデルは、コンパイル時にデータ競合やuse-after-freeのバグを起こさないことを保証し、はるかに少ない落とし穴でCレベルのパフォーマンスを実現します。

強み

  • コンパイル時に強制されるメモリ安全性とスレッド安全性、GCなし。
  • CやC++に匹敵するパフォーマンス。
  • 豊かな型システム、パターンマッチング、そして第一級のパッケージマネージャー(Cargo)。
  • 何が間違っていて、どう直せばよいかを説明する優れたコンパイラエラー。

トレードオフ

  • 急な学習曲線 — ボローチェッカーを体得するには相応の時間がかかる。
  • 高水準言語よりも書くのが遅く、コンパイルにも時間がかかる。
  • 単純なスクリプトや手早いプロトタイプにはオーバースペック。
  • 非同期Rustやライフタイムの多いジェネリックなコードは、本当に込み入ったものになり得る。

使いどころ

パフォーマンス、信頼性、リソース制御がすべて同時に重要なときにRustを選びましょう。システムソフトウェア、ゲームエンジン、コマンドラインツール、WebAssembly、組み込み、パフォーマンスがクリティカルなサービスなどです。使い捨てのスクリプトには不向きで、そこでは安全性の保証が摩擦に見合いません。

バイブコーディングとの相性

AIアシスタントはもっともらしいRustを生成しますが、真の裁定者はボローチェッカーです。コンパイラエラーを貼り戻して反復することになると見ておきましょう。Rustの診断は的確でモデルがそれに基づいて動けるため、これはうまく機能します。AIには、エラー処理でResult?に頼らせ、ライフタイムと格闘するよりも所有型や明確な借用を優先させ、クレートを(Cargo.tomlのエントリつきで)明示的に提案させましょう。安全性と挙動を検証できるようcargo testのケースを求めましょう。モデルがunsafeを提案してきたら、押し返してまず安全な代替案を求めましょう。

fn main() {
    let nums = vec![3, 1, 4, 1, 5, 9, 2, 6];
    let sum: i32 = nums.iter().filter(|&&n| n % 2 == 0).sum();
    println!("Sum of evens: {sum}");
}