Rust

メモリ安全性とパフォーマンスを両立する、GC なしのシステムプログラミング言語

低レベルメモリ管理

Rust とは

Rust は、Mozilla が 2010 年に公開したシステムプログラミング言語で、所有権システムによりガベージコレクション (GC) なしでメモリ安全性を保証する。C/C++ に匹敵するパフォーマンスと、データ競合をコンパイル時に防止する安全性を両立する。Stack Overflow の「最も愛されている言語」で 8 年連続 1 位。

所有権システム

fn main() {
    let s1 = String::from("hello");
    let s2 = s1;        // s1 の所有権が s2 に移動 (ムーブ)
    // println!("{}", s1); // ❌ コンパイルエラー: s1 はもう使えない
    println!("{}", s2);   // ✅ OK
}

3 つのルール:

  1. 各値には所有者が 1 つだけ
  2. 所有者がスコープを抜けると値は自動的に解放
  3. 所有権は移動 (ムーブ) または借用 (ボロー) できる

借用 (Borrowing)

fn print_length(s: &String) {  // 不変参照 (借用)
    println!("Length: {}", s.len());
}

fn main() {
    let s = String::from("hello");
    print_length(&s);  // 借用: 所有権は移動しない
    println!("{}", s);  // ✅ まだ使える
}

Go / TypeScript との比較

観点 Rust Go TypeScript
メモリ管理 所有権 (GC なし) GC GC (V8)
パフォーマンス 最高 (ネイティブ) 高い (ネイティブ) 中程度 (JIT)
安全性 コンパイル時にメモリ安全性保証 ランタイムで検出 ランタイムで検出
学習コスト 高い 低い 中程度
ビルド時間 遅い 速い 速い (トランスパイル)
用途 CLI、WebAssembly、組み込み Web サーバー、CLI Web アプリ

Rust で書かれたツール

ツール 用途 置き換え対象
SWC TypeScript トランスパイラ Babel (20 倍高速)
esbuild バンドラー (Go 製だが Rust 版も) webpack
Turbopack Next.js のバンドラー webpack
Biome Linter + Formatter ESLint + Prettier
ripgrep (rg) テキスト検索 grep
fd ファイル検索 find

Lambda での Rust

Rust は Lambda のカスタムランタイム (provided.al2023) で実行する。コールドスタートが極めて速い (10〜50 ミリ秒)。

use lambda_runtime::{service_fn, LambdaEvent, Error};
use serde_json::Value;

async fn handler(event: LambdaEvent<Value>) -> Result<Value, Error> {
    Ok(serde_json::json!({ "message": "Hello from Rust" }))
}

#[tokio::main]
async fn main() -> Result<(), Error> {
    lambda_runtime::run(service_fn(handler)).await
}

WebAssembly (Wasm)

Rust は WebAssembly のコンパイルターゲットとして最も成熟している。ブラウザで C/C++ 並みのパフォーマンスが必要な処理 (画像処理、暗号化) に使われる。

体系的に学ぶなら関連書籍を参照してほしい。

関連用語