Сейчас занимаюсь ресерчем — обновлять ESLint до 9 версии или переходить на что-то более свежее и быстрое: OXC, RSLint, Biome. И вот в процессе наткнулся на интересный ишью по React Compiler.

В обсуждении на GitHub отписался Evan You. Он подробно описал, почему сегодня сложно эффективно использовать React Compiler вместе с инструментами на Rust — такими как OXC и SWC.

React Compiler реализован как набор Babel-плагинов на JavaScript. OXC и SWC — это компиляторы и линтеры, написанные на Rust. Между ними нет общего API, и прямой интеграции не получается без существенных компромиссов.

Основные проблемы: • Для запуска React Compiler потребуется передавать AST между Rust и JavaScript. • Это ограничивает параллелизм и добавляет накладные расходы. • В случае SWC интеграция достигается через встроенный JS-движок (QuickJS), но такой подход не масштабируется и остаётся временным решением. • Команда OXC считает подобный путь неоправданным и рекомендует запускать React Compiler отдельно.

Что предлагается сейчас:

Использовать React Compiler как отдельный Babel-проход, например, через @vitejs/plugin-react и его babel-настройку. Такой способ работает стабильно в экосистеме Vite.

Возможные направления развития: • Переписать React Compiler на Rust. Это обеспечит наибольший прирост производительности (по оценкам — в десятки раз), но требует значительных усилий. • Перенос на Go с использованием C FFI-интерфейса (FFI — Foreign Function Interface). Такой подход применяет команда TypeScript при переносе своих инструментов. • Создание API для “лёгких JS-трансформов”: AST передаётся в JS, где создаются инструкции по изменениям, а финальная работа выполняется обратно в Rust. Такой подход уже используется в некоторых Vite-плагинах, но в случае с React Compiler его применимость под вопросом из-за сложности самого компилятора.

Если хочется использовать современный Rust-базированный сборщик и линтер, то подключение React Compiler создаст неудобства. И наоборот — если в проекте требуется React Compiler, то отказ от Babel и переход на OXC, SWC или аналогичные инструменты может усложнить сборку и снизить производительность.

На текущий момент приходится выбирать: либо современный toolchain, либо полная поддержка React Compiler — вместе они пока работают с ограничениями.