Skip to content
ai news

TypeScript возрождается в Go

Компилятор TypeScript был полностью переписан на Go, обеспечивая ошеломляющий 10x прирост производительности. Этот архитектурный сдвиг переопределяет скорость проверки типов и весь опыт разработчика.

Margaux Reyes
TypeScript возрождается в Go

Почему TypeScript отказался от самого себя

TypeScript отказался от своих корней JavaScript из-за суровой бизнес-реальности: JavaScript никогда не предназначался для тяжелой, CPU-bound work, которая определяет современную проверку типов. Это фундаментальное несоответствие наложило непреодолимый потолок производительности, напрямую влияя на продуктивность разработчиков и время сборки в крупных проектах. Признавая это внутреннее ограничение, команда искала более производительную основу.

Разработчики не приступали к переписыванию с нуля. Вместо этого они реализовали тщательную стратегию «порт, а не переписывание», перенося существующую логику TypeScript line-by-line на Go. Этот хирургический подход обеспечил абсолютную точность, гарантируя идентичную семантику и поведение проверки типов, как у его предшественника, TypeScript 6.0, предотвращая любые неожиданные регрессии. Результаты неоспоримы: проверка типов в огромном репозитории Playwright, охватывающем 1400 файлов и 500,000 строк кода, сократилась с 6 секунд до ошеломляющих 0.87 секунды с TypeScript 7.0 RC.

Go стал явным победителем над альтернативами, такими как Rust, благодаря его превосходному соответствию этой конкретной архитектуре компилятора и существующей кодовой базе TypeScript. Его надежная модель параллелизма и эффективная организация памяти позволили значительно быстрее перенести существующую логику. Эта важнейшая возможность обеспечила shared memory parallelism, превратив ранее однопоточный компилятор JavaScript в многоядерную мощь, способную распределять проверку типов по нескольким ядрам ЦП.

От минут к миллисекундам: Новая скорость

TypeScript 7 обеспечивает чистую скорость, превосходя предыдущие бенчмарки. Репозиторий Playwright, надежная кодовая база из 1400 файлов, теперь проверяет типы за ошеломляющие 0.87 секунды. Это поразительное падение по сравнению с ~6 секундами старого компилятора, почти 7x улучшение, которое фундаментально переопределяет ожидания разработчиков.

Это не просто более быстрый JavaScript; это фундаментальный архитектурный сдвиг. Нативный код Go и shared memory parallelism позволяют TypeScript наконец-то сбросить свои однопоточные оковы, используя несколько ядер ЦП одновременно. Эта возможность была просто невозможна в рамках присущих JavaScript ограничений, где задачи, зависящие от ЦП, замедляли производительность. Даже в принудительном однопоточном режиме переписывание на Go завершает бенчмарк Playwright примерно за 2 секунды — все еще в три раза быстрее, чем раньше.

Разработчики теперь обладают детальным контролем над этой вновь обретенной мощью. Новый флаг --checkers определяет количество параллельных рабочих процессов проверки типов, по умолчанию четыре, но настраиваемый для машин с большим количеством ядер. Увеличение этого значения может значительно ускорить сборки на системах с достаточными ресурсами ЦП, хотя и за счет более высокого потребления памяти.

Для дальнейшей оптимизации сложных сборок флаг --builders управляет параллельными сборками ссылок на проекты, что критически важно для эффективной компиляции монорепозиториев. Объединение --checkers и --builders обеспечивает беспрецедентный параллелизм, позволяя инженерам настраивать производительность и извлекать каждую миллисекунду из своих конвейеров сборки.

Обновление: Плавное плавание или бурные моря?

Бесшовные обновления редки, но TypeScript 7 их обеспечивает. Переписывание на Go тщательно сохранило идентичную логику проверки типов, обеспечивая frictionless transition от версии 6. Разработчики, использующие TypeScript 5 или более старые версии, столкнутся с критическими изменениями; предписанный путь требует сначала обновиться до TypeScript 6, решить любые проблемы, а затем перейти к 7.

Это предварительное условие обеспечивает принятие современных настроек по умолчанию TypeScript 6, которые в версии 7 переходят от рекомендаций к жестким требованиям. Приготовьтесь к:

  • strict: true, становящемуся неизменяемым значением по умолчанию.
  • module: esnext как новому стандарту.
  • Окончательному удалению цели es5.
  • Устареванию устаревших модульных систем: AMD, UMD и SystemJS. Это TypeScript избавляется от своего прошлого.

Авторы инструментов, отметьте в своих календарях. Хотя основной компилятор теперь работает на Go, его стабильный программный API запланирован на TypeScript 7.1. До тех пор специальный пакет совместимости позволяет запускать TypeScript 6 и 7 параллельно, предотвращая конфликты для инструментов, которые углубляются во внутреннюю структуру компилятора. Для полного технического обзора ознакомьтесь с Announcing TypeScript 7.0 RC - TypeScript.

Нравится статья? Получайте такие каждое утро на почту.

одно письмо в день · отписка в два клика · без сторонних трекеров

Ваш рабочий процесс разработки только что вышел на новый уровень

Переписывание на Go — это не только ускорение команд CLI; оно фундаментально преобразует ваш ежедневный опыт кодирования. Разработчики немедленно почувствуют разницу в своих IDE, особенно в VS Code. Время загрузки проектов в редакторе сократилось примерно в 8 раз, что делает большие кодовые базы мгновенно более управляемыми.

IntelliSense теперь предоставляет автодополнение и обратную связь по типам с беспрецедентной скоростью, устраняя досадные микрозадержки, которые ранее нарушали рабочий процесс. Это означает меньше ожидания, больше кодирования и значительно более плавный рабочий процесс, который напрямую влияет на продуктивность разработчиков.

Далее, режим --watch получил полную, с нуля переработку. Предыдущие итерации страдали от проблем со стабильностью и кроссплатформенной согласованностью из-за отсутствия у Go нативных API для отслеживания файлов. Команда разработала решение, портировав надежный и производительный наблюдатель за файлами из C++ — ту же самую технологию, которая используется в Parcel bundler.

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

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

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

Часто задаваемые вопросы

Почему компилятор TypeScript был переписан на Go?

Команда TypeScript переписала компилятор на Go, чтобы преодолеть ограничения производительности JavaScript для CPU-интенсивных задач, таких как проверка типов. Нативная производительность Go и модель параллелизма позволили значительно увеличить скорость и обеспечить параллелизм с общей памятью.

Насколько быстрее TypeScript 7?

TypeScript 7 примерно в 10 раз быстрее предыдущих версий. В тестах на больших кодовых базах, таких как Playwright, время проверки типов сократилось примерно с 6 секунд до менее 0.9 секунд.

Есть ли серьезные критические изменения в TypeScript 7?

Если вы обновляетесь с TypeScript 6, практически нет критических изменений, так как переписывание было прямым портом логики. Однако, значения по умолчанию, введенные в v6 (например, 'strict: true'), теперь являются жесткими требованиями, и обновление с v5 потребует предварительного устранения этих изменений.

Как TypeScript 7 улучшает производительность?

Основной прирост производительности достигается за счет перехода на компилируемый язык (Go). Кроме того, новый компилятор использует параллелизм с общей памятью, что позволяет ему задействовать несколько ядер CPU для одновременной проверки типов — возможность, которой не хватало однопоточной версии на JavaScript.

Found this useful? Share it.

For builders

Want Stork to write one of these about your product?

Send us a URL. We use the product, form a view, and publish what we actually think — in 8 languages, labeled Sponsored, with no copy approval on your side. That last part is what makes it worth quoting.

See how it works$500 · AI tools & software only