Rust
怪文書

Rust と非同期 IO の歴史


  • この記事は Rust LT #1 で発表したものです


自己紹介

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



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



  • iron, gotham が開発停止

  • tokio-core が tokio runtime になった

  • 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 の個人プロジェクトが Mozilla のプロジェクトになる



この時代


  • 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 に async-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 本来の仕事ができそう



おわり



参考資料