Perry vs Deno
Deno è un moderno runtime JavaScript e TypeScript costruito su V8, con supporto TypeScript di prima classe, un modello di sicurezza basato sui permessi e un comando `deno compile` che produce un singolo eseguibile raggruppando V8 con la tua applicazione. Perry compila TypeScript direttamente in codice macchina nativo — nessun V8 nell'output, nessun layer di runtime, solo un piccolo binario nativo.
Cos'è Deno?
Deno è un runtime TypeScript e JavaScript costruito in Rust sopra V8 e Tokio. Esegue i sorgenti `.ts` direttamente, ha tooling integrato (formatter, linter, test runner, language server) e usa un modello di permessi che richiede concessioni esplicite per l'accesso a rete, file e ambiente. `deno compile` produce un eseguibile autonomo raggruppando il runtime Deno (che include V8) con il tuo codice. Deno supporta Linux, macOS e Windows su x64 e arm64.
Cos'è Perry?
Perry è un compilatore TypeScript nativo scritto in Rust. Compila TypeScript direttamente in codice macchina nativo tramite LLVM — nessun V8, nessun JIT, nessun runtime. L'output è un singolo binario, tipicamente da poche centinaia di KB a pochi MB per il codice nativo, opzionalmente più grande se attivi il runtime V8 embedded per pacchetti npm che richiedono un motore JS.
Fianco a fianco
| Caratteristica | Perry | Deno |
|---|---|---|
| Output | Codice macchina nativo (LLVM) | Il tuo codice + runtime Deno (V8) raggruppati |
| Motore JavaScript nel binario | Nessuno di default; V8 opzionale | V8, sempre |
| Dimensione del binario hello-world | ~330 KB | ~80–100 MB (include V8) |
| JIT | No (compilato AOT) | Sì (TurboFan di V8) |
| Target mobile | iOS, iPadOS, Android | No |
| Watch / TV / WASM / Web | watchOS, tvOS, Wear OS, WASM, Web/JS | No |
| UI nativa | 25+ widget tramite API native della piattaforma | No |
| Modello dei permessi | Permessi standard del processo OS | Permessi di runtime granulari (--allow-net, --allow-read, ecc.) |
| Stabilità | Pre-1.0 | Stabile (1.x / 2.x) |
| Costruito in | Rust | Rust (su V8) |
Dove vince Perry
- +Binari drasticamente più piccoli. Un hello world Perry è ~330 KB. Gli output di `deno compile` includono V8 e si attestano nell'intervallo di 80–100 MB.
- +Nessun motore JavaScript nel binario. Il tuo TypeScript è compilato in codice macchina nativo, non interpretato da V8 a runtime.
- +Target mobile, watch, TV, WASM e Web. Deno è solo server/desktop.
- +Widget UI nativi che mappano su AppKit, UIKit, GTK4, Win32 e JNI — nessun equivalente in Deno.
- +Avvio a freddo più veloce. I binari nativi compilati AOT non pagano il costo di avvio di V8.
- +Leadership nei microbenchmark di calcolo in condizioni paragonabili su M1 Max dove i default fast-math `reassoc contract` di Perry permettono a LLVM di autovectorizzare e ridurre accumulatori banalmente riducibili (es. loop_overhead 12 ms, math_intensive 14 ms; vedi perry/benchmarks).
Dove vince Deno
- +Runtime maturo e stabile con un lungo storico e una linea 2.x attiva.
- +Modello di permessi granulare. Deno richiede esplicitamente `--allow-net`, `--allow-read`, ecc. — utile per script in sandbox e codice non fidato.
- +Tooling integrato: formatter, linter, test runner, generatore di documentazione, LSP, tutto nel runtime.
- +Ecosistema V8 completo a runtime — qualunque cosa giri su V8 gira su Deno, comprese le ottimizzazioni JIT su percorsi caldi a lunga esecuzione.
- +TypeScript di prima classe senza uno step di compilazione separato in sviluppo, con una pipeline di type-checking pienamente gestita.
- +API web-platform standardizzate (fetch, Web Streams, Web Crypto) implementate nativamente nel runtime.
Quando scegliere Perry
Scegli Perry se vuoi un binario nativo piccolo e ad avvio rapido, stai distribuendo su mobile o altri target non-server, vuoi UI nativa, o vuoi compilare TypeScript in un binario che non contenga un motore JS.
Quando scegliere Deno
Scegli Deno se vuoi un runtime TypeScript stabile e batteries-included, apprezzi la sandbox dei permessi, stai costruendo carichi server-side o di scripting, o hai bisogno della piena compatibilità con l'ecosistema V8 a runtime.
Verdetto
Entrambi permettono di distribuire un programma TypeScript come singolo binario; la differenza è cosa c'è dentro quel binario. Deno ti offre V8 + un runtime curato + sandbox dei permessi. Perry ti offre codice macchina nativo senza motore. Deno è la scelta migliore per il lavoro server-side e di scripting dove contano l'ecosistema e il modello dei permessi. Perry è la scelta migliore quando hai bisogno di un binario piccolo, ad avvio rapido, di target mobile o di UI nativa.