Open13

Eznoの動向を追いたい

monicamonica

Introducing Ezno (2022/09/22)

https://kaleidawave.github.io/posts/introducing-ezno/

この頃はまだ作者のプライベートリポジトリとして開発されていた

特徴

チェック、正確性、パフォーマンスを特徴とする 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を全ての方を迂回できる万能の型としては扱わない。

monicamonica

Ezno in '23 (2023/01/18)

https://kaleidawave.github.io/posts/ezno-23/

Eznoがオープンソースになる
(この時点では空のリポジトリが公開され、コードはないがマイルストーン等の整備が行われていた模様)

https://github.com/kaleidawave/ezno

Ezno独自のバイナリ (コンテキスト/型定義) を使うように

Eznoで使用される識別子への直接参照を含んだ.d.tsよりもコンパクトなバイナリファイルを利用するようになった。

TSCはコールドスタートはあまり早くなく、初期コンテキストの解析および合成がボトルネックだとし、既存の型定義ファイル(d.ts)は大きく未使用情報が多く含まれているため解析に手間がかかる。一方Eznoの型定義バイナリファイルはASTを構築せずに合成できるため早い。

monicamonica

A preview of Ezno's checker (2023/02/23)

https://kaleidawave.github.io/posts/a-preview-of-the-checker/

Ezno Checker/Parser がオープンソースになる(Githubリポジトリにコードが公開される)

oxc作者のBoshenからの提案でEznoはoxcと協力関係となる
https://x.com/boshen_c/status/1666633387073761281

oxidation-compilerを使ってEznoを試す方法やoxc Playgroundへの採用も同時に紹介され、試験的にoxcからeznoが提供される形となる
(おそらく現在はoxc Playgroundから削除済み?)

https://gist.github.com/kaleidawave/5dcb9ec03deef1161ebf0c9d6e4b88d8

TSCや当時もう一つのTSC互換を謳うRust製プロジェクトだったSTCとともにベンチマークが紹介された。
速度はSTC < Ezno << TSCといった感じだった。
(特にチューニングは行っていないので高速化の余地はあるとのこと)

monicamonica

The quest continues (2024/05/31)

https://kaleidawave.github.io/posts/the-quest-continues/

Ezno 独自の Web-based playground が公開される
https://kaleidawave.github.io/ezno/playground/?id=klo1s

この頃にはGithub Starが2000を超え、Contributer数が10を超えた

ちょうどこの頃、残念なことにSTCやHegelなどのTSC互換プロジェクトが開発終了した。
作者であるKaleidawaveさんは二つのプロジェクトを賞賛しつつ、EznoはSTCなどに比べて機能範囲が広い(制約が少ない)ためEznoがより安全な選択肢をとっているはずだとしている。

Eznoはoxcから外れることとなった。ezno-checkerとoxc_type_synthesis(今はもうない)を媒介するbridgeクレートを作りバインディングをezno側でメンテナンスしていたが、ターゲットの違いから労力をもっと他のことに割くべきだとした。

開発中のLSP(エディタ上で機能するタイプチェック拡張)をGithub Sponserに提供すると宣言

monicamonica

とりあえず issue にある good-first-issueをやってみた

https://github.com/kaleidawave/ezno/pull/213

最終メンテナンスが2 monthsとなっており心配してたが作者が即日反応をくれてとても親切な方という印象だった。

Contribution Graph

停滞気味っぽいけど、頑張ってほしい...
気持ちばかりのGithub Sponsorをした

monicamonica

Ezno 言及記事

unvalleyさん

TSKaigi 2024で発表した内容で、型情報を使ったLintルールのパフォーマンス的な課題について触れられている。TSCの代替を使うという手段で紹介されている。

https://zenn.dev/kirohi/articles/3c644b614977fe

Sajiさん

JSRのslow typesやTypeScript 5.5のisolatedDeclarationsをはじめとした型注釈を明示することによる推論コスト削減の取り組みについての内容。STCをはじめとするTSCの再実装の難しさに触れられている。

https://zenn.dev/cybozu_frontend/articles/ts-explicit-type-annotation

monicamonica

Sponsorをしてから数時間後、lspへの招待がきた
(非公開情報なのでリポジトリ名などは隠しておく)

Invitation

monicamonica

VSCode拡張(InDev)使ってみた感想
まだ実用レベルではないなと思ったけど型アノテーション何も書いてないものでも積極的に推論してくるのでびっくりした
今の所tsconfig読んでないみたい
https://github.com/kaleidawave/ezno/issues/85
どこまでTSCに追従するつもりなのか気になる