Заголовок впечатляет, но важны детали
Независимый порт TypeScript на Rust выполнил тестовые запуски примерно за 0,2–0,5 секунды, что существенно лучше результатов Go (0,6–2,2 секунды) и JavaScript (6,6–13 секунд). Это соответствует среднему ускорению от 2,5 до 3 раз по сравнению с Go и до 4,4 раза в сценариях с каскадными ошибками.
Важно, что этот прирост производительности обеспечил независимый порт на Rust, а не официальная работа Microsoft над компилятором. В июле Microsoft перенесла компилятор TypeScript на Go, получив ускорение примерно в 10 раз по сравнению с исходной версией на JavaScript. Порт на Rust, нередко создаваемый с помощью ИИ-агентов, — это инициатива сообщества, построенная на основе версии на Go, а не замена от Microsoft.
Это различие принципиально: компилятор на Rust — впечатляющая неофициальная разработка. Она показывает, что возможно, когда кодовая база перерабатывается с упором на производительность, нередко с помощью ИИ.
Заметное ускорение на одном, пусть и крупном, репозитории, таком как сам проект TypeScript, — серьёзный сигнал. Однако это не является окончательным доказательством того, что любой проект на TypeScript автоматически получит такой же значительный выигрыш. Главный вопрос в том, распространяются ли эти первые результаты на проекты разных типов и степени сложности.
Четыре теста — один поразительный разрыв в производительности
Для тестирования производительности использовался официальный репозиторий TypeScript на GitHub, включающий 793 файла и примерно 380.000 строк кода. Эта надёжная тестовая база позволила провести всестороннее сравнение в четырёх различных сценариях: - Все типы корректны - Одна простая ошибка типа - Нарушенный базовый тип с каскадными ошибками - Глубоко рекурсивные типы
Результаты оказались разительными. Для корректных типов JavaScript потребовалось около 7 секунд, Go — 0,7 секунды, а Rust справился всего за 0,3 секунды. Когда был нарушен базовый тип, что вызвало каскадные ошибки, JavaScript показал 13 секунд, Go — 2,2 секунды, а Rust завершил работу всего за 0,5 секунды. Эти цифры показывают устойчивый и существенный разрыв в производительности.
В целом, согласно видео, Go оказался примерно в 9–10 раз быстрее JavaScript. Rust, в свою очередь, показал скорость примерно в 24 раза выше, чем у JavaScript, и почти в три раза выше, чем у Go. Округлённые значения времени и единственная кодовая база ограничивают абсолютную точность, но иерархия производительности очевидна.
Июльский перенос TypeScript на Go в исполнении Microsoft дал существенный выигрыш. Однако последующая реализация на Rust демонстрирует ещё больший скачок, особенно в сложных сценариях обработки ошибок. Данные ясно указывают на новый ориентир производительности.
Почему результат Rust заслуживает более внимательного изучения
Нагрузка компилятора — серьёзное испытание для любого языка, даже Go или Rust. Проверка типов включает сложные рекурсивные связи, построение больших графов зависимостей и генерацию диагностики, объём которой может расти экспоненциально, если базовый тип нарушен. Эта сложность объясняет, почему компилятору на JavaScript в сценарии «core type broken» потребовалось до 13 секунд.
Преимущество Rust над Go в производительности, в среднем от 2,5 до 3 раз, вероятно, объясняется принципиальными различиями в управлении памятью и накладных расходах среды выполнения. Абстракции без издержек, явная раскладка памяти и отсутствие сборщика мусора в Rust могут сократить объём операций выделения памяти и число промахов кэша, что даёт ощутимое преимущество в задачах, ограниченных скоростью процессора, таких как компиляция.
Появление порта TypeScript на Rust, ставшее возможным благодаря разработке с помощью ИИ, подчёркивает важную тенденцию. Крупные существующие кодовые базы с обширными наборами тестов, такие как репозиторий TypeScript на GitHub, — идеальная цель для итеративного переноса с помощью кодовых агентов. Такой подход позволяет быстро создавать работоспособные порты, как в случае проектов вроде tsrs; подробнее читайте в статье Introducing tsrs: a Port of TypeScript to Rust.
Однако прохождение существующих тестов само по себе не гарантирует полной совместимости и не выявляет тонкие различия в поведении. Перенос кода с помощью ИИ эффективен, но строгая проверка с участием специалистов по-прежнему необходима, чтобы обеспечить функциональное соответствие и сохранить целостность исходной реализации. Скорость очевидна, но долгосрочная стабильность требует тщательной проверки.
Нравится статья? Получайте такие каждое утро на почту.
одно письмо в день · отписка в два клика · без сторонних трекеров
Победа в бенчмарке — это ещё не готовая замена
Победа в бенчмарке — это ещё не готовая замена. Прежде чем внедрять порт на Rust, разработчикам необходимо проверить несколько важнейших факторов. Прежде всего, оцените соответствие языка и API компилятора официальной реализации TypeScript, чтобы обеспечить бесшовную интеграцию с существующими инструментами редактора, системами сборки и выводом диагностики. Главная проверка — поведение на ваших собственных проектах.
Проведите корректное локальное испытание, сравнив одинаковые параметры компилятора в официальной версии и в версии на Rust. Включите запуски с чистой и инкрементальной компиляцией, отслеживайте использование памяти и оценивайте производительность на репрезентативных нагрузках CI, а не только по нескольким замерам времени. Такой комплексный подход показывает реальную готовность к промышленной эксплуатации.
Впечатляющие результаты порта на Rust, в частности ускорение в 3 раза по сравнению с Go, повышают планку производительности компиляторов. Подобные альтернативные реализации побуждают всю экосистему к инновациям, показывая, как оптимизированный нативный код может заметно улучшить опыт разработчиков. Хотя цифры убедительны, готовность к промышленной эксплуатации зависит от доверия и полной совместимости.
Не обращайте внимания на этот порт на Rust, если ваша главная задача — немедленная стабильность и полное соответствие функциональности официальному компилятору TypeScript от Microsoft. Пока всесторонняя интеграция и поддержка экосистемы не станут зрелыми, версия на Rust, победившая в бенчмарке, остаётся убедительным доказательством концепции, но не готовой заменой для большинства производственных сред.
Часто задаваемые вопросы
Написан ли теперь компилятор TypeScript от Microsoft на Rust?
Нет. В видео сравниваются независимый порт на Rust, существующий компилятор на JavaScript и реализация Microsoft на Go.
Насколько быстрее оказался порт на Rust в тестах из видео?
На протестированном репозитории TypeScript порт в среднем работал примерно в три раза быстрее Go и примерно в 24 раза быстрее JavaScript.
Что проверялось в бенчмарке?
Были измерены четыре случая в репозитории TypeScript: корректные типы, простая ошибка типа, каскадные ошибки в базовых типах и глубоко рекурсивные типы.
Следует ли командам заменять свой компилятор TypeScript портом на Rust?
Нет, только на основании этих результатов. Перед переходом командам следует проверить совместимость, поддержку инструментов и производительность на собственных проектах.

