Compilando TypeScript diretamente para código de máquina LLVM: o compilador nativo "Perry"
(github.com/PerryTS)O paradigma tradicional de desenvolvimento com TypeScript sempre partiu do pressuposto de transpilar código TS, uma abstração de alto nível, para JavaScript e depois executá-lo sobre engines JIT pesadas como V8 ou JavaScriptCore, usadas por Node.js, Bun e Deno.
Surgido recentemente no cenário open source, o Perry é um compilador Native-First baseado em Rust que busca eliminar completamente esse modelo tradicional de runtime e compilar código TypeScript diretamente em binários nativos standalone.
💡 Arquitetura principal e características
-
No Runtime (runtime zero): sem camadas intermediárias pesadas como V8, Electron ou JVM, ele faz o parsing do código TS com SWC e gera diretamente código de máquina da plataforma-alvo por meio da infraestrutura LLVM.
-
Build multiplataforma a partir de uma única base de código: gera binários para macOS, iOS, Android, Linux e Windows a partir de um único código TypeScript.
-
Suporte real a TypeScript: em vez de uma "linguagem separada parecida com TS", como o AssemblyScript, a proposta é dar suporte ao ecossistema completo de TypeScript com base no Strict Mode.
-
Compatibilidade com frameworks de UI ultraleves: oferece binários de apenas alguns MB e cold start em menos de um segundo, próximo de 0 ms. Além de integrar GUIs nativas de plataforma como SwiftUI, GTK4 e WinUI, também permite escrever JSX por meio de seu próprio renderizador React.
🛠️ Estado atual do desenvolvimento e limitações (com feedback do Hacker News)
Como é um projeto que vem chamando bastante atenção no HN e em outros lugares, os desafios para chegar ao nível de produção também estão sendo discutidos com clareza.
-
Limitações das características dinâmicas de JS: estilos de JavaScript dinâmico, como injetar campos/métodos arbitrários em objetos em tempo de execução ou alterar protótipos, não são suportados devido à natureza da compilação estática; o funcionamento se baseia em um subconjunto estrito e determinístico de TS.
-
Emulação de módulos nativos do Node.js: atualmente, a biblioteca padrão HTTP do Node.js está sendo emulada com base no ecossistema Rust, usando hyper, rustls e tokio. Já conseguiu compilar alguns módulos, como Fastify, e está evoluindo rapidamente, mas a compatibilidade de 100% com bibliotecas mais complexas do ecossistema, como o Express, que envolvem imports dinâmicos, ainda é um desafio em estágio alfa.
# O uso é extremamente simples
$ perry compile src/main.ts -o myapp
$ ./myapp # executa um binário nativo puro, sem dependências
Como uma tentativa de expandir o TypeScript, antes restrito ao ecossistema web, para programação de sistemas e aplicativos nativos ultraleves, é um projeto que deve interessar bastante a quem acompanha arquiteturas de alto desempenho e pipelines de compilação com LLVM.
GitHub: https://github.com/PerryTS/perry
Ainda não há comentários.