Perry vs Static Hermes
Static Hermes (`shermes`) è lo sforzo a stadio di ricerca di Meta per compilare ahead-of-time un sottoinsieme fortemente tipizzato di JavaScript/TypeScript attraverso il motore Hermes, principalmente rivolto a React Native. Perry è una scommessa diversa sulla stessa idea generale — TypeScript compilato in nativo — ma costruita indipendentemente in Rust su LLVM, con un compilatore funzionante, 25+ widget UI nativi e 10 target di compilazione distribuiti oggi. Ad aprile 2026, la suite di benchmark di Perry stessa riporta che Static Hermes è stato provato come peer e non era installabile in modo pulito tramite i package manager standard testati.
Cos'è Static Hermes?
Hermes è il motore JavaScript che Meta ha costruito per React Native — basato su bytecode, precompilato AOT, ottimizzato per il tempo di avvio mobile. Static Hermes è lo sforzo di ricerca per estendere Hermes con compilazione nativa ahead-of-time di un sottoinsieme JavaScript tipizzato, inteso a dare a React Native un percorso verso vero codice nativo. È principalmente un progetto di R&S sui compilatori; secondo le note di benchmark di Perry, non è ancora pacchettizzato per l'installazione di routine su macOS arm64 (`shermes` è stato saltato dal benchmark poliglotta con una nota che 'non è disponibile su Homebrew o npm in un modo che si installi pulitamente su macOS arm64' — vedi perry/benchmarks/README.md).
Cos'è Perry?
Perry è un compilatore TypeScript nativo scritto in Rust, che usa SWC per il parsing e LLVM per la generazione del codice. Distribuisce una CLI funzionante (`perry compile`, `perry run`, `perry publish`), 25+ widget UI nativi, 10 target di compilazione, un runtime self-hosted e una suite di benchmark misurata in condizioni trasparenti (M1 Max, RUNS=11). Perry è pre-1.0 ma production-track: ci sono persone che distribuiscono app costruite con esso (Bloom Engine, Mango, Hone, Pry, dB Meter — vedi perryts.com).
Fianco a fianco
| Caratteristica | Perry | Static Hermes |
|---|---|---|
| Stato | Pre-1.0 (alpha) — production-track | Ricerca / sperimentale |
| Percorso di installazione (macOS arm64) | Homebrew, APT, npm (@perryts/perry) | Non pacchettizzato per installazione pulita al momento della scrittura (per perry/benchmarks) |
| Backend | LLVM | Personalizzato (codegen basato su Hermes) |
| Input | TypeScript (completo) | Sottoinsieme JS/TS tipizzato |
| Target di compilazione | 10: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WASM, Web/JS | Principalmente mobile (contesto React Native) |
| UI nativa | 25+ widget tramite AppKit, UIKit, GTK4, Win32, JNI | Tramite il bridge React Native (quando integrato) |
| Workflow per app CLI autonome | Sì — `perry compile main.ts` produce un binario | Legato al contesto React Native |
| Suite di benchmark pubblica | Sì — RUNS=11 contro Node, Bun, Rust, C++, Go, Swift, Java | Interna / paper di ricerca |
Dove vince Perry
- +Esiste come strumento utilizzabile. Perry può essere installato oggi tramite Homebrew, APT o `npm install @perryts/perry`, e `perry compile main.ts` produce un binario al primo tentativo.
- +Ambito più ampio. Perry compila app CLI autonome, app desktop native, app mobile, app per watch, app per TV, WASM e il web da un unico codice TypeScript. Static Hermes è focalizzato sul percorso di codice nativo di React Native.
- +UI nativa integrata. Il modulo perry/ui di Perry è un layer UI dichiarativo in stile SwiftUI funzionante che compila in widget AppKit/UIKit/GTK4/Win32/JNI. Static Hermes lascia l'UI al suo host (React Native).
- +Suite di benchmark pubblica e riproducibile con metodologia documentata — perry/benchmarks mostra mediana + p95 + σ su RUNS=11 contro compilatori e runtime nominati.
- +Il backend LLVM significa che Perry eredita decenni di passi di ottimizzazione maturi (autovettorizzazione, IndVarSimplify, scalar replacement) e supporta ogni piattaforma che LLVM supporta.
Dove vince Static Hermes
- +Sostenuto da Meta — risorse di ingegneria significative e un'ancora strategica chiara in React Native.
- +Hermes è già distribuito in app React Native di produzione come motore bytecode; Static Hermes eredita quell'ecosistema e quella tooling.
- +Lavoro di livello ricerca su regole di tipizzazione AOT e semantica del sottoinsieme JS che è genuinamente innovativo.
- +Se sei già su React Native, Static Hermes (quando disponibile) è un percorso più incrementale rispetto a riscrivere contro un compilatore diverso.
Quando scegliere Perry
Scegli Perry se hai bisogno di un compilatore TS-to-native che funzioni oggi, vuoi un unico codice TypeScript per puntare a desktop, mobile, watch, TV, WASM e il web, o vuoi widget UI nativi senza il bridge di React Native.
Quando scegliere Static Hermes
Scegli Static Hermes (quando disponibile) se sei impegnato con React Native e vuoi un percorso da JavaScript/TypeScript a codice nativo compilato ahead-of-time su mobile, e ti senti a tuo agio a lavorare al limite del tooling di ricerca.
Verdetto
Static Hermes è ricerca interessante da un team credibile. Perry è un prodotto funzionante sulla stessa idea generale, con un ambito molto più ampio del solo mobile e distribuito oggi. Se hai bisogno di un compilatore TS-to-native nelle tue mani ora, Perry è la scelta. Se sei su React Native e disposto a seguire un progetto di ricerca, tieni d'occhio Static Hermes.