
TypeScriptの設計を保つRust移植
CloudflareとVoidZeroは、Owner.comのMax Schwenk氏とともに、TypeScriptコンパイラをRustへ移植する「tsrs」に取り組んでいます。プロジェクトはOxc JavaScriptツールチェーンの一部として進められ、TypeScriptチームとも連携しています。
tsrsはTypeScriptを別の仕様に作り替えるフォークではありません。言語の設計と方向性はTypeScriptチームが担い、tsrs側は元の実装に沿って互換性を保つ方針です。
TypeScriptチームは機能によって、実装を決める前に長期間にわたり選択肢を検討し、試作することがあります。tsrsがその判断に追随しなければ、TypeScriptとの互換性が崩れる可能性があるため、開発側は元の実装を基準に移植を進めています。
初期ベンチマークで示した速度とメモリ
Cloudflareの初期ベンチマークでは、同じ数の型検査ワーカーを使った場合、tsrsはTypeScript 7.0より最大8倍高速で、メモリ使用量は約70%少ないとされています。
比較対象のTypeScript 7.1ベータ版も、TypeScript 7.0より最大2.5倍高速です。tsrsの最適化の一部はTypeScript側へ取り込まれており、開発側は今後も反映できる改善を探す考えです。
これらは特定の構成でのベンチマーク結果です。コンパイラ設定やマシンの規模が異なれば結果も変わる可能性があります。CloudflareはTypeScriptチームと条件をそろえて比較したと説明しています。
Oxcツールチェーンで担う役割と利用方法
OxcはJavaScriptコンパイラのツールチェーンで、tsrsはその中でTypeScriptの型検査を担うコンパイラとして開発されています。tsrsはRust製で、TypeScript 7のコンパイラとLanguage Serverの置き換えを目指しています。
既存のtsconfig.jsonを使ってコンパイルでき、通常はJavaScriptと型宣言ファイルを出力します。型検査だけを行う場合は--noEmitを指定します。
試験版はnpmから導入できます。プロジェクトではpnpm add -D tsrsの後にpnpm exec tsrs --noEmitのように実行します。ブラウザーやNode.jsで使えるWebAssembly版も用意されています。
TypeScriptとの互換性と現在の対応範囲
tsrsはTypeScriptのGo実装を関数単位でRustへ移植しており、現時点ではTypeScriptの開発版を対象にしています。安定版ではTypeScript 7.1との完全な互換性を目指しています。
互換性テストでは、エラー出力の基準13,462件のうち13,458件で参照実装と一致し、型情報とシンボル情報の基準12,779件はすべて一致しました。JavaScript出力では13,392件の基準を通過し、失敗はありませんでした。
一方、未対応の機能もあります。たとえば--initと--showConfigは未対応で、Language Serverでは自動型取得やプロファイリングが移植されていません。











