本文へ
ハクソク

世界を動かす技術を、日本語で。

Tsrs: TypeScriptをRustに移植したもの

元記事: 原文(blog.cloudflare.com)

概要

CloudflareとVoidZeroがMax Schwenk(Owner.com)と協力し、TypeScriptコンパイラのRust移植版「tsrs」を開発中。 TypeScriptチームと密に連携し、Oxc JavaScriptコンパイラツールチェーンの一部としてインキュベート。 Rust移植により、最大8倍の高速化と約70%のメモリ削減を実現。 TypeScript言語仕様の完全な互換性維持を重視し、フォークではなく忠実な移植を目指す。 今後もTypeScriptチームと協力し、パフォーマンス改善や機能追加に取り組む方針。

Cloudflare・VoidZero・Max Schwenkによるtsrs(TypeScript Rust移植)の取り組み

  • CloudflareとVoidZeroがMax Schwenk(Owner.com)と共同で TypeScriptコンパイラのRust移植版「tsrs」 を開発
    • Oxc JavaScriptコンパイラツールチェーンの一部としてインキュベーション
  • TypeScriptチームと密接に連携 し、言語設計や方向性をTypeScript本家に完全に委ねる方針
  • tsrsは TypeScriptのフォークではなく、忠実な移植 を目指す
    • 言語仕様や実装方針はTypeScript本家に厳密に従う
  • TypeScriptチームが長期的なビジョンを持ち、慎重に機能追加や実装選定を行う 点を尊重
  • Rust移植が本家の決定から逸脱しないよう管理し、互換性維持を最重視

パフォーマンスとメモリ効率の改善

  • Rust移植版tsrsの初期ベンチマークで、 従来のTypeScript 7.0に比べ最大8倍高速・約70%のメモリ削減 を実現
    • TypeScript 7.1 betaでも2.5倍の高速化(tsrs由来の最適化を一部本家にも反映)
  • ベンチマークはTypeScriptチームと協力し、同一設定での比較を実施
  • tsrsは マシンタイプに応じたアダプティブな設定 をデフォルトで採用し、さらに高速化も可能

tsrsの利用方法と開発背景

  • npm経由でtsrsの実験的リリースを体験可能
    • npm install tsrs
    • npx tsrs
  • 過去にもTypeScriptの他言語移植の試みがあったが、 本格的に成功したのはGo移植のみ
  • AIによる大規模な自動移植が容易になった昨今、RustやC++による移植も登場
  • より高速なTypeScriptへの需要が高まっている現状

Rust選定の理由とWebAssembly(Wasm)連携

  • Go移植でも10倍の高速化とメモリ効率向上を実現したが、Rustにはさらなる利点
    • RustはWebAssemblyとの親和性が高く、ガーベジコレクタ不要で効率的なメモリ管理が可能
  • Cloudflare Workersは Wasmを長年サポート、最近はRustのネイティブサポートも開始
  • 小さなメモリフットプリントで、完全な開発環境をクラウドやブラウザ、IoTデバイス上で実現可能

tsrsの保守と運用体制

  • Theo Browneと協力し、 tsc-rsとtsrsを統合し、LSPやContent Mapperもサポート
  • VinextとNext.jsの運用手法を応用 し、毎日エージェントが差分を確認・互換性マトリクスを自動生成
    • 問題発生時は再現・修正提案までエージェントが担当
  • TypeScript本家との動作差異(診断順序など)も、安定版リリースまでに最小化を目指す
  • パフォーマンス改善は本家Goコードベースにも還元予定

今後の展望

  • Cloudflareは Vite・Rolldown・Oxlint・OxfmtなどRust製OSSツールを多数運営
  • 1,000万以上の開発者のため、 開発ツールチェーンの高速化・可搬性・運用容易化を重視
  • tsrsのさらなる統合や型対応リント(Oxlint)など、Cloudflareスタックへの適用を推進
  • TypeScript本家・JavaScriptコミュニティと連携し、最速・最良のTypeScript実装を共同で開発する方針

提供: ハクソク · 要約更新:

AIによる日本語要約です。内容は原文とあわせてご確認ください。

Hacker Newsの議論を読む

Hackerたちの意見

voidzeroによると、このポートはTS 7.0よりも最大8倍速く、メモリ使用量は約70%少ないらしい。Microsoftは今こそTypeScriptをRustに移植することを真剣に考えるべきだね。

└

Rustでコンパイラを作るのはGoよりどれだけイライラするんだろう。確か、Goに移植した時はテストとコンパイルの速さが求められてたけど、今は全然違う時代だよね。

└

わからないな。ベンチマークが一般的にあまり信頼できないってことを除けば、何が目的なの?TSコンパイラってそんなに遅いの?

└

彼らはGoに決める前に、もうそれを考慮してたと思うよ。噂では、Goの方が翻訳しやすかったから選んだらしい。

└

8倍速って、ちょっとクレイジーな主張だよね。何が8倍速なの?TS 7.0はかなり最適化されてて、VSCodeを10秒以内でコンパイルできるんだよ。これがVSCodeを1秒以内で型チェックしてコンパイルできるの?

これで3つ目だね。これとtsgo-rs、それにbun check。

└

投稿の中で、彼らはTheoと協力してtsgo-rsをtsrsに統合する作業をしているって言ってるね。

スピード向上を見るのはワクワクするね。私は毎日大きなコードベースでTypeScriptを使ってるけど、ローカルで動かすには遅すぎる。だけど、この変更はあまり好きじゃないな。> しかし、フロンティアAIモデルは、数日でほぼ独立して大規模な移植ができるようになった。> 私はゼロ行のコードを書いた。ほとんどでもなく、ゼロだ。 だから、手書きの移植から完全にAI生成の移植に移ることになるんだね。業界がそういう方向に進んでいるのは知ってるし、コーディングエージェントもたくさん使ってる。でも、彼らの出力はしっかりしたアーキテクチャの決定をしないことが多いから、やっぱりレビューはしてる。もしかしたら、これが私の働き方が変わるサインなのかも。誰かが数日でほとんど努力せずに同じことをできるのに、その時間をどう正当化すればいいのか分からない。今、自分の言語を作ってるんだけど、今年のほとんどをそれに費やしてる。誰かが数日でそれを置き換えられるなんて、ちょっと衝撃的だね。MicrosoftのTSチームはこれについてどう思ってるんだろう。

└

誰かが数日でそれを置き換えられるなんて、ちょっと衝撃的だ。彼らは何百万ものエンジニアが楽しんで使っている言語を設計したわけじゃない(?、笑)。既存のコードベースを移植しただけだ。確かに、移植部分は今は簡単になったけど、別のプロジェクトと仕様があるからこそだよね。

└

TypeScriptがコンパイラが実際に動作することを確認するための統合テストフレームワークを持っているなら(持っているべきだよね) - それなら、少なくとも中国の部屋のブラックボックスを入れ替えて、それが動くことは分かるはずだよ。コードをコンパイルする際にトロイの木馬をインストールしてしまうかもしれないし、他にも望ましくない副作用があるかもしれないから心配は必要だけど。でも、コンパイラが最低限実際に動作することを知るための統合テストはできるし、あるべきだよ。

└

あなたの働き方は確実に消えていくよ。しかも早いペースで。今の時代、コードレビューするってのはもう時間の無駄だと思う。数ヶ月から1年後には、明らかに時間の無駄になってるだろうね。

これを理解するのにちょっと時間がかかったけど、理由は全然「もっと速いRustベースのTypeScriptコンパイラを作ろう」ってわけじゃなかったんだ。それはいい副産物だっただけ。彼らはWASM専用のサンドボックスで動くTypeScriptコンパイラが必要だったんだ。だから唯一の選択肢は、tscをGoからWASMにエクスポートすることだったけど、それだとGoのランタイムが丸ごと必要になっちゃう。コストを避けるために、Rustコンパイラを試してみたら、なんと参考のtsc/Go実装よりも速いことがわかったんだ。

Hacker Newsで議論の続きを見る

同じ出典の記事