HN 日本語サマリー

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

tsc-ts: TypeScriptで書かれたTypeScript

tsc-ts: TypeScript written in TypeScript (github.com)

37 pointsby tosh38 コメント

要約

このプロジェクトは、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-tstsc-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を参照してください。