Кратко / Главное
Компилятор 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.
