マイクロソフト、TypeScriptのコンパイラなどをGo言語に移植することで10倍の処理速度に
マイクロソフトのテクニカルフェローで、TypeScriptのリードアーキテクトであるアンダース・ヘルスバーグ(Anders Hejlsberg)氏は、TypeScriptのコンパイラを始め各種ツール群をGo言語に移植する「Project Corsa」を実施中であり、結果として処理速度が約10倍速になることを明らかにしました。
これによりTypeScriptからJavaScriptへの変換が高速になり、コードエディタでTypeScriptを記述するときの補完や検索などのコードアシスト機能も迅速になるなど、さまざまな開発者体験が向上すると説明されています。
ヘルスバーグ氏はTurbo Pascalの作者であり、その後もDelphi、C#などの優れたプログラミング言語の開発に携わってきたことで知られています。
TypeScriptの処理速度やスケーラビリティに課題
TypeScriptは、JavaScriptに対して型システムを追加し、またJavaScriptの将来のバージョンで組み込まれるであろう機能を備えることなどにより、コードの品質や読みやすさを高める優れた開発者体験を実現することを目指したプログラミング言語です。
TypeScriptは、WebブラウザやNode.jsのようなJavaScriptランタイムを備えた環境で実行できるように、最終的にはJavaScriptにコンパイルされます。
このとき使われるTypeScriptコンパイラは、現時点ではTypeScript自身によって記述されており、通常はJavaScriptランタイムであるNode.jsのパッケージとして導入され実行されます。
ヘルスバーグ氏は今回のProject Corsaを説明する動画の中で、JavaScriptランタイムは主にWebブラウザでの利用に最適化されているため、コンパイラのような計算集約型のワークロードの処理にはそれほど向いておらず、それゆえにTypeScriptのコンパイラや関連ツール群は処理速度や、大規模プロジェクトの処理時におけるメモリ不足などのスケーラビリティに課題を抱えていたと説明しました。

Project Corsaは、TypeScriptコンパイラを始めとする各種ツール群をGo言語に移植し、ネイティブバイナリ化することでこれらの課題を解決することを目指したものです。
高速化はGo言語のネイティブ化と並列処理によるもの
下記は動画の中でヘルスバーグ氏が行った、TypeScriptで書かれたVisual Studio Codeのコンパイルにかかる時間の比較です。
最初の処理は既存のTypeScriptコンパイラ(tscコマンド)によるもので、約63秒。次の処理(tsgoコマンド)が新たに開発中のGo言語によるネイティブバイナリのコンパイラによるもので約5.8秒と、10倍以上の高速化が示されました(赤線はPublickeyによる)。

なぜC#やRustといった同氏が好む言語を使わないのか、という点に関して、同氏はさまざまな言語でプロトタイプを作った結果、すべてのプラットフォームで完全に最適化されたネイティブバイナリを生成できて、データレイアウトの細かな制御が可能で、ガベージコレクタによるメモリ管理が自動化され、優れた並列処理が可能などの理由によりGo言語を選択したと説明しています。
その上で、性能向上の要因の半分はネイティブコード化によるものであり、残りの半分は並行処理の利用によるものだとしました。
TypeScript 7.0でGo移植版が提供される見通し
既存のTypeScriptコンパイラやツールのTypeScrip/JavaScripttからGoへの移植はファイルや関数ごとにほぼ忠実に行われており、両者の結果は同じになるとのこと。
現時点でスキャナ、パーサ、バインダの移植はほぼ完了しており、型チェッカも80%程度完了。Language Server Protocol (LSP) を採用したランゲージサービスに取り組んでいるところだとしました。
TypeScriptは現在バージョン5.8となっており、バージョン6.xも引き続きTypeScript/JavaScriptベースで開発が進められる予定です。
Go言語を用いたネイティブバイナリのコンパイラやツール群は、既存のツール群と同様の品質や機能が揃ってきた時点でTypeScript 7.0としてリリースされる予定だとのことです。