# 卒研経過報告 #13 Rustによる組み込みプログラミング マイコンWio terminalを用いたRustとC言語の信頼性,安全性の比較検証、考察 [先週のレジュメ](https://hackmd.io/@Fteam/ryTLmCpuF) ### 型状態プログラミング 簡単なステートマシンの作成を行った.状態の移り変わりを図面化したものである. 今回の状態遷移図を以下に示した.オブジェクトを4つ用意し,初期状態AからB,C,Dと遷移しBに戻る.またBからDなどの動作を起こすことはない. **状態遷移図** ![](https://i.imgur.com/IQALVYf.png) ```rust= #[derive(Debug)] struct State<S>{ inner: S } #[derive(Debug)] struct A; #[derive(Debug)] struct B; #[derive(Debug)] struct C; #[derive(Debug)] struct D; impl State<A>{ pub fn new() -> State<A>{ State{inner: A{}} } } impl State<A>{ pub fn next(self) -> State<B>{ State{inner: B{}} } } impl State<B>{ pub fn next(self) -> State<C>{ State{inner: C{}} } } impl State<C>{ pub fn next(self) -> State<D>{ State{inner: D{}} } } impl State<D>{ pub fn next(self) -> State<B>{ State{inner: B{}} } } fn main(){ let state = State::new().next().next().next().next(); //A -> B -> C -> D -> B println!("{:#?}", state); } ``` ``` State { inner: B, } ``` ### 参考文献 [The Embedded Rust Book](https://tomoyuki-nakabayashi.github.io/book/static-guarantees/typestate-programming.html) [](https://blog.yoshuawuyts.com/state-machines/) [](https://medium.com/swlh/rust-pushdown-automata-d37c2b1ae0c6) [](https://nju33.com/notes/rust/articles/Struct#par--JUUzJTgzJTg3JUUzJTgzJTk1JUUzJTgyJUE5JUUzJTgzJUFCJUUzJTgzJTg4JUUzJTgxJUE3JUU4JTg3JUFBJUU1JTg4JTg2JUUzJTgxJUE3JUU0JUJEJTlDJUU2JTg4JTkwJUUzJTgxJTk3JUUzJTgxJTlGJTIwU3RydWN0JTIwJUUzJTgxJUFGcHJpbnRsbiElRTMlODElQUElRTMlODElQTklRTMlODElQTclRTglQTElQTglRTclQTQlQkElRTMlODElOTUlRTMlODElOUIlRTMlODIlOEIlRTQlQkIlOTUlRTclQjUlODQlRTMlODElQkYlRTMlODElOEMlRTUlQUUlOUYlRTglQTMlODUlRTMlODElOTUlRTMlODIlOEMlRTMlODElQTYlRTMlODElODQlRTMlODElQkUlRTMlODElOUIlRTMlODIlOTMlRTMlODAlODIlRTMlODIlODIlRTMlODElOTclRTMlODElOUQlRTMlODElODYlRTMlODElODQlRTMlODElODYlRTQlQkIlOTUlRTclQjUlODQlRTMlODElQkYlRTMlODElOEMlRTMlODElQkIlRTMlODElOTclRTMlODElODQlRTUlQTAlQjQlRTUlOTAlODglRTMlODElQUYlMjMlNUJkZXJpdmUoRGVidWcpJTVEJUUzJTgyJTkyJTIwU3RydWN0JTIwJUU1JUFFJTlBJUU3JUJFJUE5JUUzJTgxJUFFJUU0JUI4JThBJUUzJTgxJUFFJUU4JUExJThDJUUzJTgxJUFCJUU2JTlCJUI4JUUzJTgxJThGJUUzJTgxJTkzJUUzJTgxJUE4JUUzJTgxJUE3JUU2JTlDJTgwJUU0JUJEJThFJUU3JThGJUJFJUUzJTgxJUFFJTIwRGVidWclMjAlRTYlQTklOUYlRTglODMlQkQlRTMlODIlOTIlRTUlOEYlOTYlRTMlODIlOEElRTglQkUlQkMlRTMlODIlOTMlRTMlODElQTclRTMlODElOEYlRTMlODIlOEMlRTMlODElQkUlRTMlODElOTklRTMlODAlODI=)