この記事は 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 が苦言を呈す

あわせて読みたい

    • 非同期 IO について

 

    • Rust で学ぶ epoll

 

    • Python の generator で asyncio.Future Monad と do 記法を実装する

 

    • JavaScript + generator で Maybe、 Either、 Promise、 継続モナドと do 構文を実装し async-await と比べてみる

 

    Boost.ASIO で callback | coroutine | future による非同期IO
广告
将在 10 秒后关闭
bannerAds