Проект Ezno, представляющий собой TypeScript type checker, разработанный на языке Rust, продолжает динамично развиваться, став одним из самых перспективных инструментов для проверки типов и компиляции проектов на TypeScript. За последний год команда разработчиков, возглавляемая автором, продемонстрировала значительные достижения и представила видение развития на 2025 год. Эти нововведения направлены на повышение точности, скорости работы и расширение возможностей проверки типов в экосистеме TypeScript. Прошлогодние достижения стали важной вехой на пути к завершению реализации большинства ключевых возможностей типовой системы TypeScript. Одним из значимых этапов стала реализация механизма сужения типов — narrowing.
Эта функция позволяет изменять исходный тип переменных и параметров на основе значений и условий, возникающих во время выполнения программы. Внедрение сужения типов существенно приблизило Ezno к полноте поддержки типовой системы TypeScript, сделав возможным обработку более сложных сценариев и повышение точности анализа. Разработка также коснулась поддержки сложного объекта Proxy, являющегося одним из сложнейших в языке JavaScript из-за своей возможности переопределять поведение различных операций. В Ezno была реализована частичная поддержка Proxy, включающая базовые операции частичного применения и проверки подтипов, что уже открывает новые горизонты для анализа динамичного поведения кода. Важно отметить, что благодаря сообществу и Pull Request’ам появилась также поддержка регулярных выражений, которые активно используются во многих приложениях и проектах.
Особое внимание уделялось улучшению инструментальной части, в частности парсера и лексера. Ранее была реализована относительно сложная архитектура лексера с многопоточной обработкой токенов, которая, однако, сказывалась негативно на корректной работе с редкими и сложными синтаксическими конструкциями. В ответ на это была выбрана стратегия упрощения — заменён транспортировка токенов между потоками на более честный и простой модуль, работающий напрямую с последовательностью символов. Такая оптимизация не только улучшила устойчивость к кейсам с особыми синтаксическими требованиями, но и повысила общую производительность работы парсера. В архитектуре парсера появились инновации, направленные на расширение функционала и удобства разработки.
В стадии активной разработки находится система компиляции AST с помощью макросов во время компиляции, что значительно упрощает работу и снижает вероятность ошибок. Также экспериментируется с внедрением паттерна visitor с использованием derive-маκросов Rust, что делает код более модульным и удобным для сопровождения. Разрабатывается система частичного синтаксического анализа, позволяющая проверять корректность кода уже во время его редактирования, что повышает интерактивность и комфорт работы разработчиков. Одним из важнейших направлений развития стало пересмотр и обновление спецификации проекта. Спецификация, представляющая собой большой markdown-документ с обширным набором тестов на различные аспекты проверки типов, играет ключевую роль в обеспечении стабильности и корректности изменений.
Возникла необходимость реструктуризации этого файла путём деления на несколько более управляемых частей и добавления дополнительной информации об имплементациях для каждой секции. Также планируется оформление спецификации как самостоятельного CLI-инструмента, что упростит интеграцию в процессы тестирования и повышения качества кода. Одна из уникальных систем в Ezno — это событийная и частично применяемая (partial application) модель обработки типов, которая, несмотря на свою новизну и решённость важных задач, оказалась пока недостаточно зрелой для повсеместного применения в крупных проектах. В связи с этим реализуется возможность отключения этой системы с помощью специального флага, который переводит проверку на более простую и традиционную модель обработки переменных и объектов, сопоставимую с поведением TypeScript. Такой гибкий подход даст возможность более широкому спектру проектов успешно использовать Ezno и ускорит дальнейшее тестирование и развитие экспериментальных функций.
Следующим приоритетом является завершение разработки механизма вывода ограничений (constraint inference), заимствованного из известных подходов таких как в type checker Hegel. Этот механизм позволит более эффективно и точно определять типы в ситуациях с динамическим и неявным использованием, уменьшив количество ошибок и повысив качество аналитики. Работа над этой функцией включает как внедрение алгоритмов, так и проведение практического тестирования на реальных не типизированных кодах с целью выработки оптимальной стратегии. Важным новаторским направлением стала интеграция с существующим комплексным набором тестов test262, созданным для проверки реализации JavaScript движков. Этот набор содержит более 50 000 тестов, покрывающих разнообразные аспекты языка.
На текущий момент парсер Ezno проходит более 91% этих тестов, что впечатляет для относительно молодого проекта. Анализ результатов выявил основные причины падений, среди которых наиболее значимые — синтаксические ошибки, связанные с повторным использованием имён параметров и особенности регулярных выражений. Отслеживание и улучшение этого показателя является фундаментальным шагом для повышения надёжности всего инструментария. Одним из заметных достижений является готовность подмодуля для проверки подтипов и выявления взаимной совместимости типов, которые являются краеугольным камнем в типовых системах. На основе сформированного функционала создаётся API, способное интегрироваться с внешними проектами и инструментами, расширяя сферу применения Ezno и влияя на развитие типизации в экосистеме JavaScript и TypeScript.
Планы на будущее включают продолжение работы над улучшением архитектуры и производительности. На данный момент проект уже отличается высокой скоростью, но разработчик стремится внедрять новые методики и инструменты, среди которых анализ размеров типов с использованием данных компилятора Rust. Разрабатывается собственное решение на базе tree-sitter, позволяющее вносить целенаправленные изменения в определения enum и структур, обеспечивая согласованность на всех этапах — от разбора исходного кода до трансформаций и генерации результата. Кроме того, особое внимание уделяется мониторингу метрик производительности с помощью GitHub Actions, включая детальный сбор данных по использованию памяти и процессорных инструкций. Такое комплексное тестирование помогает объективно оценивать влияние изменений и своевременно оптимизировать узкие места.
Значительное внимание уделяется завершению поддержки таких важных аспектов как асинхронный код, генераторы и полноценная работа с системой модулей. Эти функции долго откладывались из-за сложности их реализации вместе с экспериментальной событийной системой. Появление режима с отключённой событийной моделью позволит эффективнее внедрять и отлаживать эти составляющие. В долгосрочной перспективе рассматриваются идеи по внедрению экспериментальных синтаксических расширений, которые пока находятся в стадии внутренних прототипов. Такие новшества призваны расширить пространство возможностей языковой типизации, выступая скорее в роли исследовательских концепций, способных вдохновить на появление новых инструментов и подходов.
Автор проекта также открыт для сотрудничества и приглашает заинтересованные компании и сообщества к обсуждению тем, связанных с Rust, TypeScript и сложными системами типов. В планах — проведение докладов и воркшопов, которые помогут шире ознакомить профессиональное сообщество с уникальными решениями Ezno. В целом обновление 2025 года раскрывает стремление команды развивать Ezno как современный, быстрый и функционально богатый инструмент для проверки типов, готовый к использованию как в исследовательских целях, так и в реальных производственных проектах. Это важный вклад в развитие экосистемы TypeScript, который ещё раз подчеркивает силу и гибкость языка Rust как основы для создания высокопроизводительных и надёжных программных продуктов. Таким образом, Ezno 2025 представляет собой уникальное сочетание инновационных идей, технической глубины и неослабевающего стремления к совершенству, формируя новую эпоху в области статической типизации и анализа кода.
Разработчики и пользователи, заинтересованные в расширении возможностей TypeScript, непременно найдут в этом проекте мощный инструмент и перспективного партнёра на годы вперед.