tsc-ts: TypeScriptで書かれたTypeScript
tsc-ts: TypeScript written in TypeScript (github.com)
要約
このプロジェクトは、TypeScriptコンパイラ(tsc)をTypeScript自体で書き直し、ネイティブコードにコンパイルするという実験的な試みです。これにより、パフォーマンスの向上や、コンパイラ開発ツールの新しいアプローチが期待されます。記事では、インストール方法、ビルドプロセス、およびオリジナルのTypeScriptコンパイラとの互換性テストについて詳細に説明しています。
全文翻訳
tsc-ts
[画像: Vercel Labs Experiment] [画像: License: Apache-2.0]
TypeScript 7.0.2コンパイラの実験的なTypeScriptポート(TypeScript-Go、またはtsgo)で、scriptcを使用してネイティブコードにコンパイルされています。
インストール
npmからコンパイラをインストールします。
npm install -D tsc-ts
npx tsc-ts -p tsconfig.json
tsc-tsパッケージは、プラットフォームごとのオプション依存関係(@tsc-ts/darwin-arm64、@tsc-ts/linux-x64-gnuなど)からネイティブ実行可能ファイルを実行します。詳細はpackages/tsc-tsを参照してください。
リリースノートについてはCHANGELOG.mdを、パッケージアーカイブについてはGitHub Releasesを参照してください。
現在のプラットフォーム用にパッケージをビルドするには:
npm run pack:npm -w tsc-ts # packages/tsc-ts/dist/npm/*.tgz
npm run pack:npm -w tsc-ts -- --check # tarballをインストールし、プロジェクトをコンパイルする
-- --binary dist/tscは、ネイティブビルドを生成する代わりに、packages/tsc-tsからの既存のネイティブビルドをパックします。
パッケージ
| パッケージ | 説明 |
|---|---|
packages/tsc-ts | tsc-tsコマンドラインと--apiサーバーを備えた、TypeScriptで書かれたコンパイラ。 |
packages/tsgo | テストが比較対象とするtsgo(コマンドラインおよびステージごとのドライバー)のリファレンスビルド。 |
タスクはTurborepoで実行されます。
ドキュメント
apps/webにtsc-tsコンパイラガイドが含まれています。
npm run dev:web
npm run build:web
要件
- Node.js 24+ および npm
- Go 1.26
- scriptcホスト: macOS、Linux、またはWindows(リンク用に
clangが利用可能であること)
ビルド
npm ci
npm run fetch:upstream # ピン留めされたコミットでtsgoをクローン
npm run build # tsc-tsのNodeビルド(packages/tsc-ts/dist)およびドキュメンテーションサイト
npm run build:oracle # packages/tsgo/distのtsgoリファレンスビルド
package.jsonはscriptc 0.4.0とその@scriptc/threadsパッケージをピン留めしています。他のバージョンではビルドが失敗します。
コンパイラ
packages/tsc-ts/src/compilerはコンパイラであり、tsgo 7.0.2からidiomaticなTypeScriptにポートされています。各部分は、TypeScriptのテストコーパス(約12,500ファイル、マルチファイルケースを分割後17,000ユニット)でtsgoと比較されています。
| 部分 | tsgoとの比較 | 状態 |
|---|---|---|
| Scanner | トークン、値、エラー、リスキャン、JSDoc | 全ファイル一致 |
| Parser and AST | ツリー、診断、APIソースファイルエンコーディング | 全ユニット一致 |
| Binder | シンボル、テーブル、フローグラフ、名前解決 | 全ユニット一致 |
| Module resolution | 結果、パッケージID、--traceResolution | 全リクエスト一致 |
tsconfig.json and programs | --showConfig、--listFilesOnly、--explainFiles | 全ケース一致 |
| Command line and options | 出力、エラー、終了コード、--locale | 全ケース一致 |
| Diagnostics catalog | メッセージ、13の翻訳、出力フォーマット | 全一致 |
| JavaScript emit | 生成ファイル、39のオプションセット | 全比較ユニット一致 |
| Declaration emit | .d.tsおよび.d.ts.map出力、宣言エラー | 全ユニット一致 |
--build、--incremental | 出力、.tsbuildinfo、生成ファイル、--watch | 全シナリオ一致 |
| Type checker | ファイルごとの診断 | 全ファイル一致 |
コーパススクリプトはpackages/tsc-ts/scripts(*-corpus.mjs)にあります。
APIサーバー
tsc-ts --apiは、TypeScript 7.0.2のtsc --apiと同じAPIを標準入出力経由で提供するため、tsc --apiを駆動するツール(scriptcなど)は代わりにtsc-tsを実行できます。
npm run build -w tsc-ts
node packages/tsc-ts/dist/tsc-ts/src/main.js --api --cwd path/to/project
ネイティブビルドは、実行可能ファイルのディレクトリ、またはTSC_TS_LIB_DIRからライブラリファイルを読み込みます。
npm run build:native -w tsc-ts # packages/tsc-ts/dist/tsc
npm run build:native:dev -w tsc-ts # 最適化なし、ビルドが速い
TSC_TS_LIB_DIR=upstream/typescript-go/internal/bundled/libs packages/tsc-ts/dist/tsc -p path/to/project
TSC_TS_BIN=packages/tsc-ts/dist/tscは、ネイティブビルドをそれに対して実行するtsc-tsテストを実行します。
サーバーは、tsc --api 7.0.2のレスポンスごとにチェックされ、scriptcはどちらでも同じプログラムをビルドします。これはtsc-tsコンパイラ上で、ネイティブまたはNode下で実行されます。
言語サービスメソッドがサポートされています:getCompletionsAtPosition、getJsDocTags、getDocumentationComment、getReferencesToSymbolInFile、getReferencedSymbolsForNode、getSignatureUsages。tsc --apiと同様に、自動インポート(グローバル識別子、インポートステートメント、網羅的なswitchケース)を必要とする補完はcompletion list needs auto importsを報告します。プロファイリングメソッド(startCPUProfile、stopCPUProfile、saveHeapProfile)はサポートされていません。
テスト
npm test # tsc-tsとtsgoを比較
npm run bench -w tsc-ts # tsc-tsとtsgo、およびTypeScriptのJavaScriptコンパイラを比較ベンチマーク
npm run lint # oxlint
npm run format # oxfmt
ライセンス
Apache-2.0。TypeScript-Goおよびその他のサードパーティの通知については、THIRD_PARTY_NOTICES.mdを参照してください。