安全なシステムプログラミング言語Rustへの招待
安全なシステムプログラミング言語Rustへの招待
About Me
- κeen
- @blackenedgold
- Github: KeenS
- GitLab: blackenedgold
- Idein Inc.のエンジニア
- 2年半くらい仕事でRustを書いている
- Lisp, ML, Rust, Shell Scriptあたりを書きます
- 実践Rust入門の共著者
Rustって言語があるよ
- システムプログラミング言語
- 2015年に1.0.0がリリース
- リリース前に破壊的変更しまくったので1.0以降はかなり安定してる
- 0.x時代はもちろんのこと、1.0-alphaのあとに1.0-alpha2が出たりもした
- 6週間毎にコンパイラのリリースで、今は1.39.0
- C++03, C++11 みたいなノリでRust 2015とRust 2018の2つの仕様がある
- コンパイラはずっと両方サポート
事例
システムプログラミング言語っぽさ
メモリ配置
この構造体のサイズは?
メモリ配置
デフォルトでサイズが最小になるように詰める
メモリ配置
この構造体のサイズは?
メモリ配置
をつけると見慣れたメモリ配置になる
普通のRust
普通のRust
普通のRust
トレイト
普通のRust
普通のRust
普通のRust
普通のRust
普通のRust
普通のRust
Why Rust (over C/C++)?
速度と機能の話
Rustの安全性について
安全 ≒ 未定義動作を踏まない
範囲外アクセス
範囲外アクセス
所有権
所有権
所有権
所有権
借用
借用
借用とライフタイム
借用と変更
借用と変更
借用と変更
借用と変更
```console error[E0596]: cannot borrow `v` as mutable, as it is not declared as mutable --> src/main.rs:4:9 | 2 | let v = vec![1, 2, 3]; | - help: consider changing this to be mutable: `mut v` 3 | for e in &v { 4 | v.push(*e); | ^ cannot borrow as mutable ```
Nullableな値
所有権の例外
所有権とか
所有権とか
所有権小話1
所有権小話2
Rustの進歩
Rustの進歩
所有権をopt out
所有権をopt out
並列
```console --> src/main.rs:9:14 | 9 | let handle = thread::spawn(|| { | ^^^^^^^^^^^^^ `std::rc::Rc
並列
並列の安全性の舞台裏
安全性を捨てるとき
安全性を捨ててみる
の仕組み
の使いどころ
活発なコミュニティ
コミュニティ中心
まとめ
1
安全なシステムプログラミング言語Rustへの招待
IIJ Labセミナー