Сервис развивается: тестируем формат, собираем идеи, улучшаем сервис. Есть идеи?

Написать
Войти
Дайджесты
Иллюстрация к материалу: TypeScript 7.0 переписан на Go: компиляция ускорилась до 10 раз

TypeScript 7.0 переписан на Go: компиляция ускорилась до 10 раз

Microsoft представила экспериментальную версию TypeScript 7.0 с нативным компилятором на Go, созданным при поддержке ИИ. Новая реализация ускоряет сборку крупных проектов до 12 раз (сборка VS Code сократилась со 125,7 до 10,6 секунд) за счет флагов параллелизации и интеграции файлового трекера от Parcel.

TypeScript 7.0 переписан на Go: компиляция ускорилась до 10 раз

Сфера фронтенд-разработки переживает один из самых масштабных технологических сдвигов за последние годы. Компания Microsoft официально представила финальный релиз TypeScript 7.0, ключевой особенностью которого стал экспериментальный нативный компилятор, полностью переписанный на языке программирования Go. Этот шаг позволил добиться ошеломляющего прироста производительности: скорость компиляции и сборки крупных проектов увеличилась в среднем от 8 до 12 раз по сравнению с классическим компилятором, написанным на TypeScript и работающим под управлением Node.js.

Для индустрии, где время сборки проектов является одним из главных факторов, влияющих на продуктивность инженеров, такое ускорение означает переход на качественно новый уровень. Больше не нужно ждать по несколько минут, пока завершится проверка типов и генерация кода — сборка даже гигантских кодовых баз теперь занимает считаные секунды.

Почему именно Go, а не Rust?

Когда заходит речь о написании сверхбыстрых инструментов для веб-разработки (так называемых devtools), современное сообщество практически по умолчанию выбирает язык программирования Rust. На нем написаны такие популярные инструменты, как SWC, Oxc, Rolldown, Turbopack и части рантайма Bun. Однако команда разработчиков TypeScript из Microsoft приняла неожиданное для многих решение и остановила свой выбор на Go.

По заявлениям создателей, этот выбор обусловлен несколькими фундаментальными причинами. Во-первых, язык Go изначально проектировался в Google с упором на максимальную читаемость кода, простоту синтаксиса и минимизацию абстракций. В эпоху, когда значительная часть кода пишется или анализируется большими языковыми моделями (LLM), простота и детерминированность Go делают его идеальным языком для совместной разработки человека и искусственного интеллекта. Вспомогательные ИИ-агенты гораздо лучше понимают, рефакторят и тестируют код на Go, поскольку он не содержит сложных конструкций, присущих Rust или C++.

Во-вторых, экосистема Go обладает великолепно проработанными инструментами для параллельного программирования (горутинами и каналами) и детерминированным управлением зависимостями. Разработчики Microsoft выделили четыре ключевые проблемы современных экосистем Python и TypeScript, которые Go успешно решает:

  1. Медленная и ресурсоемкая сборка;
  2. Недетерминированное и хрупкое управление внешними библиотеками;
  3. Слабая и запоздалая обратная связь по синтаксическим и логическим ошибкам в коде;
  4. Постоянная нестабильность экосистемных пакетов и частые критические изменения (breaking changes).

Перевод компилятора на Go позволил устранить эти проблемы прямо на уровне архитектуры инструмента сборки.

Результаты тестирования: реальные цифры и скорость

Превосходство новой реализации компилятора на Go подтверждается практическими тестами производительности на реальных крупных проектах с открытым исходным кодом:

  • VS Code (кодовая база объемом 2,3 миллиона строк кода): Время полной компиляции сократилось с рекордных 125,7 секунды до невероятных 10,6 секунды. Это означает ускорение процесса сборки почти в 12 раз.
  • Sentry (кодовая база объемом 1,9 миллиона строк кода): Процесс компиляции ускорился почти в 9 раз — время сборки упало со 139,8 секунды до 15,7 секунды.
  • Bluesky (клиент децентрализованной соцсети, 628 тысяч строк кода): Время сборки сократилось до комфортных 2,8 секунды.
  • Paper (библиотека компонентов, 528 тысяч строк кода): Сборка выполняется всего за 0,47 секунды, что делает процесс разработки практически мгновенным.
  • Atom (текстовый редактор, 345 тысяч строк кода): Демонстрирует аналогичный кратный прирост скорости компиляции.

Помимо скорости, новый компилятор показывает отличные результаты в оптимизации потребления ресурсов сервера или локальной машины. Потребление оперативной памяти снизилось на величину от 6% до 26% в зависимости от структуры проекта. Это снижает нагрузку на сборщик мусора (Garbage Collector) и позволяет комфортно вести разработку даже на устройствах с ограниченным объемом памяти.

Кроме того, значительно повысилась надежность интеграции с редакторами кода. Встроенный языковой сервер (TSServer), обеспечивающий подсветку ошибок и автодополнение кода в реальном времени, стал падать и зависать на 60% реже.

Архитектура ускорения: параллелизм и новый отслеживатель файлов

Невероятный прирост производительности TypeScript 7.0 обусловлен не только переходом на компилируемый язык Go, но и важными архитектурными оптимизациями в самом компиляторе. Разработчики выделили два главных направления:

  1. Параллельная обработка данных: В новом компиляторе реализованы флаги параллелизации --checkers и --builders. Флаг --checkers позволяет запускать процессы проверки типов в нескольких параллельных потоках, эффективно используя все доступные ядра процессора. Флаг --builders отвечает за конкурентную генерацию файлов JavaScript и объявлений типов (.d.ts), что исключает последовательные задержки на дисковом вводе-выводе.
  2. Новый движок отслеживания изменений (File Watcher): В компилятор была интегрирована высокопроизводительная система отслеживания файлов на базе решений проекта Parcel. Традиционные файловые наблюдатели в Node.js часто упираются в ограничения операционной системы по количеству открытых дескрипторов файлов и потребляют много ресурсов CPU при постоянном сканировании диска. Новый движок моментально фиксирует любые изменения в файловой системе и передает их компилятору без задержек и ложных срабатываний.

Экспериментальный статус и ограничения миграции

Несмотря на впечатляющие результаты тестов, разработчикам следует помнить, что компилятор на Go в версии TypeScript 7.0 по-прежнему носит экспериментальный характер. Полный программный интерфейс (API) компилятора еще не перенесен на Go до конца, поэтому многие внутренние инструменты и плагины могут работать некорректно или требовать обратной совместимости.

Наиболее критическое ограничение на данный момент — отсутствие полноценной интеграции с фреймворками, использующими собственные компиляторы шаблонов поверх TypeScript. Поддержка таких популярных инструментов, как Vue.js, Astro и Angular, отложена до выпуска версии TypeScript 7.1, в которой разработчики обещают стабилизировать публичный API компилятора на Go.

В связи с этим эксперты и ведущие разработчики рекомендуют не спешить с полной миграцией рабочих коммерческих проектов и пока оставаться на стабильной ветке TypeScript 6.0, если вы активно используете Vue, Astro, Angular или кастомные сложные плагины для компилятора. Однако для чистых проектов на TypeScript и Node.js новый компилятор уже сейчас можно пробовать в тестовом режиме, чтобы лично оценить колоссальную разницу в скорости сборки.