Rust 速習チュートリアル

Rust の借用

1. 借用と参照

所有権を移動(Move)させずに、値を利用したい場合があります。
Rustでは「参照(Reference)」を使用することでこれを実現でき、この仕組みを「借用(Borrowing)」と呼びます。

2. 参照(Reference)とは何か?

参照を使用すると、所有権を持つことなく値にアクセスできます。参照を作成するには、& 記号を使用します。

サンプルコード

let a = String::from("Hello");
let b = &a; // aへの参照を作成(借用)

println!("aの値 = {}", a); // aは依然として所有権を持っています
println!("bの値 = {}", b); // bはaの値を参照しています

b は値を「借用」しているだけなので、a は依然として所有権を保持しています。

3. 可変参照 (Mutable References)

参照を介して値を「変更」したい場合は、参照を mut(ミュータブル)にする必要があります。

サンプルコード

let mut name = String::from("John");
let name_ref = &mut name; // 可変参照を作成
name_ref.push_str(" Doe");

println!("{}", name_ref); // 出力: John Doe

注記: 特定の値に対して、一度に持てる「可変参照」は最大で1つだけです。これはデータ競合を防ぐためのRustの強力な安全ルールです。

4. なぜ借用が重要なのか

借用を利用することで、所有権を手放すことなく安全に値を再利用できます。

  • 所有権の維持: 所有権を移動させずに値を使用できます。
  • パフォーマンスの最適化: データの複製(クローン)を避けることができるため、大規模なデータ構造を扱う際に高速に動作します。
  • メモリ安全性: Rustのコンパイラが借用のルールをチェックするため、プログラムがより安全かつ高速になります。

1つの値を複数の場所で読み取る(不変参照)のは自由ですが、書き換える(可変参照)場合は厳格に制限することで、予期せぬバグを未然に防ぐことができます。