Charaken 技術系ブログ

技術系に関して学んだことや、気になったことを記事にしていく。

【Rust】がばがばRust独学 - 4. Ownership - 1

f:id:charaken:20191223210559p:plain

Rustの公式ドキュメントを通して、Rustを独学していく記事になります。(がば要素あり)

doc.rust-lang.org

今回は、Ownershipの概要について学びつつ、気になった点をコード確認した結果を記事にしています。

  • versions
$ rustc --version
rustc 1.40.0 (73528e339 2019-12-16)


Ownership

概要

Rustが他言語と違う大きな点の一つは、Ownershipです。 他言語では、GCガベージコレクション)や明示的にメモリを開放することによって、メモリを管理しています。

JavaGCは、下記が概要をつかみやすいかと考えます。

docs.oracle.com

PHPGCは、下記からzval コンテナの参照カウント法の原理に関して読み解いていくと良いかと考えます。

https://www.php.net/manual/ja/features.gc.refcounting-basics.php

メモリ解放で行くとCの malloc 辺りがイメージしやすいかと考えます。

ja.wikipedia.org

Rustの場合

Rust uses a third approach.

Because ownership is a new concept for many programmers, it does take some time to get used to. The good news is that the more experienced you become with Rust and the rules of the ownership system, the more you’ll be able to naturally develop code that is safe and efficient.

と記載されている通り、第3のメモリ管理として、Ownershipと呼ばれる新しい概念を用いて安全で効率的なコードを自然に開発できると記載されております。

私事ですが、画像処理の研究でシステムを開発していた時に、C++でメモリ解放を忘れてメモリリークして、 研究結果が飛んだりした苦い思い出もあります。。。 PHPでも大量のデータをさばく際に、強制的にGCを走らせないと効率的でなかったりなど、チューニングをしたこともございます。

Ownershipの概念が、メモリ管理を適切にできれば楽になりますね・・・

スタックとヒープについても書かれておりますが、ヒープ内のデータへのアクセスは、スタック上のアクセスよりも遅くなるなどの基本的な記載と、Rustにおけるスタックとヒープに関しては後半に記載しているよ!と書かれておりましたので、後半を読みながら、スタックとヒープに関しての理解を進めます。

ルール

Each value in Rust has a variable that’s called its owner. There can only be one owner at a time. When the owner goes out of scope, the value will be dropped.

上記をざっくり訳すると

  1. Rustの各値にはownerと呼ばれる変数がある
  2. ownerは一度に一つのみ存在できる
  3. ownerはscopeから外れると値が削除される

のように見えます。このルールだけだと分からないため、実例を見てみないとですね・・・

最後に

String における具体例まで進めたかったのですが、理解を深められなかったので、 明日、別記事で詳細を書きます。