72
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RustAdvent Calendar 2018

Day 12

2018 年の非同期 Rust の動向調査

Last updated at Posted at 2019-01-13

この記事は Rust Advent Calendar 2018 の 12 + n 日目の記事です。
この記事は Rust と非同期 IO の歴史(資料編) の続報です。


あけましておめでとうございます。

2018-06 からの非同期 Rust の進捗をまとめました。

今年もよろしくおねがいします。

忙しい人のための Q&A

Q. 2018-12 現在 いますぐ非同期 Rust を書きたい

A1. HTTP サーバが立てたいなら

  • tokio 0.1 + futures 0.1 + hyper 0.12 + hyper-tls or hyper-native-tls
  • actix + futures 0.1 + actix-web 0.7

A2. HTTP リクエストしたいなら

  • tokio 0.1 + futures 0.1 + hyper 0.12 + hyper-tls or hyper-native-tls
  • tokio 0.1 + reqwest 0.9
  • actix + futures 0.1 + actix-web 0.7

Q. 2018-12 現在 いますぐ async-await を試したい

A. rust nightly + futures 0.3 + romio or tokio-async-await

Q. いつ async-await は stable で使えるようになるの?

A. https://areweasyncyet.rs/

Q. tokio や mio 、 futures 、 async-await について学びたい

A. 太文字 の記事をよく読む

Q. async-await 、 futures 、 tokio 、 mio 、 tide 、 tower 、 tower-http 、tower-web 、 actix 、 actix-web って何がどう違うの?

A. このページで気になる単語をページ検索してリンク先をよく読む

2018-06 から 2019-02 までの時系列

2019-01

2018-12

2018-11

* 2018-11-19 - https://twitter.com/qnighy/status/1064527058091442179
Rust非同期プログラミングで使われるFutureという仕組みは、async/awaitで組み立てるので非透過的であり、透過的に非同期実行されるgoroutineとは使い勝手が結構違う。それとは別の視点からの違いとして、Futureは呼び出し元にキャンセル権があり、awaitの先が実行されない可能性がある。 そのため、呼び出される側の非同期関数で明示しなくても、「この非同期関数を実行して、3秒以内に終わらなかったらキャンセル」みたいなことができる。 逆に言うと、各種非同期プリミティブはキャンセルされる可能性を考慮して設計しないといけなくなる。
* 2018-11-11 - Rustでfutures用Mutexを自作してみる (シングルスレッド編) - https://qiita.com/qnighy/items/81f060853b9debe2085f * 2018-11-11 - New RFC to stabilize the `Future` API in Rust. Next stop: stable async/await! - https://twitter.com/aaron_turon/status/1061300546445860865 * 2018-11-11 - RFC: stabilize `std::task` and `std::future::Future` - https://github.com/rust-lang/rfcs/pull/2592 * 2018-11-10 - __tokio-serde-json 0.2.0__ - https://github.com/carllerche/tokio-serde-json * 2018-11-10 - __tokio-serde 0.3.0__ - https://github.com/carllerche/tokio-serde * serde の非同期アダプタ。 非同期 Stream に対してパースできるようになった * 2018-11-10 - Monadic do notation in Rust: Part I - https://varkor.github.io/blog/2018/11/10/monadic-do-notation-in-rust-part-i.html * なぜモナドではなくコルーチンによる async-await を採用するのかという解説記事 * 2018-11-08 - Making progress in await syntax - https://boats.gitlab.io/blog/post/await-syntax/ * 2018-11-09 - https://mobile.twitter.com/qnighy/status/1060879019619405826
boats氏のブログにてasync/awaitの構文について触れられている。現在は暫定的にawait!というマクロとして扱われているが、本当は専用の構文にしたい。ただawaitと?演算子の優先順位は難しい判断が求められる。まずは両方に前方互換な構文だけを許すのがいいだろうという結論
* 2018-11-08 - [Stabilization] Pin APIs - https://github.com/rust-lang/rust/issues/55766 * 2018-11-08 - https://twitter.com/qnighy/status/1060342302877470720
Pin APIの安定化が提案された。普段だとこんなに速くないと思うので、やはりasync/awaitの整備が急がれているという感じがある。Pin API、特にUnpinの意味は、やはり難しいようだ。それなりにRustに慣れた人でもその内容を理解するのに苦戦しているっぽい。
* 2018-11-07 - Middleware in Tide - https://rust-lang-nursery.github.io/wg-net/2018/11/07/tide-middleware.html * 2018-11-01 - __Rust速習会(3) Webサーバ__ - https://speakerdeck.com/qnighy/rustsu-xi-hui-3 * __非同期 Rust 入門 日本語オススメ記事__

2018-10

* 2018-10-17 - futures-0.3.0-alpha.8 - https://github.com/rust-lang-nursery/futures-rs/releases/tag/0.3.0-alpha.8 * futures の 0.3 と 0.1 のアダプタが実装された * 2018-10-05 - __Futureとその周辺 情報科学若手の会 #51__ - https://keens.github.io/slide/futuretosonoshuuhensa_bei/ * __非同期 Rust の futures 、コルーチン入門スライド__

2018-09

2018-08

* 2018-08-01 - Rust でクロスコンパイルして Raspberry Pi Zero W で動かす - https://qiita.com/legokichi/items/b78de0df844e63e77a12 * 2018-08-01 - Rust LT #2 〜いま使う!Rust〜 - https://rust.connpass.com/event/91177/ * 2018-08-01 - __warp__ - https://seanmonstar.com/post/176530511587/warp - https://users.rust-lang.org/t/announcing-warp-a-new-web-framework/19280 - https://www.reddit.com/r/rust/comments/93tcxs/warp_a_new_web_framework_for_rust/ - https://github.com/seanmonstar/warp

2018-07

* 2018-07-19 - __Futures 0.3.0-alpha.1__ - https://rust-lang-nursery.github.io/futures-rs/blog/2018/07/19/futures-0.3.0-alpha.1.html * 2018-07-19 - Futures-rs: New Website - https://rust-lang-nursery.github.io/futures-rs/blog/2018/07/19/new-website.html * 2018-07-18 - Rebooting the network services working group - https://internals.rust-lang.org/t/rebooting-the-network-services-working-group/8036 * 2018-07-17 - async iron - https://github.com/iron/iron/pull/523#event-1732656179 * 2018-07-16 - Tokio と Future のチュートリアルとかのまとめ+α - https://raskr.hatenablog.com/entry/2018/07/16/214420 * 2018-07-15 - Tsukuyomi + Juniper で GraphQL サーバを作る - https://qiita.com/ubnt_intrepid/items/e6b979a500655a3d7666 * 2018-07-14 - tokio の work steal algorithm への質問 - https://github.com/tokio-rs/tokio/issues/424#issuecomment-404981619 * 2018-07-10 - Rust + actix-web in the on of the biggest music festival Atlas Weekend - https://www.reddit.com/r/rust/comments/8xdsx5/rust_actixweb_in_the_on_of_the_biggest_music/ * 2018-07-09 - Rust RocketでのWebAPIサーバーの書き方を解説してみる - https://qiita.com/yukinarit/items/c5128e67d168b4f39983 * 2018-07-08 - webapp.rs - https://medium.com/@saschagrunert/a-web-application-completely-in-rust-6f6bdb6c4471 - https://github.com/saschagrunert/webapp.rs * emscripten, stdweb, yew を使ったフロントエンド Rust のデモ * 2018-07-02 - rust の非同期 IO ライブラリ tokio-core と tokio runtime と actix 0.5 と actix 0.6 でタイマーの比較 - https://qiita.com/legokichi/items/8ab8693e3ae3078fab24

2018-06

  • 2018-06-30 - https://twitter.com/qnighy/status/1012987599529472001

    futures-0.2がyankされたという話があったが、これは現在の安定版と区別するためにfutures-preview-0.2に改名されたということらしい。
    もともとFutureベースの非同期I/OライブラリtokioからI/Oに依存しない部分を抽出したのがfutures-0.1で、それを改良(crate分割、FutureのAPIを変更)したのがfutures-0.2だった。 現在のtokioエコシステムは基本的にfutures-0.1を中心に動いている。
    async/awaitサポートのためにfutures-0.2のコア部分を標準ライブラリに取り入れることになり、それにともないさらにAPIが変更されることになった。これによりfuturesは0.3になることになった。
    0.2にせよ0.3にせよ、現在のtokioエコシステムと互換性がないので、これが "futuresの最新バージョン" として出てくるのは良くない、というのが多分改名の理由。
* 2018-06-27 - futures-0.2 が yank - https://users.rust-lang.org/t/futures-0-2-has-been-moved-to-futures-preview/18329 - https://github.com/rust-lang-nursery/futures-rs/issues/1039 * 2018-06-27 - Azure/iotedge 1.0.0 - https://github.com/Azure/iotedge/tree/master/edgelet - https://twitter.com/maxgortman/status/1012011425353461760 * 2018-06-27 - __Rust と非同期 IO の歴史(資料編)__ - https://qiita.com/legokichi/items/82140896c67da3f87a42 * 2018-06-26 - Rust と非同期 IO の歴史 - https://qiita.com/legokichi/items/882bcacd12870d087555 * 2018-06-26 - Rust LT #1 - https://rust.connpass.com/event/88656/ * 2018-06-23 - asynx/await - https://github.com/rust-lang/rust/pull/51580?w=1#issuecomment-399665846 * 2018-06-23 - Rust で学ぶ epoll - https://qiita.com/legokichi/items/7b16ab18d66485ace1c6 * 2018-06-19 - Why Rust's async functions should use the outer return type approach - https://github.com/MajorBreakfast/rust-blog/blob/master/posts/2018-06-19-outer-return-type-approach.md * 2018-06-11 - Tokio の Blocking API を試す - https://qiita.com/legokichi/items/30e577d996851b6b3ba1 * 2018-06-11 - actix – an actor framework for the Rust programming language - https://simplabs.com/blog/2018/06/11/actix.html * 2018-06-11 - Actix::From(Rocket) - https://noyez.gitlab.io/post/2018-06-11-rocket-to-actix/ * 2018-06-09 - Rust WebフレームワークのACTIXで使う安全なセッション管理機構を考えてみる - https://qiita.com/segfo/items/8d992320184fa0a41157 * 2018-06-07 - RustでHTTP/2+TLS対応なWebAPIの入口を作ってみる - https://qiita.com/segfo/items/8ce5af89a6daf95fdfc9 * 2018-06-04 - Async Methods II: object safety - https://boats.gitlab.io/blog/post/async-methods-ii/ * 2018-06-01 - hyper v0.12 - https://seanmonstar.com/

2018-06 以前

Rust と非同期 IO の歴史(資料編)

後記

また何か発掘したら追記します

72
58
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?