Skip to content

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

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

Theo Brandt
Hero image for: TypeScript возрождается в Go

Кратко / Главное

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

Почему 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 раз, что делает большие кодовые базы мгновенно более управляемыми.

Enjoying this? Get one like it in your inbox each morning.

one email a day · unsubscribe in two clicks · no third-party tracking

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.

One short daily email of tools worth shipping. No drip funnel.

one email a day · unsubscribe in two clicks · no third-party tracking

🚀Узнать больше

Будьте в курсе трендов ИИ

Откройте лучшие инструменты ИИ, агенты и MCP-серверы от Stork.AI.

P.S. Сделали что-то полезное? Опубликуйте на Stork