# 卒研経過報告 #3 Rustによる組み込みプログラミング マイコンWio terminalを用いたRustとC言語の信頼性,安全性の比較検証、考察 team member : 子安,小森 [先週のメモ](https://hackmd.io/@Fteam/HJQwhYbmF) [子安卒論](https://ja.overleaf.com/project/613aadc9c3a8ceec0e18338b) ## 研究の目的 この研究ではこれまで主に組込みソフトウエア開発に使われてきたC/C++と それに替わる有効な選択肢として、注目されているRust言語との 信頼性や安全性など様々な面から比較検証を行う。 ## memo Pythonの流儀とC++の流儀、Rustの流儀のトレードオフ 考察 ヒープの実態を共有することの欠点の理解 ## 検証 ![](https://i.imgur.com/k2At8YL.png =300x) ### 1. ヒープ領域での動き #### C++ - 利点 複数のポインタがひとつのオブジェクトを参照することがないため、値が勝手に変更されることがなく、バグを誘発することはない。 #### Python - 欠点 - 一方のポインタからオブジェクトを解放すると、もう一方のポインタは解放された領域を参照してしまう。 - 複数のポインタからひとつのオブジェクトを参照するため、勝手に値が変更されることがある。 ### 2. 今後の予定 型状態プログラミングの利点を具体例を用いて確認 Rustの優位性を主張する ## 以下,前回の内容 ### 1. C++  変数aに保管されている値を別の変数bに代入した場合、変数bの箱には変数aに格納されていた値のコピーが保管される。 - 利点 複数のポインタがひとつのオブジェクトを参照することがないため、値が勝手に変更されることがなく、バグを誘発することはない。 - 欠点 - コピーされる分、メモリ容量を多く使う - 不必要になったオブジェクトをプログラマーの責任で各ポインタが参照するオブジェクトを解放しなければいけない ### 2. Python 変数aに格納されている値を別の変数bに代入した場合、変数aが指し示していた値を変数bも指し示す。 - 利点 - 値をコピーしない分余計なメモリを使わなくて済む - 値を上書きすることがないため、オブジェクトに対する変更を見ることができる - 欠点 一方のポインタからオブジェクトを解放すると、もう一方のポインタは解放された領域を参照してしまう。 ### 3. Rust 所有権システム - 利点 - 複数箇所から同時にメモリへの読み込み、書き換えができないため、未定義動作が起こらない=安全性が高い ### 考察 メモリを効率的に使うことが、高速処理につながる。Pythonで用いられているアドレスを格納するシステムは、別領域に定義した大量のデータがあるときにアドレス確保用に取得したメモリ領域内で完結する。またPythonにはガベージコレクション(以下GC)が備わっている為、使用しなくなったメモリ領域は自動的に解放されるため、合理的である。しかしRustではGCにかかるコストも落としつつ、効率的で安全性の高いメモリ管理が実現できる。所有権システムはすべてプログラマ個人がメモリ管理をする必要があり、学習コストが高いデメリットがあるが、ムーブを行うと値の所有者ごと移すというシステムがこれらの問題を解決している。具体的な特徴は以下の通り。 - 所有者がスコープから外れると値は破棄される - 所有者はただ一つ C言語で発生する、ポインタがすでに解放された変数を示すというバグは絶対に起こらず安全といえる。 ## 今後の課題 * 型状態プログラミングの利点を具体例によって確認 ## 参考文献 [1] [公式ドキュメント](https://doc.rust-jp.rs/book-ja/foreword.html) [2] 中林智之著「基礎から学ぶ組み込みRust」シーアンドアール研究所出版 [](https://qiita.com/shiracamus/items/fd35c685e9679323471f)