Il React Compiler passa a Rust, e Next.js 16.3 può già usarlo

Il team di React ha riscritto il React Compiler in Rust, e i benefici stanno iniziando a emergere nei tempi di build reali. Il port in Rust è arrivato nel monorepo di React all'inizio di giugno (PR #36173), e Vercel lo ha integrato in Turbopack qualche settimana dopo. In Next.js 16.3 puoi ora optare per il compilatore nativo e saltare del tutto il vecchio percorso Babel.
Breve riepilogo per chi non lo conosce ancora: il React Compiler (un tempo chiamato React Forget) memoizza automaticamente i tuoi componenti e hook, evitandoti di scrivere manualmente useMemo e useCallback. È stabile in Next.js dalla versione 16.0. Il problema era come funzionava. Come trasformazione Babel aggiungeva overhead di esecuzione JavaScript a ogni build, e nelle app di grandi dimensioni diventava un vero collo di bottiglia mentre la pipeline Rust di Turbopack rimaneva ferma ad aspettarlo.
Cosa è effettivamente diventato più veloce
La riscrittura in Rust cambia le proporzioni. Il team di React riporta che il port è circa 3 volte più veloce come plugin Babel, e fino a 10 volte sulla logica di trasformazione isolata. Il vantaggio maggiore arriva quando il compilatore smette di essere un plugin. Collegato direttamente a Turbopack, Andrew Imm di Vercel ha misurato oltre il 40% di compilazione più veloce su v0, la loro grande app Next.js, in parte perché il precedente percorso del plugin SWC soffriva di un lento avvio a freddo di WebAssembly. Le cifre ufficiali di Next.js si attestano al 20-50% di compilazione dei percorsi più veloce sulle loro app di test.
Una nota onesta prima di entusiasmarsi: questo è sperimentale, e il team di React ha etichettato il port stesso come lavoro in corso. L'architettura è stata guidata da umani ma, per stessa ammissione dell'autore, è stata scritta principalmente dall'AI. Tutti i fixture di test del compilatore passano e l'output corrisponde alla versione TypeScript per il 99,9% del codebase di Meta. Ma il 99,9% non è il 100%, ed è opt-in per una ragione.
Come lo distribuiremmo
Quando costruiamo app cloud-native per clienti enterprise, uno scambio di compilatore o bundler è esattamente il tipo di modifica che sembra gratuita e poi divora uno sprint. Quindi trattalo come un esercizio di misurazione, non di fede.
Attivalo in un branch, non nel percorso di build principale. In Next.js 16.3 i flag sono espliciti: imposta reactCompiler: true e experimental.turbopackRustReactCompiler: true, e ricorda che influisce solo sul percorso Turbopack, non su --webpack. Poi fai il benchmark della tua app. Il range 20-50% è il numero di Vercel sulle app di Vercel. Il tuo guadagno dipende da quanto i tuoi componenti siano dipendenti dal compilatore e da quanto fredde partano le cache CI.
La parte che monitoreremmo più attentamente è la parità dell'output. Un compilatore che memoizza in modo leggermente diverso può cambiare il comportamento di rendering in modi che i tuoi unit test non rilevano. Dal nostro lavoro con PHP e Docker abbiamo imparato a bloccare le versioni degli strumenti in CI e a confrontare l'output di build tra il vecchio e il nuovo percorso prima di distribuire. Fai lo stesso qui: esegui l'intera suite end-to-end sul percorso Rust, confronta l'output del bundle e mantieni il percorso Babel come rollback con un solo flag finché non ti fidi.
Il segnale più ampio
C'è una tendenza di secondo ordine che vale la pena citare. Questo fa parte di uno spostamento costante degli strumenti frontend verso Rust. SWC ora si basa sul compilatore Rust ufficiale, Oxc lo distribuisce come crate, e Rspack 2.1 ha aggiunto il supporto nativo. Non tutti i tentativi sono stati puliti: il maintainer di Rolldown ha ritirato la loro integrazione del React Compiler Rust per sistemarla prima, quindi la transizione non è finita. Ma la direzione è tracciata. Se il tuo build tooling è una pila di loader Webpack personalizzati e require dinamici, quel debito diventerà sempre più costoso da portare.
Nemmeno i team mobile dovrebbero ignorarlo. Nei nostri progetti native e React Native lo stesso schema vale: il compilatore gira anche lì, e i tempi di build prevedibili contano ancora di più quando la tua CI sta già gestendo toolchain native. E sul fronte della sicurezza, dalle nostre attività di pentesting la lezione è banale ma reale. Ogni nuova dipendenza di build è una nuova superficie della supply chain. Un compilatore sperimentale assistito dall'AI nella tua pipeline merita una revisione delle dipendenze, non un'installazione alla cieca.
Una cosa da fare oggi
Anche se non attiverai mai il flag Rust: se sei su Next.js e non stai ancora usando il React Compiler, quello è il guadagno più grande che ti stai perdendo. Abilita reactCompiler in un branch, elimina un gruppo di chiamate manuali a useMemo e useCallback, e misura l'impatto sul rendering e sulla build. Il port Rust rende solo quel percorso meno costoso da adottare in seguito, una volta uscito dalla fase sperimentale.
Se rincorrere i tempi di build o districare una cassa di configurazioni bundler personalizzate ti suona familiare, parliamo. Aiutiamo i team web e mobile a consegnare più velocemente senza scommettere la produzione su un flag sperimentale.