12月17日、Astralが「ty: An extremely fast Python type checker and language server」と題した記事を公開した。この記事では、AstralがRustで開発する超高速Python型チェッカー/言語サーバー「ty」のベータ公開と、その設計思想(とくに“インクリメンタル”なアーキテクチャによる編集時性能)について詳しく紹介されている。
以下に、その内容を紹介する。
tyとは何か
tyは、Rustで実装されたPython向けの高速な型チェッカーかつ言語サーバーである。mypy、Pyright、Pylanceなどの代替を意識して設計されている。Astralの社内プロジェクトではすでにtyへ全面移行しており、意欲的なユーザーには本番利用も推奨できる段階に来たと述べている。
Astralはこれまで、Pythonパッケージマネージャのuvや、リンター/フォーマッタのRuffで知られてきた。tyはそれに続く「Astralツールチェイン」の次のピースとして位置づけられている。
tyは言語サーバーとして、定義ジャンプ、リネーム、補完、オートインポート、セマンティックハイライト、インレイヒントなど、現代的なエディタ統合に期待される機能を提供するとしている。
速さの源泉は「言語サーバー前提」のインクリメンタル設計
tyは最初から言語サーバーを駆動することを前提に、アーキテクチャ全体が インクリメンタルな実行を中心に組まれている。 つまり、ファイル編集や関数単位の変更が起きたときに、プロジェクト全体を再解析するのではなく、必要な計算だけを選んで再実行する構造である。これにより、エディタ上のライブ更新や長寿命プロセスでの応答が非常に速くなる、という。
記事中では、巨大コードベース(例:PyTorch)の「編集後の診断再計算」がミリ秒単位で走る例が示され、編集体験の速さがtyの中核価値として強調されている。
tyの設計原則
tyは、Ruffやuvと同様に、いくつかの「プロダクト原則」に基づいて実装されたとしている。要点は次の3つである。
性能への執着
キャッシュなしのコマンドライン実行でも、tyはmypyやPyrightより10〜60倍速いことが多いとしている。さらにエディタ実行(増分更新)では差が拡大し得る、という立て付けである。正確・実用的・エルゴノミック
tyは単なる高速化ではなく「より良い型チェッカー」を目指すとしている。例として、交差型(intersection types)、高度な型の絞り込み(narrowing)、到達可能性解析(reachability analysis)といった機能が挙げられている。オープンに開発
ty本体もエディタ拡張もMITライセンスで開発され、コアチームと多数のコントリビュータによって進められてきたとしている。ブラウザ上で動かせるデモ(play.ty.dev)にも言及がある。
診断(diagnostics)を「UI」として最重要視する
tyは診断メッセージの品質を第一級の機能として扱い、Rustコンパイラの“世界トップ級”のエラーメッセージに影響を受けたと述べている。単一の診断が複数ファイルの文脈を取り込み、「何が間違っているか」だけでなく「なぜそうなのか」「どう直せるか」まで導くことを狙っている。 また、最初から人間だけでなくエージェントによる利用も見据えて診断メッセージを設計しているという。
今後のロードマップ
今後は来年の安定版リリースを目標にし、以下のタスクに全力で取り込むとしている。
- 安定性向上とバグ修正
- Pythonの型仕様の完全な実装
- PydanticやDjangoなど、主要サードパーティライブラリへの対応
さらに長期的には、tyを基盤としてAstralのツールチェーン全体でセマンティック能力を拡張していく構想が挙げられている。例として、デッドコード除去、未使用依存の検出、SemVer互換のアップグレード強制、CVE到達可能性解析、型を理解したlintなどが列挙されている。
詳細はty: An extremely fast Python type checker and language serverを参照していただきたい。