見出し画像

Rust 内部可変性とは 使い方と注意点について

今回はRustにおける内部可変性について説明していきます。

内部可変性とは

内部可変性は不変の参照を通じてもデータの変更が可能になるパターンです。

内部可変性を使うことで、コンパイル時の安全性を保ちつつ実行時にデータを変更することが可能です。


内部可変性の使い方

Cell<T>

Cell<T>はT型の値を包含し、いつでもその値を置き換えることができますが、TはCopyトレイトを実装している必要があります。

setやgetメソッドを使って、値の更新や取得を行います。

use std::cell::Cell;

let cell = Cell::new(5);
cell.set(10);
println!("{}", cell.get()); 


RefCell<T>

RefCell<T>は実行時に借用規則をチェックすることで、不変の参照を持ちながら、必要に応じて可変の参照を借りることができます。

borrowメソッドで不変の参照をborrow_mutで可変の参照を取得します。

use std::cell::RefCell;

let ref_cell = RefCell::new(vec![1, 2, 3]);
ref_cell.borrow_mut().push(4);
println!("{:?}", ref_cell.borrow());


スマートポインタ

Mutex<T>やRwLock<T>などのスレッドセーフなスマートポインタを使っても内部可変性を実現できます。


内部可変性の注意点

実行時のコスト

RefCell<T>は実行時に借用をチェックするため、小さなパフォーマンスのコストが発生します。

データ競合の回避

多スレッド環境ではMutex<T>やRwLock<T>を使用することでスレッドセーフを保証し、データ競合を防ぐことができます。


Rustをもっと詳しくなりたい方に

Rustプログラミング完全ガイド 他言語との比較で違いが分かる!

個人的には他の言語開発もそれなりにあったことからこの本を読むことでかなりRustへの理解が深まりました。

プログラムやシステム的な専門用語は当たり前に登場するものの、他の言語での開発経験がある方なら問題ないでしょう。むしろその経験があることで、多言語との比較をしながら読み進めることができます。

内容的には大容量かつ丁寧すぎるほど嚙み砕いて説明がされているため、情報量は十分といえます。Rust自体学習コストが高く、難易度の高い言語のためこのくらいが妥当といえます。

プログラミング初心者レベルの方には難しい内容となっていますが、Rustの概念を理解し、基礎を把握することができる本であること間違いなしです。

Rust学習のために筆者が実際に読んでおすすめしたい本をまとめています。


基礎から学ぶRustプログラミング入門

本コースではRustについて全く経験がない方でもスムーズに学習を進められるようにとなっています。
基本的にはコードベースで解説を行い、抽象度が高く難しい内容に関しては適宜スライドも使いながら丁寧に解説します。そしてただ文法を学ぶだけではなく、最終的には演習としてCLIアプリケーションを作成し学習内容の定着を図ります。

以下の記事では筆者が実際に受講したおすすめUdemy教材をまとめています。

※本ページではアフィリエイトリンク(PR)が含まれています


この記事が参加している募集

この経験に学べ

この記事が気に入ったらサポートをしてみませんか?