プログラミング言語

Rust

Graydon Hoare / Mozilla / 2010年(1.0 は 2015年)登場

所有権モデルで「メモリ安全」と「高速」を GC なしで両立するシステム言語。学習は難しいが安全性と性能が要る基盤で評価が高い。

3つの要点
TL;DR
  1. 所有権でメモリ安全を保つシステム言語。
  2. GC なしで C++ 並みの性能を実現。
  3. 安全性と速度が要る基盤なら C++ より Rust。

基本情報

仕様と特徴

Rust のロゴ
製品・技術の概要Rust所有権モデルで「メモリ安全」と「高速」を GC なしで両立するシステム言語。学習は難しいが安全性と性能が要る基盤で評価が高い。
型付け
静的強い型付け
実行方式
コンパイルネイティブ)
パラダイム
マルチパラダイム所有権 + 関数 + OOP 風)
登場
2010年1.0 は 2015年)Graydon Hoare / Mozilla
この言語の強み
GC なしでメモリ安全所有権借用)C++ 並みの実行性能
活躍する領域
システム / 低レイヤ高性能・高信頼が要る基盤 / WebAssembly

選定ガイド

選定ポイント

採用する理由と、事前に受け入れるべきトレードオフを分けて確認します。

採用に向く条件

選ぶ理由

  1. GC なしでメモリ安全(所有権・借用)
  2. C++ 並みの実行性能
  3. データ競合をコンパイル時に防ぐ

事前に確認する条件

考慮すべき点

  1. 学習が難しい(所有権・ライフタイム)
  2. コンパイルが遅め
  3. 開発スピードは出にくい

向いている用途

こんな用途に向く

システム / 低レイヤ高性能・高信頼が要る基盤WebAssembly

詳しい解説

もっと詳しく

どんな言語か

Rust は Mozilla の支援で開発され、2015 年に 1.0 が公開されたシステムプログラミング言語です。狙いは明確で、「C++ 並みの性能」と「メモリ安全」を両立させることでした。多くの言語はガベージコレクション(GC)でメモリ安全を確保しますが、その分だけ実行時のオーバーヘッドが生じます。Rust は GC を持たず、安全性をコンパイル時のチェックで実現する点が最大の特徴です。

横にスクロール

Cargo と rustc が Rust ソースを AST、HIR、型検査、MIR と借用検査、LLVM IR、オブジェクト生成、リンクへ進める経路と、所有権、unsafe、C FFI、ビルド計測
Rust は HIR で型を検査し、MIR で借用・初期化・Drop の経路を確定してから、具体型ごとに機械語を生成します。unsafe と FFI の責任を狭い境界へ閉じ込め、本番プロファイルの成果物で性能を測ります。

核心は「所有権」

Rust の中心にあるのが所有権(ownership)モデルです。値には必ず一つの所有者がいて、所有者がスコープを抜けるとメモリが解放されます(RAII)。値を貸し出す(借用する)際も、「書き換え可能な参照は同時に一つだけ、共有参照は複数可(ただし可変と共有は同時不可)」といった規則を借用チェッカが検証します。

fn main() {
    let s = String::from("hello");
    let r = &s;              // 借用(読み取り専用の参照)
    println!("{} {}", s, r); // 所有権は s のまま。両方使える
}

この仕組みにより、データ競合や解放済みメモリへのアクセス(use-after-free)を、実行前にコンパイルエラーとして弾けます。並行処理でも、スレッド間で安全に共有できる型かどうかを型(Send/Sync)で表し、「データ競合をコンパイルで防ぐ(fearless concurrency)」を実現します。

型システム・エコシステム

  • 代数的データ型(enum)と網羅的な matchOptionResult による例外に頼らない明示的なエラー処理、トレイトによる多相性。
  • ビルド・依存管理は Cargo が一体で担い、crates.io のライブラリ流通、テスト・ドキュメント生成も統合。
  • ゼロコスト抽象化で、抽象的に書いても実行時コストが乗りにくい。

得意・不得意と使いどころ

  • 得意: OS・組込みなどの低レイヤー、高性能ツール、WebAssembly、並行処理の堅牢さが要る基盤。GC がないためリアルタイム性でも性能が予測しやすい。
  • 不得意: とにかく速く書き捨てたい場面。コンパイルは比較的遅め。
観点RustC++Go
メモリ安全所有権でコンパイル時保証手動(自己責任)GC で自動
性能最高クラス最高クラス高いが GC あり
学習コスト高い(借用/ライフタイム)高い(巨大仕様)低い
主用途基盤・高性能・安全重視ゲーム・組込み・既存資産サーバー・CLI・クラウド

つまずきやすいところ

借用チェッカと戦う期間

所有権・借用・ライフタイムの規則は学習コストが高く、慣れるまで「コンパイラと戦う」期間があります。ただし通れば実行時の安全性は高く、リファクタリングも壊れにくくなります。まずは所有権と借用の基本、次に Result によるエラー処理に慣れるのが近道です。

総じて Rust は、GC なしでメモリ安全と高性能を両立し、並行処理の堅牢さまで型で保証する、現代のシステムプログラミング言語です。

言語選定

Rustを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

システム / 低レイヤ

比較で見る軸

型付け: 静的・強い型付け / 実行方式: コンパイル(ネイティブ) / パラダイム: マルチパラダイム(所有権 + 関数 + OOP 風)

導入後に効く点

C++ 並みの実行性能

先に潰すリスク

学習が難しい(所有権・ライフタイム)

数字・仕様の読み方
型付け
静的・強い型付け
実行方式
コンパイル(ネイティブ)
パラダイム
マルチパラダイム(所有権 + 関数 + OOP 風)
登場
2010年(1.0 は 2015年)
Graydon Hoare / Mozilla

判断チェックリスト

  • 自社の用途が「システム / 低レイヤ / 高性能・高信頼が要る基盤」に近いか確認する。
  • 強みである「GC なしでメモリ安全(所有権・借用)」が本当に評価軸になるか確認する。
  • 注意点の「学習が難しい(所有権・ライフタイム)」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

システム / 低レイヤ高性能・高信頼が要る基盤WebAssembly

最初の一歩

Hello, World!

fn main() {
    println!("Hello, World!");
}
公式ドキュメント