RustでVMディスパッチを高速化:テールコール解釈の実装とベンチマーク
Tail-Call Interpreters in Rust – Jimmy Ostler
Jimmy Ostler氏が、自身のプロジェクト「ternary」の改善を目指し、Noel Welsh氏の記事に触発されて、RustでVMディスパッチのさまざまなスタイルを実装・比較しました。スタックマシンとレジスタマシンの2つのバージョンを、スイッチディスパッチ、サブルーチンディスパッチ、間接ディスパッチ、直接ディスパッチの4つの手法で実装し、ベンチマークを実施。その結果、直接ディスパッチが最も高いパフォーマンスを示したことを報告しています。記事では、各手法のコード例とともに、Rustの不安定な機能である`become`キーワードや`Fn`トレイトの利用など、実装上の詳細も解説しています。
Rustで高最適化コンパイルを行うと、この最適化も実行され、不安定な機能`explicit_tail_calls`を使えば、コンパイラに直接最適化を指示するかエラーを出すことができます。