Rust

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

低レベルメモリ管理
Rust」の技術書を見る (93 冊) →

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)

借用 (Borrowing) のコード例を示す。

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

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

Go / TypeScript との比較

Go / TypeScript との主な違いを以下に比較する。

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

Rust で書かれたツール

Rust で書かれたツールを以下に示す。

ツール用途置き換え対象
SWCTypeScript トランスパイラBabel (20 倍高速)
esbuildバンドラー (Go 製だが Rust 版も)webpack
TurbopackNext.js のバンドラーwebpack
BiomeLinter + FormatterESLint + 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++ 並みのパフォーマンスが必要な処理 (画像処理、暗号化) に使われる。

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

この記事は役に立ちましたか?

関連用語

関連する記事