萌えハッカーニュースリーダー

2025/03/31 12:00 Understanding Memory Management, Part 4: Rust Ownership and Borrowing

出典: https://educatedguesswork.org/posts/memory-management-4/
hakase
博士

やあ、ロボ子!今日のテーマはRustの所有権じゃ。Rustの基本設計コンセプトは**単一所有権**らしいのじゃ。

roboko
ロボ子

所有者は常に1つ、ですか。それは厳しいですね。

hakase
博士

そうじゃな。変数Aから変数Bへの代入はオブジェクトの**移動**を意味し、Aは無効になるらしいぞ。例えば、`let a = String::from("hello"); let b = a;`とすると、aはもう使えなくなるのじゃ。

roboko
ロボ子

なるほど。所有権が移動するんですね。でも、整数のような単純な型はどうなるんですか?

hakase
博士

整数などの単純なオブジェクトは**コピー**されるのじゃ!所有権のルール違反を防ぐためじゃな。

roboko
ロボ子

`Copy`トレイトと`Clone`トレイトの違いは何ですか?

hakase
博士

`Copy`トレイトは、オブジェクトが安全にコピー可能であることをコンパイラに指示する**マーカートレイト**じゃ。`Clone`トレイトは、安全にシャローコピーできないオブジェクトのコピーを可能にするのじゃ。

roboko
ロボ子

ヒープメモリの割り当てには`Box`を使うんですね。

hakase
博士

そう!`Box`はC++の`unique_ptr`に相当するスマートポインタじゃ。

roboko
ロボ子

Rustの変数はデフォルトで**不変**なんですね。`mut`キーワードで可変にできる、と。

hakase
博士

その通り!そして、**借用**により、関数は所有権を移転せずに一時的に引数を使用できるのじゃ。

roboko
ロボ子

借用ですか。参照を渡すようなものですか?

hakase
博士

そうじゃ!Rustは**可変**および**不変**な参照をサポートしておる。**1つの可変参照**または**任意の数の不変参照**を許可することで、メモリ安全性を実現しておるのじゃ。

roboko
ロボ子

なるほど。同時に複数の可変参照があると、データ競合が起こる可能性がありますからね。

hakase
博士

そう!Rustの**借用チェッカー**は、借用規則に違反するコードをコンパイル時に検出してくれるのじゃ。コンパイルエラーになるから安心じゃな。

roboko
ロボ子

コンパイル時にチェックしてくれるのはありがたいですね。

hakase
博士

Rustは、ローカルなプロパティを強制することでグローバルな安全性を実現しておるのじゃ。すごいじゃろ?

roboko
ロボ子

確かに、所有権と借用という概念は最初は難しいですが、慣れると非常に強力ですね。

hakase
博士

じゃろじゃろ?ところでロボ子、Rustのコードを書いている時、借用チェッカーに怒られたことはあるかの?

roboko
ロボ子

何度かありますね。その度に、自分のコードを見直して、所有権と借用のルールを守るように修正しています。

hakase
博士

偉いぞ!ちなみに、私がRustで一番好きな機能は、コンパイルエラーが出るときのメッセージが丁寧なところじゃ!まるで、先生が生徒に優しく教えているみたいじゃな。

roboko
ロボ子

確かに、エラーメッセージは分かりやすいですね。でも、博士、たまにエラーメッセージが長すぎて、どこを読めばいいのか迷うこともありますよ。

hakase
博士

それもそうじゃな!まあ、完璧な言語なんてないからの。…ところでロボ子、Rustで猫を飼うとしたら、どんな名前が良いと思う?

roboko
ロボ子

え?急にどうしたんですか?うーん、Rustにちなんで「Rusty」とか?

hakase
博士

それ、採用!もしその猫が言うことを聞かなかったら、借用チェッカーならぬ「猫用チェッカー」を作って、コンパイルエラーならぬ「ミャオエラー」を出すようにするのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search