Perry vs Static Hermes
Static Hermes (`shermes`) é o esforço em estágio de pesquisa da Meta para compilar ahead-of-time um subconjunto fortemente tipado de JavaScript/TypeScript através do motor Hermes, principalmente voltado ao React Native. Perry é uma aposta diferente na mesma ideia geral — TypeScript compilado para nativo — mas construído de forma independente em Rust sobre LLVM, com um compilador funcional, mais de 25 widgets de UI nativos e 10 alvos de compilação sendo entregues hoje. Em abril de 2026, a própria suíte de benchmarks do Perry relatou que o Static Hermes foi tentado como par e não foi instalável de forma limpa via os gerenciadores de pacotes padrão testados.
O que é Static Hermes?
Hermes é o motor JavaScript que a Meta construiu para o React Native — baseado em bytecode, pré-compilado AOT, otimizado para tempo de inicialização em mobile. Static Hermes é o esforço de pesquisa para estender o Hermes com compilação nativa ahead-of-time de um subconjunto de JavaScript tipado, com o objetivo de dar ao React Native um caminho para código verdadeiramente nativo. É principalmente um projeto de P&D de compilador; segundo as notas de benchmark do Perry, ainda não está empacotado para instalação rotineira em macOS arm64 (`shermes` foi pulado do bench poliglota com a observação de que 'não está disponível no Homebrew nem no npm de uma forma que instale de forma limpa em macOS arm64' — veja perry/benchmarks/README.md).
O que é Perry?
Perry é um compilador nativo de TypeScript escrito em Rust, usando SWC para parsing e LLVM para geração de código. Entrega uma CLI funcional (`perry compile`, `perry run`, `perry publish`), mais de 25 widgets de UI nativos, 10 alvos de compilação, um runtime auto-hospedado e uma suíte de benchmarks medida sob condições transparentes (M1 Max, RUNS=11). Perry está pré-1.0, mas em trilho de produção: pessoas estão entregando aplicações construídas com ele (Bloom Engine, Mango, Hone, Pry, dB Meter — veja perryts.com).
Lado a lado
| Funcionalidade | Perry | Static Hermes |
|---|---|---|
| Status | Pré-1.0 (alfa) — em trilho de produção | Pesquisa / experimental |
| Caminho de instalação (macOS arm64) | Homebrew, APT, npm (@perryts/perry) | Não empacotado para instalação limpa no momento da redação (segundo perry/benchmarks) |
| Backend | LLVM | Personalizado (codegen baseado em Hermes) |
| Entrada | TypeScript (completo) | Subconjunto JS/TS tipado |
| Alvos de compilação | 10: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WASM, Web/JS | Principalmente mobile (contexto React Native) |
| UI nativa | 25+ widgets via AppKit, UIKit, GTK4, Win32, JNI | Via bridge do React Native (quando integrado) |
| Fluxo de trabalho de app CLI standalone | Sim — `perry compile main.ts` produz um binário | Vinculado ao contexto React Native |
| Suíte pública de benchmarks | Sim — RUNS=11 contra Node, Bun, Rust, C++, Go, Swift, Java | Interna / artigos de pesquisa |
Onde o Perry ganha
- +Existe como ferramenta utilizável. Perry pode ser instalado hoje via Homebrew, APT ou `npm install @perryts/perry`, e `perry compile main.ts` produz um binário na primeira tentativa.
- +Escopo mais amplo. Perry compila aplicações CLI standalone, aplicações desktop nativas, aplicações mobile, aplicações de relógio, aplicações de TV, WASM e a web a partir de um único código TypeScript. Static Hermes está focado no caminho de código nativo do React Native.
- +UI nativa integrada. O módulo perry/ui do Perry é uma camada de UI declarativa estilo SwiftUI funcional que compila para widgets AppKit/UIKit/GTK4/Win32/JNI. Static Hermes deixa a UI para seu host (React Native).
- +Suíte de benchmarks pública e reproduzível com metodologia documentada — perry/benchmarks mostra mediana + p95 + σ ao longo de RUNS=11 contra compiladores e runtimes nomeados.
- +Backend LLVM significa que o Perry herda décadas de passes de otimização maduros (autovetorização, IndVarSimplify, scalar replacement) e suporta cada plataforma alvo do LLVM.
Onde o Static Hermes ganha
- +Apoiado pela Meta — recursos significativos de engenharia e uma âncora estratégica clara no React Native.
- +Hermes já está em produção em aplicações React Native como motor de bytecode; Static Hermes herda esse ecossistema e ferramentas.
- +Trabalho em nível de pesquisa sobre regras de tipagem AOT e semântica de subconjunto de JS que é genuinamente novo.
- +Se você já está no React Native, Static Hermes (quando disponível) é um caminho mais incremental do que reescrever contra um compilador diferente.
Quando escolher Perry
Escolha o Perry se você precisa de um compilador TS-para-nativo que funciona hoje, quer um único código TypeScript para alvejar desktop, mobile, relógio, TV, WASM e a web, ou quer widgets de UI nativos sem o bridge do React Native.
Quando escolher Static Hermes
Escolha o Static Hermes (quando disponível) se você está comprometido com o React Native e quer um caminho de JavaScript/TypeScript para código nativo compilado ahead-of-time em mobile, e está confortável trabalhando na borda das ferramentas de pesquisa.
Veredito
Static Hermes é uma pesquisa interessante de uma equipe credível. Perry é um produto funcional na mesma ideia geral, com escopo muito mais amplo do que mobile e sendo entregue hoje. Se você precisa de um compilador TS-para-nativo em mãos agora, Perry é a escolha. Se você está no React Native e disposto a acompanhar um projeto de pesquisa, observe o Static Hermes.