Perry vs Deno
Deno ist eine moderne JavaScript- und TypeScript-Runtime auf V8-Basis, mit erstklassigem TypeScript-Support, einem berechtigungsbasierten Sicherheitsmodell und einem `deno compile`-Befehl, der durch Bündelung von V8 mit deiner Anwendung ein einzelnes Executable erzeugt. Perry kompiliert TypeScript direkt zu nativem Maschinencode — kein V8 im Output, keine Runtime-Schicht, einfach ein kleines natives Binary.
Was ist Deno?
Deno ist eine in Rust gebaute TypeScript- und JavaScript-Runtime auf Basis von V8 und Tokio. Sie führt `.ts`-Quellcode direkt aus, hat eingebautes Tooling (Formatter, Linter, Test-Runner, Language Server) und nutzt ein Berechtigungsmodell, das explizite Freigaben für Netzwerk-, Datei- und Umgebungszugriff verlangt. `deno compile` erzeugt ein eigenständiges Executable, indem die Deno-Runtime (die V8 enthält) mit deinem Code gebündelt wird. Deno unterstützt Linux, macOS und Windows auf x64 und arm64.
Was ist Perry?
Perry ist ein nativer TypeScript-Compiler, geschrieben in Rust. Er kompiliert TypeScript direkt über LLVM zu nativem Maschinencode — kein V8, kein JIT, keine Runtime. Der Output ist ein einzelnes Binary, typischerweise ein paar hundert KB bis ein paar MB für nativen Code, optional größer, wenn du dich für die eingebettete V8-Runtime für npm-Pakete entscheidest, die eine JS-Engine brauchen.
Direktvergleich
| Feature | Perry | Deno |
|---|---|---|
| Output | Nativer Maschinencode (LLVM) | Dein Code + Deno-Runtime (V8) gebündelt |
| JavaScript-Engine im Binary | Standardmäßig keine; optional V8 | V8, immer |
| Hello-World-Binary-Größe | ~330 KB | ~80–100 MB (inklusive V8) |
| JIT | Nein (AOT-kompiliert) | Ja (V8 TurboFan) |
| Mobile-Targets | iOS, iPadOS, Android | Nein |
| Watch / TV / WASM / Web | watchOS, tvOS, Wear OS, WASM, Web/JS | Nein |
| Native UI | 25+ Widgets über native Plattform-APIs | Nein |
| Berechtigungsmodell | Standard-OS-Prozessberechtigungen | Granulare Runtime-Berechtigungen (--allow-net, --allow-read, etc.) |
| Stabilität | Pre-1.0 | Stabil (1.x / 2.x) |
| Gebaut in | Rust | Rust (auf V8) |
Wo Perry gewinnt
- +Drastisch kleinere Binaries. Ein Perry-Hello-World ist ~330 KB. `deno compile`-Outputs enthalten V8 und liegen im Bereich von 80–100 MB.
- +Keine JavaScript-Engine im Binary. Dein TypeScript wird zu nativem Maschinencode kompiliert, nicht zur Laufzeit von V8 interpretiert.
- +Mobile-, Watch-, TV-, WASM- und Web-Targets. Deno läuft nur auf Server und Desktop.
- +Native UI-Widgets, die auf AppKit, UIKit, GTK4, Win32 und JNI abgebildet werden — kein Pendant in Deno.
- +Schnellerer Cold Start. AOT-kompilierte native Binaries zahlen keine V8-Startup-Kosten.
- +Compute-Mikrobenchmark-Führung unter abgestimmten Bedingungen auf M1 Max, wo Perrys `reassoc contract`-Fast-Math-Defaults LLVM autovektorisieren und trivial faltbare Akkumulatoren falten lassen (z. B. loop_overhead 12 ms, math_intensive 14 ms; siehe perry/benchmarks).
Wo Deno gewinnt
- +Reife, stabile Runtime mit langer Erfolgsbilanz und aktiver 2.x-Linie.
- +Granulares Berechtigungsmodell. Deno verlangt explizit `--allow-net`, `--allow-read` etc. — nützlich für Sandbox-Skripte und nicht vertrauenswürdigen Code.
- +Eingebautes Tooling: Formatter, Linter, Test-Runner, Doc-Generator, LSP, alles in der Runtime.
- +Volles V8-Ökosystem zur Laufzeit — alles, was auf V8 läuft, läuft auf Deno, inklusive JIT-Optimierungen auf langlaufenden Hot Paths.
- +Erstklassiges TypeScript ohne separaten Compile-Schritt in der Entwicklung, mit einer vollständig verwalteten Type-Checking-Pipeline.
- +Standardisierte Web-Plattform-APIs (fetch, Web Streams, Web Crypto), nativ in der Runtime implementiert.
Wann Perry wählen
Wähle Perry, wenn du ein kleines, schnell startendes natives Binary willst, wenn du für Mobile oder andere Nicht-Server-Targets ausliefern willst, wenn du native UI willst oder wenn du TypeScript zu einem Binary kompilieren willst, das keine JS-Engine enthält.
Wann Deno wählen
Wähle Deno, wenn du eine stabile, mit Tooling ausgestattete TypeScript-Runtime willst, wenn du die Berechtigungs-Sandbox schätzt, wenn du serverseitige oder Scripting-Workloads baust oder wenn du volle V8-Ökosystem-Kompatibilität zur Laufzeit brauchst.
Fazit
Beide erlauben dir, ein TypeScript-Programm als einzelnes Binary auszuliefern; der Unterschied liegt in dem, was in diesem Binary steckt. Deno gibt dir V8 + eine kuratierte Runtime + eine Berechtigungs-Sandbox. Perry gibt dir nativen Maschinencode ohne Engine. Deno ist die bessere Wahl für serverseitige und Scripting-Arbeit, bei der Ökosystem und Berechtigungsmodell zählen. Perry ist die bessere Wahl, wenn du ein kleines, schnell startendes Binary, Mobile-Targets oder native UI brauchst.