---
# System prepended metadata

title: '卒研経過報告 #4'

---

# 卒研経過報告 #4
Rustによる組み込みプログラミング
マイコンWio terminalを用いたRustとC言語の信頼性，安全性の比較検証、考察

team member : 子安，小森 
[先週のメモ](https://hackmd.io/@Fteam/Bygw24OXK)
[子安卒論](https://ja.overleaf.com/project/613aadc9c3a8ceec0e18338b)

## 研究の目的
この研究ではこれまで主に組込みソフトウエア開発に使われてきたC/C++と
それに替わる有効な選択肢として、注目されているRust言語との
信頼性や安全性など様々な面から比較検証を行う。

## memo
Rustで共有参照を実現するふた通りの方法（借用と参照カウントrc,arc）を理解すること、共有参照時には書き込みを禁止する理由を理解するために読み手書き手の問題を理解すること

## 検証
- **借用**
変数を参照することで、所有権を移動させずに、所有権を持つ変数以外から値へアクセスできる。
不変参照：参照元の読み出しのみできる
可変参照：参照元の値の書き換えができる

不変参照
![](https://i.imgur.com/siz31ks.png)


可変参照
![](https://i.imgur.com/7jbV3YC.png)

rustの場合
![](https://i.imgur.com/MtK23JK.png)

他の言語
![](https://i.imgur.com/hnjWMB5.png)

＜まとめ＞
共有参照：参照している間は、所有者でも値の変更禁止
➡参照しているほうが読み込んでいる時に値が変わるとデータ競合が起きる
可変参照：可変参照がある場合、排他アクセスとなり、所有者でも値の読み書き禁止
➡同時に値が変更されるのを防ぐため

共有参照と可変参照は複数で読み込むか、一つで書き込むかに限られ
オブジェクトに対する、読み込みと書き込みが同時に起きないようにしている
➡データ競合（読み書きの衝突）が起きないようにしている
　➡安全性の保証

- **参照カウント**
値一つに対して所有権一人という所有権システムの性質は
「参照している値aを使い終えるまで、生存してほしい時など」に不便
そこで参照カウント rc型
➡同一のデータを複数の値で所有できる
![](https://i.imgur.com/3RpHzOw.png)

rustではデータの競合が起きないように、値の共有と書き換えを同時にできないようになっているため
rc型で同じオブジェクトを指している限り、値の変更はできない。


### まとめ
- python：値の書き換えが起こると...
データの読み書きの衝突が起こると安全性に問題が発生する
同時に書き込み、書き込み中の読み出し等

- rust:共有したら書き込みを禁止するわけ
変数の書き込みを一方のみにすることでデータ競合を発生させないようにする
可変性：変数を書き換えることの可否
借用規則：データ競合を発生させないようにする規則




## 参考文献
[1] [公式ドキュメント](https://doc.rust-jp.rs/book-ja/foreword.html)
[2] 中林智之著「基礎から学ぶ組み込みRust」シーアンドアール研究所出版