2020年末に Tokio 1.0がリリースされました。Rustの非同期ランタイムのデファクトライブラリです。
HyperやTower、TonicといったHTTPのライブラリの下層で利用されているため、ネットワークアプリケーションなど多彩な用途で間接的に依存対象になっているケースが多いでしょう。
メジャーリリースにあたり、API保証を宣言しています。v2.0をこの先3年間リリースせず、v1.0を少なくとも5年間は維持するポリシーとしています。
各種ライブラリが参照するTokioのバージョン不整合のトラブルは今後起きなくなると考えて良いでしょう。
Tokio v1.0の目先の進化には、Linuxのio_uring
システムコールへの切り替えによる性能チューニングやRust言語仕様との調整などを予定しているとのことです。
- The rapid growth of io_uring(LWN.net)
Tokio 1.0への移行
HTTPライブラリのHyperについてはTokio1.0と同時にリリースされたv0.14でバージョンアップしています。
同様に主要なライブラリもTokio 1.0への切り替えが進んでいるため、基本的にはアプリ層に近いライブラリのCargo.tomlで確認して Tokio 1.0 に一括更新するのが総合的に手間が少ないでしょう。
tokioのバージョンが混在すると実行時にpanicする挙動になるため注意が必要です。 tokio-compat-02という互換レイヤのライブラリがあり、一部のライブラリのバージョン不整合が残る場合には移行目的に活用できます。
Streamが標準付属しない
Rust-langのStreamの標準化が途中段階であるため、
tokio 1.0はStreamなしでリリースされています。
tokio-streamクレートにStream実装が切り出されているため、必要に応じて追加します。たとえば、tokio::sync::mpsc::Receiverのラッパーとして、
tokio_stream::wrappers::ReceiverStreamが提供されており、gRPCのServer-side streamingに利用できます。
これは暫定的な対応であるため、標準化されたStreamがリリースされた段階で、実装の切り替えが必要になるでしょう。
Chuma Takahiro