Perry vs Deno
Deno é um runtime moderno de JavaScript e TypeScript construído sobre V8, com suporte a TypeScript de primeira classe, modelo de segurança baseado em permissões e um comando `deno compile` que produz um único executável empacotando o V8 com sua aplicação. Perry compila TypeScript diretamente para código de máquina nativo — sem V8 na saída, sem camada de runtime, apenas um pequeno binário nativo.
O que é Deno?
Deno é um runtime de TypeScript e JavaScript construído em Rust sobre V8 e Tokio. Executa código-fonte `.ts` diretamente, tem ferramentas integradas (formatador, linter, test runner, language server) e usa um modelo de permissões que requer concessões explícitas para acesso a rede, arquivos e ambiente. `deno compile` produz um executável autocontido empacotando o runtime do Deno (que inclui V8) junto com seu código. Deno tem como alvo Linux, macOS e Windows em x64 e arm64.
O que é Perry?
Perry é um compilador nativo de TypeScript escrito em Rust. Compila TypeScript diretamente para código de máquina nativo via LLVM — sem V8, sem JIT, sem runtime. A saída é um único binário, tipicamente de algumas centenas de KB a alguns MB para código nativo, opcionalmente maior se você optar pelo runtime V8 embutido para pacotes npm que precisam de um motor JS.
Lado a lado
| Funcionalidade | Perry | Deno |
|---|---|---|
| Saída | Código de máquina nativo (LLVM) | Seu código + runtime do Deno (V8) empacotados |
| Motor JavaScript no binário | Nenhum por padrão; V8 opcional | V8, sempre |
| Tamanho de binário hello-world | ~330 KB | ~80–100 MB (inclui V8) |
| JIT | Não (compilado AOT) | Sim (TurboFan do V8) |
| Alvos mobile | iOS, iPadOS, Android | Não |
| Relógio / TV / WASM / Web | watchOS, tvOS, Wear OS, WASM, Web/JS | Não |
| UI nativa | 25+ widgets via APIs nativas das plataformas | Não |
| Modelo de permissões | Permissões padrão de processo do SO | Permissões granulares de runtime (--allow-net, --allow-read, etc.) |
| Estabilidade | Pré-1.0 | Estável (1.x / 2.x) |
| Construído em | Rust | Rust (sobre V8) |
Onde o Perry ganha
- +Binários drasticamente menores. Um hello world em Perry tem ~330 KB. As saídas do `deno compile` incluem V8 e ficam na faixa de 80–100 MB.
- +Sem motor JavaScript no binário. Seu TypeScript é compilado para código de máquina nativo, não interpretado pelo V8 em runtime.
- +Alvos mobile, relógio, TV, WASM e Web. Deno é apenas servidor/desktop.
- +Widgets de UI nativos que mapeiam para AppKit, UIKit, GTK4, Win32 e JNI — sem equivalente no Deno.
- +Cold start mais rápido. Binários nativos compilados AOT não pagam o custo de inicialização do V8.
- +Liderança em microbenchmarks de computação em condições equivalentes no M1 Max, onde o `reassoc contract` fast-math padrão do Perry permite que o LLVM autovetorize e dobre acumuladores trivialmente redutíveis (por exemplo, loop_overhead 12 ms, math_intensive 14 ms; veja perry/benchmarks).
Onde o Deno ganha
- +Runtime maduro e estável com longo histórico e linha 2.x ativa.
- +Modelo de permissões granular. Deno requer `--allow-net`, `--allow-read` etc. explícitos — útil para scripts em sandbox e código não confiável.
- +Ferramentas integradas: formatador, linter, test runner, gerador de docs, LSP, tudo no runtime.
- +Ecossistema completo do V8 em runtime — qualquer coisa que roda no V8 roda no Deno, incluindo otimizações JIT em caminhos quentes de longa duração.
- +TypeScript de primeira classe sem etapa separada de compilador no desenvolvimento, com pipeline de type-checking totalmente gerenciado.
- +APIs padronizadas da plataforma web (fetch, Web Streams, Web Crypto) implementadas nativamente no runtime.
Quando escolher Perry
Escolha o Perry se você quer um binário nativo pequeno e de inicialização rápida, está entregando para mobile ou outros alvos não-servidor, quer UI nativa, ou quer compilar TypeScript para um binário que não contém um motor JS.
Quando escolher Deno
Escolha o Deno se você quer um runtime TypeScript estável e com baterias incluídas, valoriza o sandbox de permissões, está construindo cargas no lado do servidor ou de scripting, ou precisa de compatibilidade total com o ecossistema V8 em runtime.
Veredito
Ambos permitem entregar um programa TypeScript como um único binário; a diferença está no que há dentro desse binário. Deno entrega V8 + runtime curado + sandbox de permissões. Perry entrega código de máquina nativo sem motor. Deno é a melhor escolha para trabalho no servidor e scripting onde o ecossistema e o modelo de permissões importam. Perry é a melhor escolha quando você precisa de um binário pequeno e de inicialização rápida, alvos mobile ou UI nativa.