Turborepo переходит с Go на Rust: причины, процесс и влияние на разработчиков
Vercel, компания, стоящая за популярным фреймворком Next.js и платформой для развёртывания, переводит свой инструмент Turborepo с Go на Rust. Turborepo — это система сборки, оптимизированная для монорепозиториев JavaScript и TypeScript. В новом посте в блоге команда рассказывает, как начинался проце

Vercel, компания, стоящая за популярным фреймворком Next.js и платформой для развёртывания, переводит свой инструмент Turborepo с Go на Rust. Turborepo — это система сборки, оптимизированная для монорепозиториев JavaScript и TypeScript. В новом посте в блоге команда рассказывает, как начинался процесс, как они валидировали стратегию и почему решили, что портирование — правильный шаг.
Как Vercel обосновал переход Turborepo с Go на Rust
Идея переписать Turborepo на Rust возникла не на пустом месте. Команда Vercel уже имела опыт работы с Rust в других проектах, включая сам Turborepo — некоторые его части, такие как daemon и CLI, были написаны на Rust с самого начала. Go использовался для основной логики планировщика и выполнения задач. Однако по мере роста сложности и требований к производительности стало ясно, что Rust может дать существенные преимущества: лучший контроль над памятью, нулевые затраты на абстракции и более строгую систему типов, которая помогает избежать целых классов ошибок.
Перед началом масштабного портирования команда провела тщательное исследование. Они изучили, какие части кода наиболее критичны для производительности и как их можно переписать с минимальными рисками. Оказалось, что планировщик задач и кэширование — самые узкие места. Написание прототипа на Rust показало прирост производительности до 30–40% на некоторых синтетических тестах, что убедило руководство в правильности направления.
Как проходила миграция и какие инструменты использовались
Процесс портирования разбит на несколько этапов. Сначала команда переписала на Rust те компоненты, которые уже были изолированы от остальной кодовой базы — например, работу с файловой системой и сериализацию. Затем они начали постепенно заменять модули на Go, используя FFI (Foreign Function Interface) для взаимодействия между языками. Это позволило тестировать новые части в production, не ломая всю систему.
Ключевым инструментом стал cargo для сборки Rust-кода и интеграция с существующей инфраструктурой Turborepo. Команда также разработала набор бенчмарков, чтобы отслеживать регрессии производительности на каждом шаге. На данный момент большая часть внутренней логики уже работает на Rust, и команда планирует завершить миграцию до конца года.
Почему Rust лучше Go для систем сборки?
Rust предлагает ряд преимуществ по сравнению с Go, особенно в контексте систем сборки. Во-первых, Rust обеспечивает более детерминированное управление памятью без сборщика мусора, что критично для производительных инструментов. Во-вторых, система владения и заимствования предотвращает гонки данных на этапе компиляции, что повышает надёжность параллельного выполнения. В-третьих, Rust позволяет писать более эффективный код с нулевыми затратами на абстракции, что напрямую сказывается на скорости сборки.
Технические детали: что изменилось в архитектуре
С архитектурной точки зрения, переписывание на Rust позволило переработать планировщик задач. В Go использовалась горутинная модель, которая, хотя и удобна, иногда приводила к недетерминированному поведению при параллельном выполнении. Rust с его моделью владения и системой типов даёт возможность более точно контролировать состояние и избегать гонок данных на этапе компиляции.
Кроме того, Rust-версия использует tokio для асинхронного ввода-вывода, что обеспечивает высокую производительность при работе с сетью и файлами. Кэширование теперь реализовано через moka — библиотеку для высокопроизводительных кэшей, которая показала лучшие показатели по сравнению с Go-реализацией.
Какие части Turborepo уже переписаны на Rust?
На данный момент на Rust переписаны такие ключевые компоненты, как планировщик задач, система кэширования и модуль работы с файловой системой. CLI и daemon изначально были на Rust, поэтому они остались без изменений. Оставшиеся части на Go, такие как некоторые вспомогательные утилиты, будут постепенно заменены в ближайшие месяцы.
Кого затронет переход и как это повлияет на разработчиков
Для пользователей Turborepo изменения будут почти незаметны. API и CLI останутся теми же, а все улучшения будут касаться внутренней производительности и стабильности. Разработчики, использующие Turborepo в своих проектах, увидят ускорение сборок, особенно в больших монорепозиториях с сотнями пакетов. Также стоит ожидать снижения потребления памяти и более предсказуемого поведения при параллельных задачах.
Для сообщества Rust это ещё один крупный проект, который выбирает этот язык, подтверждая его применимость в инструментах для разработки. Vercel активно нанимает Rust-разработчиков, что может повлиять на рынок труда в этой нише.
Как миграция повлияет на производительность сборки?
Ожидается, что после полного перехода на Rust производительность сборки в Turborepo вырастет на 30–40% в типичных сценариях. Особенно заметно ускорение в монорепозиториях с большим количеством зависимостей и параллельных задач. Кроме того, снизится потребление памяти, что позволит запускать сборки на более слабых машинах или в CI-окружениях с ограниченными ресурсами.
Что будет дальше: планы Vercel по завершению миграции
Vercel планирует завершить полный перевод Turborepo на Rust в ближайшие кварталы. После этого они сосредоточатся на оптимизации и добавлении новых функций, которые стали возможны благодаря Rust. В частности, рассматривается возможность использования WebAssembly для выполнения задач в изолированном окружении, а также улучшение поддержки удалённого кэширования.
Команда также обещает выпустить серию технических постов, где подробно опишет архитектурные решения и уроки, извлечённые в процессе миграции.
Итог
Переход Turborepo с Go на Rust — это не просто смена языка, а стратегическое решение, направленное на повышение производительности и надёжности одного из ключевых инструментов Vercel. Пользователи получат более быструю и стабильную систему сборки, а индустрия — ещё один пример успешного применения Rust в production. Следите за обновлениями: в ближайшее время стоит ждать новых деталей от команды Turborepo.