Дайджесты новостей
Взрыв-схема модульного ядра компилятора TypeScript tsrs на Rust с многопоточной обработкой AST.

tsrs: компилятор TypeScript на Rust с ускорением в 8 раз

Если ты пишешь код на TypeScript в крупном монорепозитории или проекте с сотнями тысяч строк, то наверняка знаешь это мучительное ощущение: делаешь коммит, пушишь ветку и идешь пить кофе, пока в CI-раннере крутится заветный шаг tsc --noEmit. На больших кодовых базах проверка типов может занимать от пяти до пятнадцати минут, сжирая процессорные минуты облака и парализуя работу инженеров.

Почему так происходит? Исторически компилятор TypeScript от Microsoft написан на самом TypeScript и выполняется в среде Node.js. Сборщик мусора V8, интерпретация абстрактного синтаксического дерева и однопоточная модель накладывают неизбежный «налог на типизацию» (Typecheck Tax).

Предыдущие быстрые инструменты вроде esbuild или swc решали только половину задачи: они мгновенно вычищали типы (strip types), превращая TS в чистый JS, но вообще не проверяли корректность типов. Переписать полноценный тайпчекер со сложнейшей системой дженериков, условных типов и выводом контекста казалось неподъемной задачей.

Однако компания VoidZero (основанная Эваном Ю, автором Vue и Vite) совместно с Максом Швенком и в прямом партнерстве с инженерами Microsoft представила проект tsrs — официальный нативный порт компилятора TypeScript на язык Rust.

До 8 раз быстрее и на 70% меньше памяти

В отличие от разрозненных попыток энтузиастов-одиночек, tsrs создается в тесной координации с официальной командой языка. Microsoft сохраняет лидерство в развитии спецификации, а tsrs проектируется как drop-in замена официального компилятора tsc и языкового сервера TSServer со 100% совместимостью со стандартом TypeScript 7.1.

Первые результаты замеров в реальных проектах впечатляют:

  • Ускорение в 6–8 раз: проверка типов, занимавшая в CI 8 минут, теперь укладывается в минуту с небольшим;
  • Снижение потребления RAM на 70%: компилятор Rust не страдает от фрагментации кучи и накладных расходов виртуальной машины;
  • Type-aware линтинг в Oxlint: tsrs интегрируется как бэкенд вывода типов для линтера Oxlint, открывая сверхбыструю проверку всех правил качества кода;
  • Компиляция в WebAssembly: благодаря Rust компилятор может запускаться прямо в браузере (онлайн-песочница tsrs playground) и в edge-воркерах.

Установка и запуск в проект осуществляются через современный тулчейн Vite+:

# 1. Добавляем нативный компилятор tsrs в проект
vp add -D tsrs

И вызываем быструю проверку типов в CI/CD:

# 2. Запускаем ультрабыструю проверку типов без генерации JavaScript-файлов
vpx tsrs --noEmit --fast

Разумеется, проект находится на этапе публичной стабилизации и калибровки соответствия эталонным тестам test262. Но само появление нативного тайпчекера промышленного масштаба знаменует окончание эпохи мучительного ожидания в терминале: типизированный JavaScript наконец-то получает ту скорость компиляции, которой он заслуживал с самого начала.