Perry vs Deno
Deno est un runtime JavaScript et TypeScript moderne bâti sur V8, avec un support TypeScript de premier ordre, un modèle de sécurité fondé sur des permissions et une commande `deno compile` qui produit un exécutable unique en regroupant V8 avec votre application. Perry compile TypeScript directement en code machine natif — pas de V8 dans la sortie, pas de couche runtime, juste un petit binaire natif.
Qu'est-ce que Deno ?
Deno est un runtime TypeScript et JavaScript écrit en Rust au-dessus de V8 et Tokio. Il exécute directement les sources `.ts`, dispose d'outillage intégré (formatter, linter, test runner, language server) et utilise un modèle de permissions qui exige des autorisations explicites pour l'accès au réseau, aux fichiers et à l'environnement. `deno compile` produit un exécutable autonome en regroupant le runtime Deno (qui inclut V8) avec votre code. Deno cible Linux, macOS et Windows en x64 et arm64.
Qu'est-ce que Perry ?
Perry est un compilateur TypeScript natif écrit en Rust. Il compile TypeScript directement en code machine natif via LLVM — pas de V8, pas de JIT, pas de runtime. La sortie est un binaire unique, typiquement de quelques centaines de Ko à quelques Mo de code natif, optionnellement plus grand si vous activez le runtime V8 embarqué pour les paquets npm qui ont besoin d'un moteur JS.
Côte à côte
| Fonctionnalité | Perry | Deno |
|---|---|---|
| Sortie | Code machine natif (LLVM) | Votre code + runtime Deno (V8) regroupés |
| Moteur JavaScript dans le binaire | Aucun par défaut ; V8 optionnel | V8, toujours |
| Taille du binaire hello-world | ~330 Ko | ~80–100 Mo (inclut V8) |
| JIT | Non (compilé AOT) | Oui (TurboFan de V8) |
| Cibles mobiles | iOS, iPadOS, Android | Non |
| Montre / TV / WASM / Web | watchOS, tvOS, Wear OS, WASM, Web/JS | Non |
| UI native | Plus de 25 widgets via les API natives de plateforme | Non |
| Modèle de permissions | Permissions de processus OS standards | Permissions runtime granulaires (--allow-net, --allow-read, etc.) |
| Stabilité | Pré-1.0 | Stable (1.x / 2.x) |
| Construit en | Rust | Rust (sur V8) |
Là où Perry l'emporte
- +Binaires nettement plus petits. Un hello world Perry fait ~330 Ko. Les sorties `deno compile` incluent V8 et atteignent 80 à 100 Mo.
- +Aucun moteur JavaScript dans le binaire. Votre TypeScript est compilé en code machine natif, pas interprété par V8 à l'exécution.
- +Cibles mobile, montre, TV, WASM et Web. Deno se limite au serveur/desktop.
- +Widgets UI natifs qui se mappent vers AppKit, UIKit, GTK4, Win32 et JNI — sans équivalent dans Deno.
- +Démarrage à froid plus rapide. Les binaires natifs compilés AOT n'ont pas à payer le coût de démarrage de V8.
- +Leadership sur les microbenchmarks de calcul à conditions équivalentes sur M1 Max où les valeurs par défaut fast-math `reassoc contract` de Perry permettent à LLVM d'autovectoriser et de réduire les accumulateurs trivialement réductibles (par exemple, loop_overhead 12 ms, math_intensive 14 ms ; voir perry/benchmarks).
Là où Deno l'emporte
- +Runtime mature et stable avec un long historique et une ligne 2.x active.
- +Modèle de permissions granulaire. Deno requiert des `--allow-net`, `--allow-read`, etc. explicites — utile pour les scripts en bac à sable et le code non fiable.
- +Outillage intégré : formatter, linter, test runner, générateur de docs, LSP, le tout dans le runtime.
- +Écosystème V8 complet à l'exécution — tout ce qui tourne sur V8 tourne sur Deno, y compris les optimisations JIT sur les chemins chauds longs.
- +TypeScript de première classe sans étape de compilation séparée en développement, avec une pipeline de vérification de types entièrement gérée.
- +API de plateforme web standardisées (fetch, Web Streams, Web Crypto) implémentées nativement dans le runtime.
Quand choisir Perry
Choisissez Perry si vous voulez un binaire natif petit et au démarrage rapide, si vous livrez vers le mobile ou d'autres cibles non-serveur, si vous voulez de l'UI native, ou si vous voulez compiler TypeScript en un binaire qui ne contient pas de moteur JS.
Quand choisir Deno
Choisissez Deno si vous voulez un runtime TypeScript stable et tout-équipé, si vous accordez de la valeur au bac à sable de permissions, si vous construisez des charges côté serveur ou de scripting, ou si vous avez besoin d'une compatibilité complète avec l'écosystème V8 à l'exécution.
Verdict
Les deux permettent de livrer un programme TypeScript sous forme de binaire unique ; la différence est ce qu'il y a à l'intérieur. Deno vous donne V8 + un runtime soigné + un bac à sable de permissions. Perry vous donne du code machine natif sans moteur. Deno est le meilleur choix pour le travail côté serveur et de scripting où l'écosystème et le modèle de permissions importent. Perry est le meilleur choix quand il vous faut un binaire petit et au démarrage rapide, des cibles mobiles ou de l'UI native.