Perry: TypeScript verso binari nativi
Perry è un compilatore che trasforma codice TypeScript in eseguibili nativi senza passare per JavaScript intermedio. La versione 0.5.306, presentata su Hacker News, usa SWC per il parsing e LLVM per la generazione del codice. Produce binari standalone per macOS, iOS, Android, Linux, Windows e WebAssembly, con dimensioni tipiche tra 2 e 5 MB. Non richiede runtime Node.js né Electron.
Meccanismo di compilazione

Il flusso parte dal parser SWC, che legge direttamente il sorgente TypeScript. LLVM riceve poi le istruzioni intermedie e applica ottimizzazioni per produrre codice macchina specifico per ciascuna piattaforma. Non esiste uno step di transpilazione verso JavaScript, quindi il binario finale non contiene V8 a meno che non si attivi esplicitamente il flag per compatibilità con pacchetti npm puri.
Il comando base è perry compile main.ts. Il risultato è un singolo file eseguibile che può essere distribuito senza dipendenze aggiuntive. Perry implementa in modo nativo API come fs, path, crypto, child_process e Buffer, mantenendo la stessa interfaccia usata in Node.js.
Funzionalità per interfacce native

Perry include oltre 25 widget che compilano direttamente su AppKit, UIKit, GTK4 e Win32. Non usa web view. Il supporto copre pulsanti, tabelle, canvas, campi sicuri e visualizzatori QR. Il sistema di threading permette parallelMap e spawn su thread del sistema operativo, con controlli a tempo di compilazione che impediscono catture mutabili.
Per la localizzazione, il compilatore estrae le stringhe e applica regole plurali CLDR per oltre 30 lingue, integrando le traduzioni direttamente nel binario. I plugin si compongono a tempo di compilazione, eliminando overhead IPC.
Limiti e casi d'uso
I binari rimangono piccoli solo se non si attiva il runtime V8 opzionale, che li porta a 15-20 MB per usare pacchetti JavaScript non ancora portati in nativo. Il progetto è ancora in fase iniziale e la copertura delle API Node.js non è completa. Per applicazioni che dipendono da moduli complessi, il percorso rimane più lungo rispetto a framework consolidati.
Su progetti con interfacce grafiche native e requisiti di avvio rapido, Perry riduce le dimensioni rispetto a Electron e toglie la dipendenza dal motore JavaScript. Per servizi backend puri, il vantaggio è meno evidente finché non esiste una libreria equivalente a quanto già disponibile in Rust o Go.
FAQ
Perry supporta già tutti i moduli npm? No. Solo i pacchetti puramente JavaScript funzionano con il runtime V8 opzionale; quelli con binding nativi richiedono porting.
I binari prodotti sono riproducibili? Sì. Stesso input e stessa versione del compilatore generano lo stesso eseguibile su macchine diverse.
Quali piattaforme hanno lo stato più stabile? macOS, iOS e Linux mostrano implementazioni più mature per i widget nativi rispetto ad Android e Windows.
---
📖 Leggi anche
- Agentic Coding: Una Trappola per lo Sviluppo Software?
- Lean-ctx: Ottimizzatore Ibrido Riduce Consumo Token LLM del 89-99%
- Rust rivoluziona Claude Code: Avvio 2.5x più rapido e volume ridotto del 97%
Hai bisogno di una consulenza?
Aiuto aziende e startup a sviluppare software, automatizzare processi e integrare AI. Parliamone.
Scrivimi