Superiority of Rust

F4a94c818da7c943420763ba0541d0cf?s=47 wshino
April 27, 2019

Superiority of Rust

F4a94c818da7c943420763ba0541d0cf?s=128

wshino

April 27, 2019
Tweet

Transcript

  1. 実務から見たRustの優位 性
 Powered by DMM Blockchain Labs 1

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

    Engineer ・I really love Roller Coasters. @shinanonozenji_ 2
  3. 書籍紹介 - Publishing
 @ DMM.com 3

  4. Rustとは - What is Rust
 @ DMM.com • システムプログラミング言語 ◦

    OS ◦ ドライバ ◦ Linker ◦ not アプリケーション向け言語 • コンパイラが超優秀 4
  5. どういう用途に適しているか - What is suitable for
 @ DMM.com • 高パフォーマンス

    • 限られたリソース • 安全に稼働する要求 5
  6. どこで使われてるのか - Where Rust is used
 @ DMM.com • npmjs.com

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

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

    ◦ ゼロコスト抽象化 • 安全性 ◦ 型安全 ◦ メモリ安全 • 並行性 ◦ スレッド安全 8
  9. 私たちはなぜ使っているか - 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
  10. Cryptoプロジェクトとの相性 - Compatibility
 @ DMM.com • 不具合は資産の損失に繋がるため安全なコードを書きたい • ノードは安定稼働を求められる •

    Cの偉大なライブラリを使える(暗号ライブラリはC実装が多い 10
  11. 高速性
 11

  12. 高速性 - High performance
 @ DMM.com • 高速性 ◦ Garbage

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

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

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

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

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

    オーバーヘッドを限りなく小さくする技術 • コンパイル時に最適化を行う • あとで少し出てきます 17
  18. 安全性
 18

  19. 安全性 - Safety
 @ DMM.com • 高速性 ◦ Garbage Collectionを使わない

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

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

    大抵のnullのある言語のコンパイラはnullに対して無力 • 動かして初めてわかる不具合 ◦ わかるならまだ良い ◦ もしも10年後に起きる不具合だったら? 21
  22. 10億ドル規模の損失をもたらす過ち - $1B mistake
 @ DMM.com • Tony Hoareの言葉 22

  23. nullを使わないメソッド - Option
 @ DMM.com • あるかないかを表現する型 Optionを使う 23

  24. (補足)文と式 - Statements and expressions
 @ DMM.com • Rustは式言語 ◦

    式は値を返す ◦ 文は値を返さない(文末にセミコロン 式 文 24
  25. メモリ安全 - Memory-safe
 @ DMM.com • 所有権 • 参照 •

    ライフタイム 25
  26. 所有権 - Ownership
 @ DMM.com • 値の所有権は移動していく 26

  27. 参照と借用- References and Borrowings
 @ DMM.com • 所有されている値を参照する ◦ 不変

    ◦ 可変 27
  28. 不変 - Immutable
 @ DMM.com • &で不変の借用、値を書き換えることはできない 28

  29. 可変 - Mutable
 @ DMM.com • &mutで可変の借用、値を書き換えることができる 29

  30. 借用のルール - The Rules 
 @ DMM.com 1. 不変は複数個存在できる 2.

    可変はひとつだけ存在できる 3. 1.2.のルールは同時に満たせない Either or 30
  31. なぜ可変はひとつだけ?
 @ DMM.com • 意図しない値になる可能性 • 並行処理で大きな問題になる • 複数人でお絵描きするツールではなにが起きるか 31

  32. なぜ可変と不変が共存できない?
 @ DMM.com • なぜ可変と不変が共存できない? • 渡されたデータが処理している間に書き換わる • 契約書を読んでる最中に内容が変化したら •

    小説を読んでる最中に編集者が校正をしていたら? 32
  33. ライフタイム - Lifetime
 @ DMM.com • 変数はスコープの中でしか生きられない t のライフタイム 33

  34. ライフタイムにおける参照関係
 @ DMM.com • yへの参照はxと同じでないといけない y のライフタイム 34

  35. 使いにくいのでは
 35

  36. 安心してください。Copyはあります
 @ DMM.com • プリミティブ型はCopyトレイトを持つ • トレイトの説明は後ほど 36

  37. 生産性と柔軟性
 37

  38. ジェネリクス - Generics
 @ DMM.com • 型を抽象化してメソッドを作成できる 38

  39. 構造体 - Struct
 @ DMM.com • 値を持たない、フィールド名を持たない、通常の3種類 39

  40. 構造体のジェネリクス - Generic structs
 @ DMM.com • あらゆる型で構造体を定義できる 40

  41. 構造体のメソッド - Generic functions
 @ DMM.com • impl 構造体名の中にメソッドを書く 41

  42. 構造体のメソッド - Structs functions
 @ DMM.com • selfを渡したメソッドは 構造体. で呼ぶ

    • selfを渡さないメソッドは 構造体:: で呼ぶ 42
  43. 列挙型 - Enums
 @ DMM.com • Enumerationとか直和とかいわれる • 列挙された値のどれかひとつを表す •

    例:私の健康状態は {正常、眠い、体調悪い} のどれか or or 43
  44. よく使う列挙型 - Major enums
 @ DMM.com • Option ◦ 値がある

    -> Some ◦ 値がない -> None • Result ◦ 処理が成功 -> Ok ◦ 処理が失敗 -> Err 44
  45. 列挙型をパターンマッチ - Pattern match
 @ DMM.com 45

  46. トレイト - Traits
 @ DMM.com • 構造体の振る舞いを決める仕組み ◦ 他の言語では型クラスなどと言われる ◦

    コンパイル時にインライン展開される • ゼロコスト抽象化の一種 46
  47. BitcoinとEthereumはCryptoの振る舞いをする
 @ DMM.com 47

  48. トレイト境界 - Bounds
 @ DMM.com • 関数に渡す型をトレイトで定める • そのトレイトを実装している型を引数で取れる 48

  49. 並行性
 49

  50. 並行性 - Concurrency
 @ DMM.com • 高速性 ◦ Garbage Collectionを使わない

    ◦ ゼロコスト抽象化 • 安全性 ◦ 型安全 ◦ メモリ安全 • 並行性 ◦ スレッド安全 50
  51. マルチスレッド - Multi thread
 @ DMM.com • プログラムを並列で走らせて高速化する手法 • バグを作り込んでしまうとデバッグが難しい

    • 100人で会計処理をするとどうなるか 51
  52. スレッド安全 - Thread-safe
 @ DMM.com • 所有と借用のルールにより実現 • 複数スレッドで同時書き込みはできない •

    複数スレッドが参照する値は変化しない Either or 52
  53. 補足
 53

  54. ビルドツール Cargo
 @ DMM.com • 雛形の作成 • モジュール依存関係の解決 • ビルドターゲットの変更

    54
  55. WebAssembly
 @ DMM.com • ビルドターゲットを変更するだけ • $ rustup target add

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

    • プリミティブ型、コレクション • クロージャ • パターンマッチの更なる使い方 • 便利な省略記法 • メモリ配置 • マクロ • FFI 56
  57. どう学習するか - 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
  58. Rustを使っての感想 - My opinion
 @ DMM.com • 抽象的に書ける • 安心して実行できる

    • いろんな言語の良いところを持ってきている • マクロがすごく便利(なお、開発は辛い 58
  59. 総括 - Conclusion
 @ DMM.com • 大丈夫です、コンパイラを信じよう • コンパイル通るまでの作業は正しいコードに近づいてる証拠 •

    組み込みでもWeb APIサーバーまで広く使える • ビルドツールは優秀 59
  60. Thank you for the attention.
 Powered by DMM Blockchain Labs

    60