Rust
怪文書

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



この頃の Rust


  • tokio-core が tokio になった

  • iron, gotham が開発停止

  • async-await 構文が RFCS に入った



2017



この頃の Rust


  • hyper が tokio_core + futures-rs に対応

  • actix-web, Gotham の開発が始まる

  • coroutines が nightly に入る

  • mdo-future, futures-await がリリース



この時代


  • ES2017 に asnyc-await が入る



2016



この頃の Rust


  • ライブラリレベルのコンテキストスイッチは危険だとの議論

  • mio ベースのゼロコスト futures-rs と tokio-core の開発が始まる

  • rotor, mioco などのそれ以前の非同期IOライブラリが開発終了



この時代


  • Raspberry Pi 3



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)



2014



この頃の Rust


  • グリーンスレッドからネイティブスレッドモデルへと変更された

  • グリーンスレッドやランタイムは削除された

  • mio 開発開始

  • rusti インタプリタが消えた



この時代


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



2013



この頃の Rust


  • Graydon が Mozilla を辞める

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



この時代


  • ES6Promise, Raspberry Pi, Docker



2012



この頃の Rust


  • インタプリタ、GC

  • libuv で作られたランタイム

  • グリーンスレッド、コルーチン、 work stealing スケジューラ

  • チャンネル、アクター

  • Servo の開発がスタート



この時代


  • Elixir, TypeScript, Unity 4



2011



この頃の 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: 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 で混沌としている



所感


あわせて読みたい