Perry compila TypeScript in eseguibili nativi con SWC e LLVM

Perry compila TypeScript direttamente in binari nativi usando SWC e LLVM, senza runtime e con performance superiori a Node e Bun su più benchmark.

Perry compila TypeScript in eseguibili nativi con SWC e LLVM

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

A modern, abstract 3D illustration showing a glowing data stream passing through a high-tech processor node, transforming into solid metallic cubes representing native binary files. Dark theme with neon blue and purple accents, no text or logos.

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

An abstract 3D composition of modern user interface elements like floating buttons, sliders, and panels assembling together in a sleek, minimalist environment. Soft lighting, glassmorphism style, tech-focused, no text or logos.

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

Hai bisogno di una consulenza?

Aiuto aziende e startup a sviluppare software, automatizzare processi e integrare AI. Parliamone.

Scrivimi
← Torna al blog