rust
怪文書

Rust と非同期 IO の歴史

自己紹介

某社でサーバサイド Rust 書いてる


最近のサーバサイド Rust の話題


  • iron, gotham が開発停止
  • tokio-core が tokio になった
  • RFCS に async-await が入った
  • futures 0.2 が yank されそう

疑問


  • 2018 年にもなって非同期 IO で疲弊している
  • Rust は 2006 年に開発が始まった
  • node.js も go も 2009 年には存在していた
  • 今まで Rust は何をやっていたのか?

今まで Rust は(非同期 IO で)何をやっていたのか?


2006~2010


この頃の Rust

  • Graydon Hoare が Rust を開発開始

この時代

  • 2006: Firefox2.0, jQuery, Twitter, AWS
  • 2007: Clojure, Clang, Silverlight
  • 2008: epoll, Boost ASIO , node.js, Chrome
  • 2009: Go, CoffeeScript, iPhone3GS, Android

2010


この頃の Rust

  • Graydon の個人プロジェクトが Mozzila のプロジェクトになる

この時代

  • async-await(C#5.0), NaCL

2011


この頃の Rust

  • Brendan Eich(JSの開発者)のServoの紹介スライドに出てくる程度
  • 空白の時代

この時代

  • JAVA nio(jdk1.7), Kotlin, React, jQuery Deferred, Boost Context はてなブログ

2012


この頃の Rust

  • インタプリタ、GC
  • libuv で作られたランタイム
  • グリーンスレッド、コルーチン、 work stealing スケジューラ
  • チャンネル、アクター
  • Servo の開発がスタート

この時代

  • Elixir, TypeScript, Unity 4

2013


この頃の Rust

  • Graydon が Mozilla を辞める
  • Rust コミュニティが C++er, Script言語er, 関数型言語er に別れ始める

この時代

  • ES6Promise, Raspberry Pi, Docker

2014


この頃の Rust

  • グリーンスレッドからネイティブスレッドモデルへと変更された
  • グリーンスレッドやランタイムは削除された
  • mio 開発開始
  • rusti インタプリタが消えた

この時代

  • Swift, Flux, asyncio(Python3.4), asm.js, Emscripten, AWS Lambda, Kubernetes

2015


この頃の Rust

  • Rust 1.0 が出た
  • hyper や iron、 nickel が利用されはじめる
  • コンテキストスイッチライブラリ context-rs と mio を使った rotor, mioco, coio-rs などが試みられる

この時代

  • WebAssembly, AlphaGo, ResNet, R-CNN, Raspberry Pi 2, Raspberry Pi Zero, TypeScript(async-await)

2016


この頃の Rust

  • ライブラリレベルのコンテキストスイッチは危険だとの議論
  • mio ベースのゼロコスト futures-rs と tokio-core の開発が始まる
  • rotor, mioco などのそれ以前の非同期IOライブラリが開発終了

この時代

  • Raspberry Pi 3

2017


この頃の Rust

  • hyper が tokio_core + futures-rs に対応
  • actix-web, Gotham の開発が始まる
  • coroutines が nightly に入る
  • mdo-future, futures-await がリリース

この時代

  • ES2017 に asnyc-await が入る

2018


この頃の Rust

  • tokio-core が tokio になった
  • iron, gotham が開発停止
  • futures0.2 が yank された
  • async-await が RFCS に入った

今まで Rust は(非同期 IO で)何をやっていたのか?


2013 年以前

非同期IOのランタイムサポートがあったが、 Rust 1.0 で消えた


2015 年

mio + coroutine の非同期 IO があったが、 futures + tokio が出て消えた


2017 年

tokio-core が主流になったが、 tokio runtime + async-await で混沌としている


所感


とはいえ

tokio runtime + async-await でようやく Rust 本来の仕事ができそう


おわり


参考資料

https://qiita.com/DUxCA/items/82140896c67da3f87a42