Rust非同期機能はMVP状態から脱却せず
原題: Async Rust never left the MVP state
なぜ重要か
組み込みシステムでのRust採用において、メモリ効率性は重要課題であり、コンパイラ最適化は言語の競争力向上につながる
Rustのエンジニアが、非同期Rustがコードサイズ膨張問題により最小実装可能製品状態から進歩していないと指摘。特にマイクロコントローラーでゼロコスト抽象化が実現できていない。コンパイラレベルでの最適化を提案し、プロジェクトゴール申請を行った。
Tweede golf社のエンジニアDionが、非同期Rustの現状について分析した記事を公開した。非同期Rustは大型サーバーから小型マイクロコントローラーまで実行可能だが、特にメモリ制約の厳しいマイクロコントローラーでコードサイズ膨張が深刻な問題となっている。
具体的な問題として、barという非同期関数が360行のMIRコード生成に対し、非同期でない同等版は23行のみとなる極端な差が指摘された。コンパイラは状態マシンでUnresumed、Returned、Panicked、Suspend0、Suspend1の5つの状態を生成する。ReturnedとPanickedは安全性確保のため、完了後の再呼び出しでパニックする仕組みだ。
現在、futures構造体の不要な肥大化問題への対処はPR135527で進行中だが、根本的解決には至っていない。同エンジニアは以前回避策を説明したが、コンパイラレベルでの最適化が必要と判断し、プロジェクトゴールを提出した。非同期機能はMIRからLLVM IRへの変換時に状態マシンに変換されるため、MIRパスでの最適化が重要となる。