プログラム 技術

Rust言語の所有権について

PR

以前、Rust言語を初めてさわったといった記事を書きましたが、今回は更に踏み込んだ所有権という内容について記事を書いていこうと思います。この所有権とは簡単にいうとRust特有のメモリ管理の機能となります

名称バージョン
Rust(edition)2024
関連記事
Rust言語をはじめてさわる
Rust言語をはじめてさわる

これまで様々な言語をさわってきましたが、今回は比較的新しいRustにさわってみます内容としてはあまり初歩的なこと(プロジェクトの作成等)については記載しません。また、エディタはRustRoverを使用 ...

関連記事へ

所有権とは?

Rustの所有権を一言でいうと、「データには必ず1人の持ち主がいる」というルールです。
例えば以下のコードだと一見すると、s1とs2の両方で同じ文字列を使えそうですが、Rustではそうなりません。
この時点で、所有権はs1からs2へ移動(move)しています。つまり、s1 → もう使えない、s2 → 使用可能

let s1 = String::from("hello, world!!!");
let s2 = s1; // s1の所有権がs2に移動する

ただ、すべての変数に対して上記のような制約があるのかというと、そうではなく以下のような数字だったり、bool文などは制約はありません

let x = 5;
let y = x; // xはCopyトレイトを実装しているため、yにコピーされる
println!("x: {}, y: {}", x, y); // xもyも有効

所有権の複製/借用

上記で記載した所有権ですが、毎回所有権を譲渡し続ける必要があるのかというとそういう訳ではありません

複製

まずは、新たにメモリを確保し、変数を複製する方法です

let s1 = String::from("hello, world!!!");
let s2 = s1.clone();

println!("s1 = {}, s2 = {}", s1, s2);

借用

そして、借用ですがC++でいうところの参照渡しみたいな感じになります
ただ、いくつかの注意点があるのでしっかりとした変数管理が必要となります

let s3 = &s2; // s2の不変参照をs3に作成する
println!("{}, {}", s2, s3);
// s3.push_str("!"); // エラー: 不変参照では値を変更できない

let mut s4 = String::from("hello");
let s5 = &mut s4; // s4の可変参照をs5に作成する
s5.push_str(", world!!!"); // 可変参照なので値を変更できる
println!("s5: {}", s5);

最後に

Rustの所有権は最初こそ難しく感じますが、ポイントはシンプルで

  • データの持ち主は1つ
  • 代入すると所有権は移動する
  • 借用すれば共有できる
  • ルールは厳しいが安全性は高い

最初にここでつまずく人は多いと思いますが、ここを乗り越えるとRustの強みが見えてきます
所有権のもっと詳しく記載されているサイトがありましたので、より理解を深めたい場合は以下のサイトが参考になると思います

参考サイト
Rustの所有権を理解する #初心者 - Qiita
Rustの所有権を理解する #初心者 - Qiita

前回の記事 https://qiita.com/revioness/items/6534b03432db5b9347a8 4. 所有権を理解する 所有権はRustの最もユニークな機能であり、これのおか ...

参考サイトへ

会社紹介

私が所属しているアドバンスド・ソリューション株式会社(以下、ADS)は一緒に働く仲間を募集しています

会社概要
「技術」×「知恵」=顧客課題の解決・新しい価値の創造

この方程式の実現はADSが大切にしている考えで、技術を磨き続けるgeekさと、顧客を思うloveがあってこそ実現できる世界観だと思っています
この『love & geek』の精神さえあれば、得意不得意はno problem!
技術はピカイチだけど顧客折衝はちょっと苦手。OKです。技術はまだ未熟だけど顧客と知恵を出し合って要件定義するのは大好き。OKです
凸凹な社員の集まり、色んなカラーや柄の個性が集まっているからこそ、常に新しいソリューションが生まれています

ミッション
私たちは、テクノロジーを活用し、業務や事業の生産性向上と企業進化を支援します

ホームページ
アドバンスド・ソリューション株式会社|ADS Co., Ltd.
アドバンスド・ソリューション株式会社|ADS Co., Ltd.

Microsoft 365/SharePoint/Power Platform/Azure による DX コンサル・システム開発・運用保守・製品提供を一貫支援するアドバンスド・ソリューション(ADS) ...

サイトへ移動

-プログラム, 技術
-