Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Superiority of Rust

wshino
April 27, 2019

Superiority of Rust

wshino

April 27, 2019
Tweet

More Decks by wshino

Other Decks in Technology

Transcript

  1. 自己紹介 - About me
 @ DMM.com Shinohara Wataru ・DMM.com Blockchain

    Engineer ・I really love Roller Coasters. @shinanonozenji_ 2
  2. Rustとは - What is Rust
 @ DMM.com • システムプログラミング言語 ◦

    OS ◦ ドライバ ◦ Linker ◦ not アプリケーション向け言語 • コンパイラが超優秀 4
  3. どこで使われてるのか - Where Rust is used
 @ DMM.com • npmjs.com

    • dropbox • Firefoxのレンダリングエンジン • データベース • etc. 6
  4. なぜできたのか - Why Rust was born
 @ DMM.com • C/C++の複雑さへの解決策

    • あまりに多くの大砲を与えたためにユーザーは自分の足を撃ち抜いてしま う C/C++に死を https://jp.techcrunch.com/2017/07/17/20170716death-to-c/ 7
  5. 特徴 - Feautures
 @ DMM.com • 高速性 ◦ Garbage Collectionを使わない

    ◦ ゼロコスト抽象化 • 安全性 ◦ 型安全 ◦ メモリ安全 • 並行性 ◦ スレッド安全 8
  6. 私たちはなぜ使っているか - Why reason we use it
 @ DMM.com •

    Substrate, Parity のため • その他GrinもRust • Crypto界隈ではRust利用プロジェクトが増加 • Web3の理念としてWebAssemblyの重要度の高まり Substrate: The platform for blockchain innovators https://github.com/paritytech/substrate paritytech/parity-ethereum https://github.com/paritytech/parity-ethereum mimblewimble/grin https://github.com/mimblewimble/grin Understanding Web 3 — A User Controlled Internet https://blog.coinbase.com/understanding-web-3-a-user-controlled-internet-a39c21cf83f3 9
  7. 高速性 - High performance
 @ DMM.com • 高速性 ◦ Garbage

    Collectionを使わない ◦ ゼロコスト抽象化 • 安全性 ◦ 型安全 ◦ メモリ安全 • 並行性 ◦ スレッド安全 12
  8. Garbage Collectionのメリット - Pros of GC
 @ DMM.com • メモリ管理を実行エンジンに任せる

    • メモリを確保し続けて、タイミングがきたら解放する • 人がメモリを管理するコストを下げる 13
  9. Garbage Collectionの種類 - Types of GC
 @ DMM.com • 参照カウント

    • Copy • Mark and Sweep • その他いろいろ 14
  10. JVM(Java Virtual Machine)のGC - GC in JVM
 @ DMM.com •

    Serial GC • Parallel GC • Concurrent Mark and Sweep GC • G1GC • Full GC 15
  11. GCのデメリット - Cons of GC
 @ DMM.com • タイミングを予測することは困難 •

    意図する挙動にならないことがある • Full GCは完全にシステムが停止する時間がある • Stop The World 16
  12. ゼロコスト抽象化 - Zero cost abstraction
 @ DMM.com • プログラムの抽象度が高いと、オーバーヘッドコストが高くなる •

    オーバーヘッドを限りなく小さくする技術 • コンパイル時に最適化を行う • あとで少し出てきます 17
  13. 安全性 - Safety
 @ DMM.com • 高速性 ◦ Garbage Collectionを使わない

    ◦ ゼロコスト抽象化 • 安全性 ◦ 型安全 ◦ メモリ安全 • 並行性 ◦ スレッド安全 19
  14. 型安全 - Type-safe
 @ DMM.com • コンパイラが型を厳密にチェックする • nullを使わない •

    型の推論機能があるため、明示しなくても良い • パターンマッチ(あとで出ます 20
  15. 人類のnullとの戦い - Battle of null
 @ DMM.com • 未初期化で意図しない動作 •

    大抵のnullのある言語のコンパイラはnullに対して無力 • 動かして初めてわかる不具合 ◦ わかるならまだ良い ◦ もしも10年後に起きる不具合だったら? 21
  16. (補足)文と式 - Statements and expressions
 @ DMM.com • Rustは式言語 ◦

    式は値を返す ◦ 文は値を返さない(文末にセミコロン 式 文 24
  17. 借用のルール - The Rules 
 @ DMM.com 1. 不変は複数個存在できる 2.

    可変はひとつだけ存在できる 3. 1.2.のルールは同時に満たせない Either or 30
  18. よく使う列挙型 - Major enums
 @ DMM.com • Option ◦ 値がある

    -> Some ◦ 値がない -> None • Result ◦ 処理が成功 -> Ok ◦ 処理が失敗 -> Err 44
  19. 並行性 - Concurrency
 @ DMM.com • 高速性 ◦ Garbage Collectionを使わない

    ◦ ゼロコスト抽象化 • 安全性 ◦ 型安全 ◦ メモリ安全 • 並行性 ◦ スレッド安全 50
  20. WebAssembly
 @ DMM.com • ビルドターゲットを変更するだけ • $ rustup target add

    wasm32-unknown-unknown • $ cargo build --target wasm32-unknown-unknown 55
  21. 話さなかったこと - I did not speak
 @ DMM.com • クレート

    • プリミティブ型、コレクション • クロージャ • パターンマッチの更なる使い方 • 便利な省略記法 • メモリ配置 • マクロ • FFI 56
  22. どう学習するか - How to learn Rust
 @ DMM.com • カニの本を読む

    • プログラミング言語Rustを読む プログラミングRust https://www.oreilly.co.jp/books/9784873118550/ プログラミング言語Rust https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/ 57
  23. Rustを使っての感想 - My opinion
 @ DMM.com • 抽象的に書ける • 安心して実行できる

    • いろんな言語の良いところを持ってきている • マクロがすごく便利(なお、開発は辛い 58