Eznoの動向を追いたい
個人的に好きなプロジェクトなのでコントリビュートを視野にとりあえずドメイン把握をば
Kaleidawave さんのブログを読む感じでとりあえず見ていく
Introducing Ezno (2022/09/22)
この頃はまだ作者のプライベートリポジトリとして開発されていた
特徴
チェック、正確性、パフォーマンスを特徴とする Rust 製 JavaScript コンパイラとして紹介
The checker is fully compatible with TypeScript type annotations and can work without any type annotations at all.
You can think of it as an extension to TSC, similar ideas but taken further
型注釈はTypeScriptと互換性があり、全く型注釈を定義してなくてもうまく推論して動くTSCの拡張のようなものだとしている。
コードから最大限の知識を獲得してダイナミックでない部分を可能な限り推論しようというモチベーションで、Eznoではより積極的な型推論をする。
TypeScript のもつ依存型を拡張して定数演算などを評価する機能を追加する。
TypeScriptとの違い
TypeScriptではanyを使うことで既存のJavaScriptプロジェクトにおけるTypeScriptの採用が容易になり特殊な環境でもコンパイルができるようになる一方で、anyがあることで最適化に必要な型の追跡ができない。
そのためEznoではanyを全ての方を迂回できる万能の型としては扱わない。
Ezno in '23 (2023/01/18)
Eznoがオープンソースになる
(この時点では空のリポジトリが公開され、コードはないがマイルストーン等の整備が行われていた模様)
Ezno独自のバイナリ (コンテキスト/型定義) を使うように
Eznoで使用される識別子への直接参照を含んだ.d.ts
よりもコンパクトなバイナリファイルを利用するようになった。
TSCはコールドスタートはあまり早くなく、初期コンテキストの解析および合成がボトルネックだとし、既存の型定義ファイル(d.ts
)は大きく未使用情報が多く含まれているため解析に手間がかかる。一方Eznoの型定義バイナリファイルはASTを構築せずに合成できるため早い。
A preview of Ezno's checker (2023/02/23)
Ezno Checker/Parser がオープンソースになる(Githubリポジトリにコードが公開される)
oxc作者のBoshenからの提案でEznoはoxcと協力関係となる
oxidation-compiler
を使ってEznoを試す方法やoxc Playgroundへの採用も同時に紹介され、試験的にoxcからeznoが提供される形となる
(おそらく現在はoxc Playgroundから削除済み?)
TSCや当時もう一つのTSC互換を謳うRust製プロジェクトだったSTCとともにベンチマークが紹介された。
速度はSTC < Ezno << TSC
といった感じだった。
(特にチューニングは行っていないので高速化の余地はあるとのこと)
The quest continues (2024/05/31)
Ezno 独自の Web-based playground が公開される
この頃にはGithub Starが2000を超え、Contributer数が10を超えた
ちょうどこの頃、残念なことにSTCやHegelなどのTSC互換プロジェクトが開発終了した。
作者であるKaleidawaveさんは二つのプロジェクトを賞賛しつつ、EznoはSTCなどに比べて機能範囲が広い(制約が少ない)ためEznoがより安全な選択肢をとっているはずだとしている。
Eznoはoxcから外れることとなった。ezno-checkerとoxc_type_synthesis(今はもうない)を媒介するbridgeクレートを作りバインディングをezno側でメンテナンスしていたが、ターゲットの違いから労力をもっと他のことに割くべきだとした。
開発中のLSP(エディタ上で機能するタイプチェック拡張)をGithub Sponserに提供すると宣言
--- 作者のブログ内容ここまで ---
とりあえず issue にある good-first-issueをやってみた
最終メンテナンスが2 monthsとなっており心配してたが作者が即日反応をくれてとても親切な方という印象だった。
停滞気味っぽいけど、頑張ってほしい...
気持ちばかりのGithub Sponsorをした
Ezno 言及記事
unvalleyさん
TSKaigi 2024で発表した内容で、型情報を使ったLintルールのパフォーマンス的な課題について触れられている。TSCの代替を使うという手段で紹介されている。
Sajiさん
JSRのslow typesやTypeScript 5.5のisolatedDeclarationsをはじめとした型注釈を明示することによる推論コスト削減の取り組みについての内容。STCをはじめとするTSCの再実装の難しさに触れられている。
Sponsorをしてから数時間後、lspへの招待がきた
(非公開情報なのでリポジトリ名などは隠しておく)
VSCode拡張(InDev)使ってみた感想
まだ実用レベルではないなと思ったけど型アノテーション何も書いてないものでも積極的に推論してくるのでびっくりした
今の所tsconfig読んでないみたい
どこまでTSCに追従するつもりなのか気になる
また面白そうなバグ見つけて直してみた
このサイトがわかりやすい。eznoのサポートしている文法について、そのTSCとの出力比較
定数埋め込みテンプレートリテラルの型エラー検出漏れを発見