Perry vs Deno
Deno; V8 üzerine inşa edilmiş, birinci sınıf TypeScript desteği, izin tabanlı bir güvenlik modeli ve V8'i uygulamanızla birlikte paketleyerek tek bir çalıştırılabilir dosya üreten bir `deno compile` komutu sunan modern bir JavaScript ve TypeScript çalışma zamanıdır. Perry, TypeScript'i doğrudan yerel makine koduna derler — çıktıda V8 yok, çalışma zamanı katmanı yok, sadece küçük bir yerel ikili dosya.
Deno nedir?
Deno; Rust ile, V8 ve Tokio'nun üzerine inşa edilmiş bir TypeScript ve JavaScript çalışma zamanıdır. `.ts` kaynağını doğrudan çalıştırır, yerleşik araçlara sahiptir (formatlayıcı, linter, test koşturucusu, dil sunucusu) ve ağ, dosya ve ortam erişimi için açık izinler gerektiren bir izin modeli kullanır. `deno compile`, kodunuzla birlikte Deno çalışma zamanını (V8 dahil) paketleyerek bağımsız bir çalıştırılabilir dosya üretir. Deno; Linux, macOS ve Windows'u x64 ve arm64 üzerinde hedefler.
Perry nedir?
Perry, Rust ile yazılmış yerel bir TypeScript derleyicisidir. TypeScript'i LLVM aracılığıyla doğrudan yerel makine koduna derler — V8 yok, JIT yok, çalışma zamanı yok. Çıktı tek bir ikili dosyadır; yerel kod için tipik olarak birkaç yüz KB ile birkaç MB arasında, JS motoru gereken npm paketleri için isteğe bağlı gömülü V8 çalışma zamanını seçerseniz daha büyüktür.
Yan yana
| Özellik | Perry | Deno |
|---|---|---|
| Çıktı | Yerel makine kodu (LLVM) | Kodunuz + Deno çalışma zamanı (V8) paketlenmiş |
| İkili dosyada JavaScript motoru | Varsayılan olarak yok; isteğe bağlı V8 | Her zaman V8 |
| Hello-world ikili dosya boyutu | ~330 KB | ~80–100 MB (V8 dahil) |
| JIT | Hayır (AOT derlenmiş) | Evet (V8 TurboFan) |
| Mobil hedefler | iOS, iPadOS, Android | Hayır |
| Watch / TV / WASM / Web | watchOS, tvOS, Wear OS, WASM, Web/JS | Hayır |
| Yerel UI | Yerel platform API'leri ile 25+ widget | Hayır |
| İzin modeli | Standart işletim sistemi süreç izinleri | Granüler çalıştırma zamanı izinleri (--allow-net, --allow-read, vb.) |
| Kararlılık | 1.0 öncesi | Kararlı (1.x / 2.x) |
| Yazıldığı dil | Rust | Rust (V8 üzerinde) |
Perry'nin kazandığı yerler
- +Çarpıcı şekilde daha küçük ikili dosyalar. Bir Perry hello world ~330 KB. `deno compile` çıktıları V8'i içerir ve 80–100 MB aralığına çıkar.
- +İkili dosyada JavaScript motoru yok. TypeScript'iniz çalışma zamanında V8 tarafından yorumlanmak yerine yerel makine koduna derlenir.
- +Mobil, watch, TV, WASM ve Web hedefleri. Deno yalnızca sunucu/masaüstüdür.
- +AppKit, UIKit, GTK4, Win32 ve JNI'ya eşlenen yerel UI widget'ları — Deno'da eşdeğeri yok.
- +Daha hızlı soğuk başlatma. AOT-derlenmiş yerel ikili dosyalar V8 başlatma maliyeti ödemez.
- +M1 Max üzerinde eşleştirilmiş koşullarda Perry'nin `reassoc contract` fast-math varsayılanlarının LLVM'in autovectorize etmesine ve önemsiz şekilde katlanabilir akümülatörleri katlamasına izin verdiği hesaplama mikro-benchmark liderliği (örn., loop_overhead 12 ms, math_intensive 14 ms; perry/benchmarks'a bakın).
Deno'in kazandığı yerler
- +Uzun bir geçmişe ve aktif 2.x serisine sahip olgun, kararlı çalışma zamanı.
- +Granüler izin modeli. Deno açık `--allow-net`, `--allow-read` vb. gerektirir — sandbox'lı betikler ve güvenilmeyen kod için faydalı.
- +Yerleşik araçlar: formatlayıcı, linter, test koşturucusu, doc oluşturucusu, LSP — hepsi çalışma zamanında.
- +Çalışma zamanında tam V8 ekosistemi — V8 üzerinde çalışan her şey Deno'da çalışır, uzun süreli sıcak yollardaki JIT optimizasyonları dahil.
- +Geliştirme sırasında ayrı bir derleyici adımı olmadan birinci sınıf TypeScript, tamamen yönetilen bir tip kontrol pipeline'ı ile.
- +Standart web platformu API'leri (fetch, Web Streams, Web Crypto) çalışma zamanında yerel olarak implemente edilir.
Perry'i ne zaman seçmeli
Küçük, hızlı başlayan bir yerel ikili dosya istiyorsanız, mobil veya başka sunucu-dışı hedeflere gönderiyorsanız, yerel UI istiyorsanız veya TypeScript'i JS motoru içermeyen bir ikili dosyaya derlemek istiyorsanız Perry'yi seçin.
Deno'i ne zaman seçmeli
Kararlı, her şey dahil bir TypeScript çalışma zamanı istiyorsanız, izin sandbox'ına değer veriyorsanız, sunucu tarafı veya betikleme iş yükleri inşa ediyorsanız ya da çalışma zamanında tam V8 ekosistemi uyumluluğuna ihtiyacınız varsa Deno'yu seçin.
Karar
Her ikisi de bir TypeScript programını tek bir ikili dosya olarak göndermenizi sağlar; fark, o ikili dosyanın içinde ne olduğudur. Deno size V8 + bir derlenmiş çalışma zamanı + izin sandbox'ı verir. Perry size motor içermeyen yerel makine kodu verir. Ekosistemin ve izin modelinin önemli olduğu sunucu tarafı ve betikleme çalışmaları için Deno daha iyi bir seçimdir. Küçük, hızlı başlayan bir ikili dosya, mobil hedefler veya yerel UI'ya ihtiyacınız olduğunda ise Perry daha iyi bir seçimdir.