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

Superiority of Rust

Avatar for wshino wshino
April 27, 2019

Superiority of Rust

Avatar for wshino

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