- この記事は Rust と非同期 IO の歴史 の草稿兼参考資料集です
最近のサーバサイド Rust の話題
- iron, gotham が開発停止
- tokio-core が tokio になった
- RFCS に async-await が入った
- futures 0.2 が yank されそう
疑問
- 2018 年にもなって非同期 IO で疲弊している
- Rust は 2006 年に開発が始まった
- node.js も go も 2009 年には存在していた
- 今まで Rust は何をやっていたのか?
今まで Rust は何をやっていたのか?
2018
- 2018-06-23 - Rust 2018: an early preview - https://internals.rust-lang.org/t/rust-2018-an-early-preview/7776/14
- 2018-06-21 - Rust Version 1.27.0
- 2018-06-19 - Yank futures 0.2? - https://github.com/rust-lang-nursery/futures-rs/issues/1039
- 2018-06-19 - Rust Networking with Carl Lerche - https://softwareengineeringdaily.com/2018/06/19/rust-networking-with-carl-lerche/
- 2018-06-19 - Introducing Tsukuyomi - https://medium.com/@ubnt_intrepid/introducing-tsukuyomi-3123fd6b913d
- 2018-05-19 - Tracking issue for Pin APIs (RFC 2349) - https://github.com/rust-lang/rust/issues/49150
- 2018-05-10 - Rust Version 1.26.0
- 2018-05-15 - A revised single-trait approach - https://github.com/rust-lang/rfcs/pull/2418#issuecomment-388939069
- 2018-05-07 - Design goals and constraints - https://github.com/rust-lang/rfcs/pull/2418#issuecomment-386964959
- 2018-05-03 - The Rust Edition Guide - https://rust-lang-nursery.github.io/edition-guide/
- 2018-04-25 - RFC: add futures and task system to libcore - https://github.com/rust-lang/rfcs/pull/2418
- 2018-04-08 - RFC: add futures to libcore - https://github.com/rust-lang/rfcs/pull/2395
- 2018-04-07 - futures 0.2.0 - https://github.com/rust-lang-nursery/futures-rs/releases/tag/0.2.0
- 2018-04-07 - async/await notation for ergonomic asynchronous IO - https://github.com/rust-lang/rfcs/pull/2394
- 2018-04-06 - Async & Await in Rust: a full proposal - https://boats.gitlab.io/blog/post/2018-04-06-async-await-final/
- 2018-03-30 - Feature Name: async_await - https://github.com/rust-lang/rfcs/blob/master/text/2394-async_await.md
- 2018-03-30 - ジェネレータと Pin/Unpin まとめ - https://qiita.com/ubnt_intrepid/items/df70da960b21b222d0ad
- 2018-03-20 - Async/Await VI: 6 weeks of great progress - https://boats.gitlab.io/blog/post/2018-03-20-async-vi/
- 2018-03-08 - Announcing the Tokio runtime - https://tokio.rs/blog/2018-03-tokio-runtime/
- 2018-02-27 - Futures 0.2 is nearing release - https://aturon.github.io/2018/02/27/futures-0-2-RC/
- 2018-02-08 - tokio 0.1.0
- 2018-02-08 - Async/Await V: Getting back to the futures - https://boats.gitlab.io/blog/post/2018-02-08-async-v-getting-back-to-the-futures/
- 2018-02-07 - Async/Await IV: An Even Better Proposal - https://boats.gitlab.io/blog/post/2018-02-07-async-iv-an-even-better-proposal/
- 2018-01-31 - Rust creator Graydon Hoare is now at Apple working on Swift - https://news.ycombinator.com/item?id=13533701
- 2018-01-30 - Async/Await III: Moving Forward with Something Shippable - https://boats.gitlab.io/blog/post/2018-01-30-async-iii-moving-forward/
- 2018-01-30 - Async/Await II: Narrowing the Scope of the Problem - https://boats.gitlab.io/blog/post/2018-01-30-async-ii-narrowing-the-scope/
- 2018-01-30 - Graydon Hoare 、手元に蟹本が届き、当時を振り返る - https://mobile.twitter.com/graydon_pub/status/958192076209897472
- 2018-01-27 - futures0.2 - https://github.com/rust-lang-nursery/futures-rfcs/blob/master/futures-02.md
- 2018-01-25 - Async/Await I: Self-Referential Structs - https://boats.gitlab.io/blog/post/2018-01-25-async-i-self-referential-structs/
- 2018-01-14 - I wonder, why Graydon Hoare, the author of Rust, stopped contributing into it and switched to Swift? - https://amp.reddit.com/r/rust/comments/7qels2/i_wonder_why_graydon_hoare_the_author_of_rust/
- 2018-01-10 - What Are Tokio and Async IO All About? - https://manishearth.github.io/blog/2018/01/10/whats-tokio-and-async-io-all-about/
この頃の Rust
- tokio-core が tokio になった
- iron, gotham が開発停止
- async-await 構文が RFCS に入った
2017
- 2017-12-18 - Tokio internals: Understanding Rust's asynchronous I/O framework from the bottom up - https://cafbit.com/post/tokio_internals/
- 2017-11-22 - Version 1.22.0
- 2017-08-18 - "What next?" - https://graydon2.dreamwidth.org/253769.html
- 2017-08-17 - Immovable generators - https://github.com/rust-lang/rust/pull/45337
- 2017-08-09 - Announcing Gotham - https://gotham.rs/blog
- 2017-08-28 - futures-await - https://github.com/alexcrichton/futures-await
- 2017-08-07 - https://www.reddit.com/r/rust/comments/74o8k9/what_is_the_basic_difference_between_mio_and_tokio/
- 2017-07-14 - hyper 0.11.0 - https://github.com/hyperium/hyper/releases/tag/v0.11.0
- 2017-07-08 - eRFC: Experimentally add coroutines to Rust - https://github.com/rust-lang/rfcs/pull/2033
- 2017-02-09 - mdo-future - https://crates.io/crates/mdo-future
- 2017-02-02 - Rust Version 1.15.0
- 2017-01-07 - mio で echo サーバメモ - http://agtn.hatenablog.com/entry/2017/01/07/151455
この頃の Rust
- hyper が tokio_core + futures-rs に対応
- actix-web, Gotham の開発が始まる
- coroutines が nightly に入る
- mdo-future, futures-await がリリース
この時代
- ES2017 に asnyc-await が入る
2016
- 2016-12-22 - Rust Version 1.14.0
- 2016-12-23 - Getting Started with Tokio - https://lukesteensen.com/2016/12/getting-started-with-tokio/
- 2016-12-07 - Rust futures at a glance - https://daiheitan.github.io/blog/2016/12/07/Rust-futures-at-a-glance/
- 2016-11-27 - Rustで非同期Thrift - http://keens.github.io/slide/RustdehidoukiThriftshitai/
- 2016-11-21 - Rustとコルーチンと非同期I/O - https://qiita.com/kubo39/items/cd9816e31adaed8e040f
- 2016-11-16 - How stable is the mio/futures/tokio ecosystem? - https://www.reddit.com/r/rust/comments/5d3b3n/how_stable_is_the_miofuturestokio_ecosystem/
- 2016-10-15 - Rustのネットワークラリーフレームワーク/フレームワーク - https://qiita.com/dai197x/items/abc207d602b0f3a5cff1
- 2016-09-16 - Rotor and Tokio - https://users.rust-lang.org/t/rotor-and-tokio/7322
- 2016-09-11 - The relationship between async libraries in Rust - https://www.jimmycuadra.com/posts/the-relationship-between-async-libraries-in-rust/
- 2016-09-10 - tokio-core 0.1.0_
- 2016-09-07 - Designing futures for Rust - https://aturon.github.io/blog/2016/09/07/futures-design/
- 2016-08-14 - Futures in Rust - Writing an Async Web API Wrapper - An excercise in learning Rust - http://www.ishbir.com/post/2016-08-14-futures-in-rust/
- 2016-08-11 - Zero-cost futures in Rust in Hacker News - https://news.ycombinator.com/item?id=12268988
- 2016-08-10 - Getting started with futures in Redit - https://www.reddit.com/r/rust/comments/4x15mr/getting_started_with_futuresrs/
- 2016-08-06 - History of Rust - https://github.com/steveklabnik/history-of-rust/blob/gh-pages/index.md
- 2016-08-04 - tokio_core - https://medium.com/@carllerche/announcing-tokio-df6bb4ddb34
- 2016-08-01 - futures 0.1.0 - https://crates.io/crates/futures/versions
- 2016-03-29 - Coroutine VS Futures の議論始まる - https://github.com/rust-lang/rfcs/issues/1081#issuecomment-202668696
- 2016-02-29 - this week in Rust - https://this-week-in-rust.org/blog/2016/02/29/this-week-in-rust-120/
- 2016-02-24 - Proposal: Unify Sockets, Timers, and Channels - https://github.com/carllerche/mio/issues/360
- 2016-01-21 - Rust Version 1.6.0
- 2016-01-03 - Async IO in Rust (part III) - https://medium.com/@paulcolomiets/async-io-in-rust-part-iii-cbfd10f17203
この頃の Rust
- ライブラリレベルのコンテキストスイッチは危険だとの議論
- mio ベースのゼロコスト futures-rs と tokio-core の開発が始まる
- rotor, mioco などのそれ以前の非同期IOライブラリが開発終了
この時代
- Raspberry Pi 3
2015
- 2015-12-10 - Rust Version 1.5.0
- 2015-11-13 - Async IO for Rust (part II) - https://medium.com/@paulcolomiets/async-io-for-rust-part-ii-33b9a7274e67
- 2015-10-04 - coio-rs - https://users.rust-lang.org/t/coroutines-for-rust/3135
- 2015-09-16 - Asynchronous IO in Rust in Redit - https://www.reddit.com/r/rust/comments/3l5rvd/asynchronous_io_in_rust/
- 2015-09-15 - Asynchronous IO in Rust - https://blog.skcript.com/asynchronous-io-in-rust-36b623e7b965
- 2015-08-18 - rotor 0.1.0 - https://crates.io/crates/rotor/versions
- 2015-08-16 - Rust Web Framework Iron - https://news.ycombinator.com/item?id=10070312
- 2015-08-09 - context-rs 0.1.0
- 2015-07-26 - Introducing mioco: MIO COroutines - async io made easy - https://www.reddit.com/r/rust/comments/3em7m7/introducing_mioco_mio_coroutines_async_io_made/
- 2015-07-20 - rustでtelnetチャットを書いた - http://gifnksm.hatenablog.jp/entry/2015/07/20/232334
- 2015-07-12 - My Basic Understanding of mio and Asynchronous IO - https://hermanradtke.com/2015/07/12/my-basic-understanding-of-mio-and-async-io.html
- 2015-07-10 - Rust in Detail: Writing Scalable Chat Service from Scratch - https://nbaksalyar.github.io/2015/07/10/writing-chat-in-rust.html
- 2015-05-23 - IronでHTTPサーバーを立てる - https://qiita.com/rejasupotaro/items/c1b66c2e7eb2d76b799e
- 2015-05-15 - Rust Version 1.0.0
- 2015-04-21 - Async IO - https://github.com/rust-lang/rfcs/issues/1081
- 2015-04-13 - nickel.rs - https://github.com/nickel-org/nickel.rs/releases/tag/0.2.0
- 2015-03-03 - Getting Acquainted with MIO - https://hoverbear.org/2015/03/03/getting-acquainted-with-mio/
- 2015-02-11 - mdo - https://crates.io/crates/mdo
- 2015-01-11 - hyper - https://github.com/hyperium/hyper/releases/tag/v0.1.0
この頃の 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)
2014
- 2014-10-09 - Rust Version 0.12.0
- 2014-09-30 - mio のドキュメント - https://legacy.gitbook.com/book/wycats/mio-book/details
- 2014-09-17 - Remove libgreen and runtime abstractions - https://github.com/rust-lang/rust/issues/17325
- 2014-09-16 - https://github.com/rust-lang/meeting-minutes/blob/master/weekly-meetings/2014-09-16.md#removing-io-runtime-abstractions
- 2014-09-10 - ランタイムを削除 - https://github.com/aturon/rfcs/blob/remove-runtime/active/0000-remove-runtime.md
- 2014-09-10 - RFC: Remove runtime system, and move libgreen into an external library - https://github.com/rust-lang/rfcs/pull/230
- 2014-09-04 - mio の開発開始 - https://github.com/rust-lang/rfcs/pull/219#issuecomment-54336582
- 2014-08-30 - RFC: IO simplification - https://github.com/rust-lang/rfcs/pull/219
- 2014-07-02 - Iron 登場 - http://ironframework.io
- 2014-07-02 - Graydon が Swiftに気持ちを表明する - https://graydon2.dreamwidth.org/5785.html
- 2014-01-09 - Rust Version 0.9
この頃の Rust
- グリーンスレッドからネイティブスレッドモデルへと変更された
- グリーンスレッドやランタイムは削除された
- mio 開発開始
- rusti インタプリタが消えた
この時代
- Swift, Flux, asyncio(Python3.4), asm.js, Emscripten, AWS Lambda, Kubernetes
2013
- 2013-09-26 - Rust Version 0.8
- 2013-12-04 - 5分で分かったふりができるRust紹介 - https://gist.github.com/voluntas/a75d38f27982ee0ae28e7a4510fec89b
- 2013-08-31 - Graydon が Rust のテクニカルリーダーを辞める - https://www.reddit.com/r/rust/comments/1lfoaz/graydon_hoare_steps_down_as_technical_lead_on_rust/
- 2013-08-30 - [rust-dev] changing roles - https://mail.mozilla.org/pipermail/rust-dev/2013-August/005426.html
- 2013-07-15 - Rust 基礎文法最速マスター (rust 0.7 編) - http://gifnksm.hatenablog.jp/entry/2013/07/15/170736
- 2013-07-12 - A
yield
construct in the vein of C# - https://github.com/rust-lang/rust/issues/7746 - 2013-05-31 - Need a solution for select / async events - https://github.com/rust-lang/rust/issues/6842
- 2013-04-03 - Rust Version 0.6
- 2013-02-11 - Write a parallel deque for work stealing - https://github.com/rust-lang/rust/issues/4877
- 2013-01-11 - Scheduler rewrite with I/O event loop - https://github.com/rust-lang/rust/issues/4419
この頃の Rust
- Graydon が Mozilla を辞める
- Rust コミュニティが C++er, Script言語er, 関数型言語er に別れ始める
この時代
- ES6Promise, Raspberry Pi, Docker
2012
- 2012-12-22 - Redesign the I/O library and traits - https://github.com/rust-lang/rust/issues/4248
- 2012-12-21 - Rust Version 0.5
- 2012-08-03 - Scheduler work stealing - https://github.com/rust-lang/rust/issues/3095
- 2012-08-03 - Graydon へのインタビュー - https://www.infoq.com/jp/news/2012/08/Interview-Rust
- 2012-07-02 - 並行言語 Rust - https://altenwald.org/2012/07/02/rust-otro-mas-para-concurrencia/
- 2012-02-08 - Servo の開発がスタート
- 2012-01-20 - Rust Version 0.1 - https://github.com/steveklabnik/history-of-rust/blob/gh-pages/index.md
この頃の Rust
- インタプリタ、GC
- libuv で作られたランタイム
- グリーンスレッド、コルーチン、 work stealing スケジューラ
- チャンネル、アクター
- Servo の開発がスタート
この時代
- Elixir, TypeScript, Unity 4
2011
- 2011-04-01 - Future Tense - https://www.slideshare.net/BrendanEich/future-tense-7782010
この頃の Rust
- Brendan Eich(JSの開発者)のServoの紹介スライドに出てくる程度
- 空白の時代
この時代
- JAVA nio(jdk1.7), Kotlin, React, jQuery Deferred, Boost Context はてなブログ
2006~2010
- 2010-11-29 - Graydon の個人プロジェクトが Mozzila のプロジェクトになる
- 2006: Graydon Hoare が Rust を開発開始
- 2010-11-29 - Graydon の個人プロジェクトが Mozzila のプロジェクトになる - https://jaxenter.com/mozillas-graydon-hoare-working-on-rust-102672.html
- 2006: Graydon Hoare が Rust を開発開始
この時代
- 2010: async-await(C#5.0), NaCL
- 2009: golang, CoffeeScript, iPhone 3GS, RX(C#5.0), Android 1.6
- 2008: epoll, Boost ASIO , Task(C#4.0), node.js, Google Chrome, Github
- 2007: libev, Clojure, LINQ(C#3.0), D言語 ver2, Clang, Silverlight
- 2006: Firefox 2.0, jQuery1.0, Twitter, AWS
C10K 問題への対応として epoll システムコールを使った非同期並列 IO が普及しはじめる。
iPhone の発明
2000~2005
- 2005: gevent(eventlet), GoogleMap, F#
- 2004: nginx(AIO), Rails, GMail, Facebook
- 2003: libaio(Linux AIO, Linux2.6), Scala, LLVM
- 2002: C10K 問題, Firefox
- 2001: POSIX AIO(POSIX 1003.1b), IE6
- 2000: libevent(poll|select)
インターネットの普及で C10K が提唱されはじめる
1990 年代
- 1999: IE5
- 1998: Netscape Navigator 4, Google
- 1997: IE4
- 1996: Shockwave Flash, Concurrent Haskell, OCaml
- 1995: Apache, JavaScript, Ruby, Haskell 1.3(monad)
- 1994: PHP, Java, python1, Perl5, Common Lisp, Amazon
- 1991: Concurrent ML, Linux
- 1990: Haskell 1.0, D言語, SML
インターネットが普及する
1980 年代
- 1986: Erlang
- 1983: C++
言語実装が始まる
1970 年代
- 1978: CSP
- 1977: Future(promise)
- 1973: Actor
- 1972: Prolog, C言語
- 1971: Research Unix V1
基礎理論ができる
今まで Rust は何をやっていたのか?
2013 年以前
非同期IOのランタイムサポートがあったが、 Rust 1.0 で消えた
2015 年
mio + coroutine の非同期 IO があったが、 futures + tokio が出て消えた
2017 年
tokio-core が主流になったが、 tokio runtime + futures0.3 で混沌としている
所感
- 環境変わりすぎ
- ライブラリが根付かない
- 賽の河原
- Graydon が苦言を呈す