HN 日本語サマリー

← 一覧へ戻る
プログラミング

RustによるTypeScript (Tsc) のポート

Rust Port of TypeScript (Tsc) (github.com)

50 pointsby jcbhmr80 コメント

要約

このプロジェクトは、LLM(大規模言語モデル)を使用してTypeScriptコンパイラ、チェッカー、LSPをRustに移植したものです。当初は高額なコストがかかりましたが、最終的にはClaude Opus 5.5が短期間で高い互換性を持つバージョンを生成しました。このRust版は、オリジナルのGo版と比較して高速であり、多くの実世界のプロジェクトでテストされ、高い互換性が確認されています。

全文翻訳

ts-rust (別名 tsc-rs) LLMがTypeScriptコンパイラ、チェッカー、lspをRustに移植できるか試したかったのです。結果として、それは可能でした。トークンに420,000ドル以上かかりましたが、おそらく約20,000ドルでできたでしょう(以下参照)。 動機 モデルの能力をテストする 高速なTypeScript型チェッカーを作成する WASMで高パフォーマンスで動作するtsチェッカーを作成する ミーム 警告 これは初期リリースです。テストしたすべての実世界のプロジェクトで100%の互換性があります。ほとんどのアプリケーションでドロップインリプレイスメントとして機能するはずです。既知の問題を参照してください。また、言及する価値があるのは、私はこのコードを一行も読んだことがないということです。 インストール 注意してください、これが実際に機能するかどうか私にはわかりません。 npm install -D tsc-rs npx tsc-rs -p tsconfig.json これはどうでしたか? ポートを完了するために、多くのOpenAIモデルを使用しました。合計で、GPT-5.6 SolとGPT 6 AstraでAPI価格で400,000ドル以上のトークンを使用しました。彼らは数ヶ月の/goalループで130万行以上のRustを書き、84%の互換性すら超えられませんでした。 Claude Codeの制限がどれだけ消費されているかを見たとき、Opus 5.5をこれに投入するのは楽しいだろうと思いました。それは10時間で動作するv0を持っていました。Codexモデルが書いたコードを使い続けていると想定していました。私は間違っていました。Opus 5.5はゼロから始めました。それはAstraよりも1/10の時間で進みました。それを続けさせ、確かにそうしました。合計トークン費用は2週間で約24,047ドルのAPI費用でした。Claudeアカウントを使用しており、週200ドルのプランの制限の925%から983%の間になりました。高価ですが、typescript-goに費やされた作業量を考えると、それほど悪くはありません。 「スロップライン」 これより下のすべては私のLLMによって書かれたもので、私ではありません。 これは実際には何ですか? ts-rustは、MicrosoftのネイティブTypeScriptコンパイラ(Goで書かれています:microsoft/TypeScript、旧typescript-go)の直接のポートです。Goのアルゴリズムと動作を維持し、同じコマンドライン(tsc)、言語サーバー、APIを持っています。 インストール npm install -D tsc-rs npx tsc-rs -p tsconfig.json tsc-rsはtscと同じオプションを取ります。npmパッケージはtscパッケージと競合しないようにtsc-rsです。各リリースには、プラットフォームごとのスタンドアロンアーカイブも含まれています:libファイルが隣にあるtscバイナリ。プラットフォーム:Linux x64(静的、任意のディストリビューション)およびmacOS arm64。WindowsおよびLinux arm64はまだ利用できません。VS Codeで使用するには、npmパッケージのREADMEを参照してください。 Effect診断 tsc-rsはEffect言語サービス診断(コード377xxx)を内蔵しているため、Effectプロジェクトは2番目のコンパイラを必要としません。これらはTypeScript診断と同じチェックから来ており、言語サーバーもそれらを表示します。これらは、tsconfigにプラグインが含まれている場合にのみ実行されます。@effect/language-serviceの場合: { "compilerOptions": { "plugins": [ { "name": "@effect/language-service" } ] } } ルール、オプション、@effect-diagnosticsコメントはEffect-TS/tsgo 0.46.1のポートです。言語サービスの編集機能(クイックフィックス、リファクタリング、ホバー、補完)はポートされていません。 ステータス このポートは、1つのアップストリームリビジョン、microsoft/TypeScript 673a5f17d713(2026-09-29、TypeScript 7.1.0-dev; UPSTREAM.md)にピン留めされており、そのリビジョンでGoと比較されています。比較するには、typescript@7.1.0-dev.20260929.1を使用してください。7.0.xまたは@typescript/native-previewではありません。このビルドが表示する違いは、アップストリームの動作でもあり、ポートが新しいピンに移動するとなくなります。 同じ結果。TanStack QueryコアとHonoは、Goと同じ診断でチェックされます。移植された181,711のGoテストはすべてパスします。言語サーバーとAPIの応答は、oracleテストセットでGoと一致します。 より高速。60のオープンソースプロジェクトでは、型チェックにかかる時間はGoの時間の約半分です(幾何平均)。プレビューパッケージはPGOとBOLTなしでCIでビルドされるため、測定されたビルドよりも遅くなります。 実際のプロジェクト。120のオープンソースリポジトリでは、コマンドライン出力は、以下の問題およびGo自体の出力が実行ごとに変化する場合を除き、Goと異なります。 ベンチマーク:T3 Code T3 Codeの完全な型チェックを、tsc 6、tsc 7、およびBunの新しいチェックと比較します。T3 CodeはEffectを使用するため、2つのケースがあります:Effect診断なしの場合とありの場合。各時間は、5つのT3 Codeプロジェクトの合計です。低い方が高速です。 Effect診断なし チェッカー 時間 vs tsc 6 vs tsc 7 bun check 4.07秒 15.4倍 3.95倍高速 █ tsc-rs 7.25秒 8.6倍 2.22倍高速 ██ tsc 7 16.10秒 3.9倍 ベースライン █████ tsc 6 62.63秒 ベースライン 3.89倍低速 ██████████████████ Effect診断あり チェッカー 時間 vs tsc 6 vs tsc 7 + Effect tsc-rs (Effect内蔵) 11.13秒 12.5倍 1.89倍高速 ███ tsc 7 + @effect/tsgo 21.07秒 6.6倍 ベースライン ██████ bun check、その後effect-tsgo診断 37.60秒 3.7倍 1.78倍低速 ███████████ tsc 6 + @effect/language-service 138.63秒 ベースライン 6.58倍低速 ████████████████████████████████████████ bun checkは、Effect診断が必要ない場合に最も高速です。それらは含まれていないため、Effectプロジェクトは2回目のパスが必要です。tsc-rsはそれらを1回のチェックから取得します。 エラー。 tsc-rs、tsc 7 + @effect/tsgo、およびeffect-tsgo診断パスは、同じ221のEffect診断を報告します。tsc 6はJavaScript Effectプラグイン(@effect/language-service 0.87.4)を使用しており、異なるルールセットを持っています:apps/serverで287、他のものは177を報告します。tsc-rsとtsc 6は、さらに1つのエラー、TS2322をapps/server/scripts/record-pi-rpc-replay-fixture.tsで報告します。TypeScript 7.1.0-devもそれを報告しており、pingdotgg/t3code#16704がそれを修正します。 測定方法:実世界のアプリと同じマシンと方法で、--composite falseを追加して(apps/webはcompositeです)。T3 Codeはcd41c4ad、プロジェクトはapps/server、apps/web、apps/mobile、packages/client-runtime、およびpackages/sharedです。Effectなしの場合、設定にはEffectプラグインがありません。Effectありの場合、tsc 7は@effect/tsgo 0.46.1のEffectパッチ適用済み7.0.2であり、tsc 6は@effect/language-serviceでパッチ適用済みの6.0.3です。スクリプトはscripts/bench-apps/t3code.shです。T3 Codeのtsc-rsスイッチはpingdotgg/t3code#16704です。 ベンチマーク:実世界のアプリ tsc 6(JavaScriptコンパイラ)、tsc 7(Goコンパイラ)、tsc-rs、およびbun checkを使用した6つのオープンソースアプリの完全な型チェック。倍率はtsc 6に対する速度向上です。低い時間はより高速です。 アプリ 行数チェック済み tsc 6 tsc 7 tsc-rs bun check VS Code 3.75M 54.56秒 6.84秒(8.0倍) 4.20秒(13.0倍) 1.62秒(33.7倍) Sentry (frontend) 2.11M 58.76秒 7.90秒(7.4倍) 4.46秒(13.2倍) 3.14秒(18.7倍)* Playwright 585k 4.48秒 0.66秒(6.8倍) 0.34秒(13.2倍) 0.18秒(25.0倍) Excalidraw 449k 5.32秒 0.80秒(6.7倍) 0.70秒(7.6倍) 0.18秒(29.0倍) TypeORM 386k 3.86秒 0.55秒(7.0倍) 0.36秒(10.7倍) 0.19秒(20.0倍) tRPC (server package) 209k 1.10秒 0.16秒(6.8倍) 0.09秒(12.0倍) 0.12秒(9.1倍)* 幾何平均 7.1倍 11.4倍 20.9倍 tsc 7と比較して、tsc-rsは1.61倍高速で、bun checkは2.95倍高速です(幾何平均)。bun checkは、tRPCを除くすべてのアプリで最も高速です。 * bun checkは、他のどのチェッカーも報告しないエラーを報告します:Sentryで3つ、tRPCで2つ。各設定は、tsc 7.0.2の下で0エラーでチェックされます。 その他の違い:tsc-rsはVS Codeで10個、Sentryで2個のエラーを報告します。TypeScript 7.1.0-dev(typescript@next)は、行ごとに同じエラーを報告します。tsc-rsは7.1開発リビジョンをポートしており、7.0.2にはないチェックが含まれています。tsc 6はVS Codeで9個のエラーを報告します。 測定方法:Apple M4 Pro(12コア、48 GB)、macOS 26.5.1。hyperfine、ウォームアップ実行1回後の5回の実行の中央値、--noEmit --incremental false付き。各チェッカーはデフォルトのスレッド数を使用します。tsc 7とtsc-rsはネイティブバイナリとして実行され、npmランチャーはありません。tsc 6はNode 24.19で16 GBのヒープを使用して実行されます。これは、デフォルトのヒープではVS CodeとSentryでメモリ不足になるためです。 バージョン:tsc-rs 0.1.0、TypeScript 7.0.2および6.0.3、Bun canary bd599f5af。 チェックされた行数は、tsc 7 --extendedDiagnosticsカウントで、.d.tsファイルを含みます。上記のT3 Codeベンチマークは、同じマシンと方法を使用しています。4つのアプリは、tsc 7の下で0エラーでチェックするために変更が必要でした。他は変更されていません:Excalidraw:baseUrlなし(TS 7が削除したため)。TypeORM:moduleResolutionがnodeからnodenextに変更(TS 7がnodeを削除したため)。VS Code:postinstallが追加するelectronの型定義。Playwrigh