Rust入門以前:発表版

 Rust入門以前:発表版

第十回 カーネル/VM探検隊の発表で使ったスライド。

動画URL: https://www.youtube.com/watch?v=i17doLVXlYU

00f51b38603dd4c01da70de388b2e51c?s=128

Masanori Ogino

May 25, 2014
Tweet

Transcript

  1. Rust 入門以前 Masanori Ogino (@omasanori) 2014-05-25 Masanori Ogino (@omasanori) Rust

    入門以前
  2. 誰? @omasanori 長崎在住の情報系学生 (B3) カーネル/VM探検隊初参加 というよりIT系イベント初参加 メインセッション(50 分)を割り当てるのはいくらなんでもハード過ぎるのでは… Masanori Ogino

    (@omasanori) Rust 入門以前
  3. 想定している聴衆 簡単な C 言語のコードを読める (他の言語の話も登場するが、知らなくても OK) コンピュータと OS の構成や役割について知っている (情報系の学部一年生が学ぶであろう範囲で十分。

    本で言うと共立出版『情報・電子入門シリーズ』とか オーム社『IT Text シリーズ』 『ディジタル作法』辺り) 知らない文法のコードが見えても怖気づかない (そこまで奇抜な文法ではないが、C 言語とは少し違う) Masanori Ogino (@omasanori) Rust 入門以前
  4. 注意事項 この発表は Rust のチュートリアルではありません。文法の細部 は解説しません。 この発表には私の見解が含まれています。開発者やコミュニティ の見解を代表するものではありません。 Rust の仕様は確定していません。この発表のサンプルコードは 近い将来に動作しなくなる可能性があります。以下のバージョン

    でサンプルコードの動作を確認しました。 rustc 0.11.0-pre (9e244d7 2014-05-23 02:06:25 -0700) Masanori Ogino (@omasanori) Rust 入門以前
  5. Rust Rust は Masanori Ogino (@omasanori) Rust 入門以前

  6. Rust Rust はシステムプログラミング言語である。 Masanori Ogino (@omasanori) Rust 入門以前

  7. Rust: システムプログラミング言語 システムプログラミング ⇔ アプリケーションプログラミング Masanori Ogino (@omasanori) Rust 入門以前

  8. システムプログラミングでは 資源の制約が厳しい … こともある Masanori Ogino (@omasanori) Rust 入門以前

  9. システムプログラミングでは 資源の制約が厳しい ↓ 消費量を予測できる 確保と解放を予測できる Masanori Ogino (@omasanori) Rust 入門以前

  10. システムプログラミングでは OSがあるとは限らない (ex. 私が作っているのはOSだ) Masanori Ogino (@omasanori) Rust 入門以前

  11. OS があるとは限らない たとえば、 ファイル I/O → ファイルシステムは存在しないかも ネットワーク I/O →

    ネットワークスタックは存在しないかも メモリの割り当て → malloc(3) は存在しないかも マルチタスク(スレッド) → スケジューラは存在しないかも Masanori Ogino (@omasanori) Rust 入門以前
  12. システムプログラミングでは OSがあるとは限らない ↓ 標準ライブラリを取り外し可能に (フリースタンディング環境) Masanori Ogino (@omasanori) Rust 入門以前

  13. Rust: システムプログラミング言語 システムプログラミング言語 Masanori Ogino (@omasanori) Rust 入門以前

  14. システムプログラミング言語 アセンブリ言語 C言語 C++ etc. Masanori Ogino (@omasanori) Rust 入門以前

  15. Rust: システムプログラミング言語 なぜRustは生まれたのか? Masanori Ogino (@omasanori) Rust 入門以前

  16. なぜ Rust は生まれたのか? Graydon Hoare Rust の初期設計者 Mozilla Corporation Masanori

    Ogino (@omasanori) Rust 入門以前
  17. なぜ Rust は生まれたのか? Graydon Hoare 曰く、 他のプログラミング言語で知られ、また愛されている 多くの明白に良いアイデアが、広く使われている システム言語には取り込まれていないか、 非常に貧弱な(安全でなく、並行性になじまない)

    メモリモデルを持つプログラミング言語に 組み込まれている。 出典: http://www.infoq.com/news/2012/08/Interview-Rust 翻訳・強調は筆者による。 Masanori Ogino (@omasanori) Rust 入門以前
  18. Rust Rust は他のプログラミング言語の良いアイデアを取り入れた システムプログラミング言語である。 Masanori Ogino (@omasanori) Rust 入門以前

  19. 他のプログラミング言語の良いアイデア C++ Masanori Ogino (@omasanori) Rust 入門以前

  20. 他のプログラミング言語の良いアイデア: C++ 参照と所有権 Masanori Ogino (@omasanori) Rust 入門以前

  21. C のポインタ void do_something(my_state_t *state) { // state の NULL

    チェックは呼び出し側の責任? for (size_t i = 0; i < state->chunks_count; ++i) { // chunks[i] は NULL でないと保証されている? do_that(state->chunks[i]->heap); // do_that は state->chunks[i]->heap の // NULL チェックをしているのだろうか? } } 誰かが NULL チェックをしなければならない … 誰が?(cf. 防御的プログラミング) Masanori Ogino (@omasanori) Rust 入門以前
  22. Rust のポインタ Rust には三種類のポインタが存在する 占有ポインタ (owning pointer) 参照 (reference) 生ポインタ

    (raw pointer) →このセクションでは説明しない (他にも Rc<T>や Arc<T>、Gc<T>などがある。 しかし、今回は説明しない。Gc<T>は未だに本来意図した実装になっていないし… ) Masanori Ogino (@omasanori) Rust 入門以前
  23. 占有ポインタ 占有ポインタは ヒープ上の値の所有権を持つ Masanori Ogino (@omasanori) Rust 入門以前

  24. 占有ポインタ 同一の値の所有権を持つ 占有ポインタは一つだけ Masanori Ogino (@omasanori) Rust 入門以前

  25. 占有ポインタ 占有ポインタ std::unique_ptr Masanori Ogino (@omasanori) Rust 入門以前

  26. 占有ポインタ Box<T> T 占有ポインタ (owning pointer) 被占有ボックス (owned box) Masanori

    Ogino (@omasanori) Rust 入門以前
  27. 占有ポインタ // int 型の値をヒープ上に確保する let a: Box<int> = box 10;

    println!("a = {}", a); //=> a = 10 被占有ボックスはヒープ上に置かれる Masanori Ogino (@omasanori) Rust 入門以前
  28. 占有ポインタ // a の参照先の所有権が b に移動 let b: Box<int> =

    a; // a はもはや何も占有していないので // 次のコードはコンパイルエラー // println!("a = {}", a); println!("b = {}", b); //=> b = 10 参照のコピー(シャローコピー)は所有権の移動 Masanori Ogino (@omasanori) Rust 入門以前
  29. 占有ポインタ Box<T> T 占有ポインタ (owning pointer) 被占有ボックス (owned box) Box<T>

    所有権の移動 Masanori Ogino (@omasanori) Rust 入門以前
  30. 占有ポインタ let c: Box<int> = b.clone(); // b と c

    は別の領域を占有している println!("b = {}", b); //=> b = 10 println!("c = {}", c); //=> c = 10 参照先を含めたコピー(ディープコピー)は 独立したポインタと値の組を作る Masanori Ogino (@omasanori) Rust 入門以前
  31. 参照 参照は所有権を持たない (よって所有権を要求しない) Masanori Ogino (@omasanori) Rust 入門以前

  32. 参照 let a: int = 10; let b: &int =

    &a; println!("a = {}", a); //=> a = 10 println!("b = {}", b); //=> b = 10 &var で var への参照 Masanori Ogino (@omasanori) Rust 入門以前
  33. 参照 let a: Box<int> = box 10; // a: Box<int>

    // *a: int // &*a: &int let b: &int = &*a; // a は所有権を失っていない println!("a = {}", a); //=> a = 10 println!("b = {}", b); //=> b = 10 Masanori Ogino (@omasanori) Rust 入門以前
  34. 参照 ? Masanori Ogino (@omasanori) Rust 入門以前

  35. 参照 占有してない? Masanori Ogino (@omasanori) Rust 入門以前

  36. 占有ポインタの「占有」 参照は所有権を要求しない ↓ 占有ポインタは所有権を失わない Masanori Ogino (@omasanori) Rust 入門以前

  37. 占有ポインタの「占有」 占有ポインタであって 専有ポインタではない Masanori Ogino (@omasanori) Rust 入門以前

  38. 占有ポインタと参照 Box<T> T 占有ポインタ (owning pointer) 被占有ボックス (owned box) &T

    参照 (reference) Masanori Ogino (@omasanori) Rust 入門以前
  39. 占有ポインタと参照 参照を作ってから所有権を移動したらどうなる? fn main() { // 次のコードを考えてみよう let a: Box<int>

    = box 10; let b: &int = &*a; // a が占有する int 型の値を参照 let c: Box<int> = a; // a の持つ所有権は c に移動する // 値の所有者が変わっても b は有効なのか? } Masanori Ogino (@omasanori) Rust 入門以前
  40. 占有ポインタと参照 Box<T> T 占有ポインタ (owning pointer) 被占有ボックス (owned box) &T

    参照 (reference) Box<T> 所有権の移動 ? Masanori Ogino (@omasanori) Rust 入門以前
  41. 占有ポインタと参照 実際にやってみると ref2.rs:5:9: 5:10 error: cannot move out of `a`

    because it is borrowed ref2.rs:5 let c: Box<int> = a; // a の持つ所有権は c に移動する ^ ref2.rs:4:20: 4:22 note: borrow of `*a` occurs here ref2.rs:4 let b: &int = &*a; // a が占有する int 型の値を参照 ^~ error: aborting due to previous error 参照に値を「貸して」いる間は 所有権を移動できない Masanori Ogino (@omasanori) Rust 入門以前
  42. 他のプログラミング言語の良いアイデア: C++ 決定論的なデストラクタ Masanori Ogino (@omasanori) Rust 入門以前

  43. 決定論的なデストラクタ: おさらい リソースの制約が厳しい環境 ↓ 予測可能性 Masanori Ogino (@omasanori) Rust 入門以前

  44. 決定論的なデストラクタ: おさらい 「いらなくなったメモリ? 解放するよ、いつかね」 ↓ メモリ使い切った… Masanori Ogino (@omasanori) Rust

    入門以前
  45. Rust のデストラクタ 原則:有効範囲を出るときに解放 (例外はある。Rc<T>など) Masanori Ogino (@omasanori) Rust 入門以前

  46. Rust のデストラクタ fn main() { { let a: Box<int> =

    box 10; println!("a = {}", a); //=> a = 10 } // ここに来る時点で a の参照先は解放されている } Masanori Ogino (@omasanori) Rust 入門以前
  47. クイズ 次のコードはどうなる? fn main() { let a: &int; { let

    b: Box<int> = box 10; a = &*b; } // b の有効範囲はここまで println!("a = {}", a); // use-after-free の予感! } Masanori Ogino (@omasanori) Rust 入門以前
  48. クイズ 1 実行時にどこかの何かを読み込んだり SEGV ったりする 2 a の有効範囲まで b の参照先を生かす

    3 コンパイルエラー Masanori Ogino (@omasanori) Rust 入門以前
  49. 少し脱線 const vs. mut Masanori Ogino (@omasanori) Rust 入門以前

  50. const vs. mut C++: const Masanori Ogino (@omasanori) Rust 入門以前

  51. const vs. mut: C++の場合 変数は原則的に再代入を許す 値は原則的に変更を許す Masanori Ogino (@omasanori) Rust

    入門以前
  52. const vs. mut: C++の場合 再代入・変更を許さない場合は constを付ける Masanori Ogino (@omasanori) Rust

    入門以前
  53. const vs. mut Rust: mut Masanori Ogino (@omasanori) Rust 入門以前

  54. const vs. mut: Rust の場合 変数は原則的に再代入を許さない 値は原則的に変更を許さない Masanori Ogino (@omasanori)

    Rust 入門以前
  55. const vs. mut: Rust の場合 再代入・変更を許す場合は mutを付ける (mut を only

    にしようという提案がある。 変更の可否は所有権や参照の有無によって変化するため。 ) Masanori Ogino (@omasanori) Rust 入門以前
  56. const vs. mut どちらが良いか? Masanori Ogino (@omasanori) Rust 入門以前

  57. const vs. mut: どちらが良いか 私の意見 Masanori Ogino (@omasanori) Rust 入門以前

  58. const vs. mut: どちらが良いか 一方が他方と比べて 圧倒的に優れている ということはない Masanori Ogino (@omasanori)

    Rust 入門以前
  59. const vs. mut: どちらが良いか とはいえ、この違いは プログラミングの スタイルに影響を与えうる (なんだか Rubyist みたいな切り口になってきた…

    ) Masanori Ogino (@omasanori) Rust 入門以前
  60. const vs. mut: どちらが良いか 怠惰な人(ex. 私)は (読みにくくならない範囲で) タイプ数が少ない方を好む Masanori Ogino

    (@omasanori) Rust 入門以前
  61. const vs. mut: どちらが良いか 仮説: Rust は不要な再代入を避けるような プログラミングスタイルを選ぶように プログラマを誘導する Masanori

    Ogino (@omasanori) Rust 入門以前
  62. const vs. mut: どちらが良いか for (int i = 1; i

    < 10; ++i) { int square = i * i; printf("%d\n", square); } const を付けなくても動くコードに const を付けたい人? Masanori Ogino (@omasanori) Rust 入門以前
  63. const vs. mut: どちらが良いか 良い開発者 Masanori Ogino (@omasanori) Rust 入門以前

  64. const vs. mut: どちらが良いか for i in range(1, 10) {

    let square = i * i; println!("{}", square); } mut を付けなくても動くコードに mut を付けたい人? Masanori Ogino (@omasanori) Rust 入門以前
  65. const vs. mut: どちらが良いか 面白い人 Masanori Ogino (@omasanori) Rust 入門以前

  66. const vs. mut: どちらが良いか for i in range(1, 10) {

    let mut square = i * i; println!("{}", square); } Masanori Ogino (@omasanori) Rust 入門以前
  67. const vs. mut: どちらが良いか mut-to-imut.rs:8:13: 8:23 warning: variable does not

    need to be mutable, #[warn(unused_mut)] on by default mut-to-imut.rs:8 let mut square = i * i; ^~~~~~~~~~ rustcに冗談は通じない (警告を無効にしない限り) (gcc や clang にある同等の警告オプションを ご存じの方はいらっしゃいませんか。 -Wall -Wextra では警告されませんでした) Masanori Ogino (@omasanori) Rust 入門以前
  68. const vs. mut: どちらが良いか mutable by default派の 意見も聞きたい Masanori Ogino

    (@omasanori) Rust 入門以前
  69. 他のプログラミング言語の良いアイデア MLKit (IT Univ. of Copenhagen) Cyclone (AT&T) Masanori Ogino

    (@omasanori) Rust 入門以前
  70. 他のプログラミング言語の良いアイデア: MLKit & Cyclone 区間 (region) Masanori Ogino (@omasanori) Rust

    入門以前
  71. C のポインタ: dangling pointer bugs /* 出典:"A 30-minute Introduction to

    Rust" */ int* dangling(void) { int i = 1234; return &i; } int add_one(void) { int* num = dangling(); return *num + 1; } Masanori Ogino (@omasanori) Rust 入門以前
  72. C のポインタ: use-after-free bugs void use_after_free(void) { int *data =

    malloc(sizeof(struct something)); if (!data) return; /* ... */ free(data); printf("%d\n", data->count); } Masanori Ogino (@omasanori) Rust 入門以前
  73. C のポインタ: double free bugs void double_free(void) { int *data

    = malloc(sizeof(struct something)); if (!data) goto error; /* ... */ free(data); error: /* ... */ free(data); } Masanori Ogino (@omasanori) Rust 入門以前
  74. C のポインタ 「誰もこんなコードは書かない」 Masanori Ogino (@omasanori) Rust 入門以前

  75. C のポインタ http://opensslrampage.org/ Masanori Ogino (@omasanori) Rust 入門以前

  76. 区間 値や参照の有効範囲 Rust: 生存期間 (lifetime) Masanori Ogino (@omasanori) Rust 入門以前

  77. 生存期間 // 出典: "A 30-minute Introduction to Rust" fn dangling()

    -> &int { let i = 1234; return &i; } fn add_one() -> int { let num = dangling(); return *num + 1; } fn main() { add_one(); } Masanori Ogino (@omasanori) Rust 入門以前
  78. 生存期間 dangling.rs:4:13: 4:14 error: `i` does not live long enough

    dangling.rs:4 return &i; ^ dangling.rs:2:23: 5:2 note: reference must be valid for the anonymous lifetime #1 defined on the block at 2:22... dangling.rs:2 fn dangling() -> &int { dangling.rs:3 let i = 1234; dangling.rs:4 return &i; dangling.rs:5 } dangling.rs:2:23: 5:2 note: ...but borrowed value is only valid for the block at 2:22 dangling.rs:2 fn dangling() -> &int { dangling.rs:3 let i = 1234; dangling.rs:4 return &i; dangling.rs:5 } error: aborting due to previous error Masanori Ogino (@omasanori) Rust 入門以前
  79. 生存期間 ?? Masanori Ogino (@omasanori) Rust 入門以前

  80. 生存期間 参照は生存期間を パラメータとして取れる Masanori Ogino (@omasanori) Rust 入門以前

  81. 他のプログラミング言語の良いアイデア ML Masanori Ogino (@omasanori) Rust 入門以前

  82. 他のプログラミング言語の良いアイデア: ML 式としての制御構造 Masanori Ogino (@omasanori) Rust 入門以前

  83. 式としての制御構造 式と文 Masanori Ogino (@omasanori) Rust 入門以前

  84. 式としての制御構造 「好きな関数:if」 Masanori Ogino (@omasanori) Rust 入門以前

  85. 式としての制御構造 Rubyのifは関数ではない Masanori Ogino (@omasanori) Rust 入門以前

  86. 式としての制御構造 あらゆるプログラミング言語の ifは関数ではないとは言えない Masanori Ogino (@omasanori) Rust 入門以前

  87. 式としての制御構造 何が式で 何が文か Masanori Ogino (@omasanori) Rust 入門以前

  88. 式としての制御構造 何が関数で 何が関数でないか Masanori Ogino (@omasanori) Rust 入門以前

  89. 式としての制御構造 何が言語組み込みで 何がライブラリか Masanori Ogino (@omasanori) Rust 入門以前

  90. 式としての制御構造 それは言語による Masanori Ogino (@omasanori) Rust 入門以前

  91. 式としての制御構造 fn is_even_stmt(n: int) -> bool { if n %

    2 == 0 { return true; } else { return false; } } if文 Masanori Ogino (@omasanori) Rust 入門以前
  92. 式としての制御構造 fn is_even_expr(n: int) -> bool { return if n

    % 2 == 0 { true } else { false }; } if式 Masanori Ogino (@omasanori) Rust 入門以前
  93. 式としての制御構造 分岐もループも式 Masanori Ogino (@omasanori) Rust 入門以前

  94. 式としての制御構造 returnも式 Masanori Ogino (@omasanori) Rust 入門以前

  95. 式としての制御構造 大抵のものは式として使える Masanori Ogino (@omasanori) Rust 入門以前

  96. 式としての制御構造 ならば、何が文なのか? Masanori Ogino (@omasanori) Rust 入門以前

  97. 式としての制御構造 宣言文と式文 (式文:式の末尾に;を付ける) Masanori Ogino (@omasanori) Rust 入門以前

  98. 式としての制御構造 式の濫用はほどほどに (複雑な制御構造は式として使わない方が良い) Masanori Ogino (@omasanori) Rust 入門以前

  99. 他のプログラミング言語の良いアイデア: ML 代数的データ型 Masanori Ogino (@omasanori) Rust 入門以前

  100. 代数的データ型 値の集合としての型 Masanori Ogino (@omasanori) Rust 入門以前

  101. 代数的データ型 集合 + 集合 = 集合(直和) 集合 × 集合 =

    集合(直積) Masanori Ogino (@omasanori) Rust 入門以前
  102. 代数的データ型 型 + 型 = 型(直和型) 型 × 型 =

    型(直積型) Masanori Ogino (@omasanori) Rust 入門以前
  103. 代数的データ型 直和型 共用体 直積型 構造体 Masanori Ogino (@omasanori) Rust 入門以前

  104. 代数的データ型 「それなら、Cで十分じゃない?」 Masanori Ogino (@omasanori) Rust 入門以前

  105. 代数的データ型 型検査器の支援を受けやすい ↓ より安全に使える Masanori Ogino (@omasanori) Rust 入門以前

  106. 代数的データ型 型検査器を欺くのではなく 型検査器と協力しよう Masanori Ogino (@omasanori) Rust 入門以前

  107. 代数的データ型 enum Masanori Ogino (@omasanori) Rust 入門以前

  108. 代数的データ型 enum Status { Ok, Err } 列挙型としてのenum Masanori Ogino

    (@omasanori) Rust 入門以前
  109. 代数的データ型 // From src/libcore/result.rs // Result<T, E>は T か E

    の型の値を // 取れる→直和型 pub enum Result<T, E> { Ok(T), Err(E) } 列挙型 + コンストラクタで 直和型が表せる Masanori Ogino (@omasanori) Rust 入門以前
  110. 代数的データ型 // Pair<T1, T2>は T1 と T2 の // 値の組を作る→直積型

    enum Pair<T1, T2> { P(T1, T2) } 列挙型 + コンストラクタで 直積型が表せる (Rust にはタプル(値の組)を表す型を直接サポートしている) Masanori Ogino (@omasanori) Rust 入門以前
  111. 代数的データ型 代数的データ型は難しくない (なぜ「代数的」なのかに疑問を持たなければ) (疑問を持った人→代数的構造、環・群・体で検索) Masanori Ogino (@omasanori) Rust 入門以前

  112. 他のプログラミング言語の良いアイデア: ML パターンマッチ Masanori Ogino (@omasanori) Rust 入門以前

  113. パターンマッチ 構造で分岐する Masanori Ogino (@omasanori) Rust 入門以前

  114. パターンマッチ fn factorial(n: int) -> int { // uses implicit

    return match n { 0 => 1, n => n * factorial(n - 1) // or, // n if n != 0 => n * factorial(n - 1) } } 数でも Masanori Ogino (@omasanori) Rust 入門以前
  115. パターンマッチ タプルでも Masanori Ogino (@omasanori) Rust 入門以前

  116. パターンマッチ 構造体でも Masanori Ogino (@omasanori) Rust 入門以前

  117. パターンマッチ 列挙型でも Masanori Ogino (@omasanori) Rust 入門以前

  118. パターンマッチ 代数的データ型でも Masanori Ogino (@omasanori) Rust 入門以前

  119. パターンマッチ 構造で分岐する Masanori Ogino (@omasanori) Rust 入門以前

  120. 他のプログラミング言語の良いアイデア: ML あと、let などの文法要素も ML 由来 (先日、The Definition of Standard

    ML の著者の一人は Rust を ML-like languages の一つとして紹介していた) Masanori Ogino (@omasanori) Rust 入門以前
  121. 他のプログラミング言語の良いアイデア Haskell Masanori Ogino (@omasanori) Rust 入門以前

  122. 他のプログラミング言語の良いアイデア: Haskell 型クラス Masanori Ogino (@omasanori) Rust 入門以前

  123. 型クラス 型クラスはクラスじゃない Masanori Ogino (@omasanori) Rust 入門以前

  124. 型クラス クラス:オブジェクトの分類 (class) Masanori Ogino (@omasanori) Rust 入門以前

  125. 型クラス クラス:値の分類 (class) Masanori Ogino (@omasanori) Rust 入門以前

  126. 型クラス 型クラス:型の分類 (class) Masanori Ogino (@omasanori) Rust 入門以前

  127. 型クラス Rust:トレイト (trait) Masanori Ogino (@omasanori) Rust 入門以前

  128. トレイト トレイトはデフォルト実装を持つ ことができる Masanori Ogino (@omasanori) Rust 入門以前

  129. トレイト シグネチャにトレイトを指定する Masanori Ogino (@omasanori) Rust 入門以前

  130. トレイト 型ではなくトレイトを指定する ↓ トレイトが提供する操作を持つ 任意の型を受け取れる Masanori Ogino (@omasanori) Rust 入門以前

  131. トレイト 数値のように加算でき(Add) 数値のように減算でき(Sub) … 数値のように〇〇できるならば それは数値として扱える Masanori Ogino (@omasanori) Rust

    入門以前
  132. トレイト 少し変わった標準提供トレイト Zero その型にとっての0を得る操作を 提供する One その型にとっての1を得る操作を 提供する Masanori Ogino

    (@omasanori) Rust 入門以前
  133. トレイト 加算が定義され(Add) 加法の単位元を持つ(Zero) ならば和( )を定義できる Masanori Ogino (@omasanori) Rust 入門以前

  134. 他のプログラミング言語の良いアイデア Erlang Masanori Ogino (@omasanori) Rust 入門以前

  135. 他のプログラミング言語の良いアイデア: Erlang メッセージパッシング Masanori Ogino (@omasanori) Rust 入門以前

  136. メッセージパッシング 並行・並列プログラミング Masanori Ogino (@omasanori) Rust 入門以前

  137. メッセージパッシング 無視する訳にはいかない Masanori Ogino (@omasanori) Rust 入門以前

  138. メッセージパッシング データ競合、デッドロック、 スタベーション、線形スケール、 「超」線形スケール、 ロックフリー、ウェイトフリー、 偽共有、ABA問題、 うんたらかんたら Masanori Ogino (@omasanori)

    Rust 入門以前
  139. メッセージパッシング こわい Masanori Ogino (@omasanori) Rust 入門以前

  140. メッセージパッシング 各アプローチの不正確な紹介 (ツッコミポイント) Masanori Ogino (@omasanori) Rust 入門以前

  141. メッセージパッシング 何も共有しない Masanori Ogino (@omasanori) Rust 入門以前

  142. メッセージパッシング 間違いなく競合しない けど窮屈 Masanori Ogino (@omasanori) Rust 入門以前

  143. メッセージパッシング ロック Masanori Ogino (@omasanori) Rust 入門以前

  144. メッセージパッシング 皆さんお馴染み 正しくやるには注意深さが必要 合成性 (composability) の問題 Masanori Ogino (@omasanori) Rust

    入門以前
  145. メッセージパッシング ロックフリーなデータ構造 Masanori Ogino (@omasanori) Rust 入門以前

  146. メッセージパッシング @kumagiに訊こう! 使う側は難しくない 実装する側は難しい Masanori Ogino (@omasanori) Rust 入門以前

  147. メッセージパッシング トランザクショナルメモリ Masanori Ogino (@omasanori) Rust 入門以前

  148. メッセージパッシング @kumagiに訊こう! 直列化したコードくらい分かりやすいのに 全体を本当にロックすることはない! と思っていたけれど… 人間に分かりやすく使いやすい意味論と 性能のバランスが課題 「このケースはカバーしてくれないの?」 vs. 「遅すぎる、ロックのがマシ」

    ハードウェア支援が x86 にも入った(Haswell 以降) Masanori Ogino (@omasanori) Rust 入門以前
  149. メッセージパッシング メッセージパッシング Masanori Ogino (@omasanori) Rust 入門以前

  150. メッセージパッシング タスク間で データを共有せずに やり取りする 役割によってうまくタスクを分割 しないと難しい Masanori Ogino (@omasanori) Rust

    入門以前
  151. TBD To Be Done Masanori Ogino (@omasanori) Rust 入門以前

  152. おわりに Rustのターゲットは? Masanori Ogino (@omasanori) Rust 入門以前

  153. なぜ Rust は生まれたのか? Graydon Hoare 曰く、 Our target audience is

    "frustrated C++ developers". I mean, that's us. So if you are in a similar situation we're in, repeatedly finding yourself forced to pick C++ for systems-level work due to its performance and deployment characteristics, but would like something safer and less painful, we hope we can provide that. 出典: http://www.infoq.com/news/2012/08/Interview-Rust 強調は筆者に よる。 Masanori Ogino (@omasanori) Rust 入門以前