
TypeScript の Go 移植に備えて知っておくべきこと
ARANK
はじめにこんにちは、ダイニーの ogino です。TypeScript のコンパイラは今まで TypeScript で実装(セルフホスト)されていました。それが TypeScript 7.0 から、Go による実装に移植され、10 倍高速になります。 discussion や TypeScript lead architect のインタビュー動画などから調べてまとめたものです。移行の背景今回 Go に移植される背景は、大規模な TypeScript コードベースをコンパイルする際のスピードの遅さにあります。例えば VSCode のコードベース (150 万行) に対して tsc を実行すると、約 80 秒もかかります。TypeScript のコンパイルは大きく以下の段階に分けられ、その内の check が特に複雑で重い処理になっています。Parse: 文字列を読み込んで AST (抽象構文木) に変換するCheck: 型チェックを行うEmit: JavaScript に変換して出力するTypeScript を高速にコンパイルできるネイティブのツールとして、既に esbuild (Go) や swc (Rust) などがありますが、いずれのツールも check の機能は実装されておらず、parse, emit だけを行います。というのも、TypeScript の型システムは常軌を逸した複雑さになっており、他言語で再実装するのが実質不可能…