---
# System prepended metadata

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

---

# 卒研経過報告 #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=)