Kembali ke perbandingan
Runtime TypeScript

Perry vs Bun

Bun adalah runtime JavaScript/TypeScript serba ada, bundler, manajer paket, dan test runner yang juga dapat menghasilkan executable file tunggal dengan membundel runtime-nya bersama kode Anda. Perry mengambil jalur berbeda: ia mengompilasi TypeScript langsung ke kode mesin native melalui LLVM — tanpa engine JavaScript di binary, tanpa runtime, hanya executable native yang kecil. Bun dan Perry tumpang tindih pada output TS-ke-binary tetapi tidak sepakat tentang apakah engine JavaScript harus ada di binary tersebut.

Apa itu Bun?

Bun adalah toolkit JavaScript dan TypeScript serba ada yang cepat, dibangun dengan Zig. Ia menjalankan source `.ts` secara langsung (tanpa langkah prakompilasi), menggunakan JavaScriptCore sebagai engine JS-nya, dan menyertakan bundler, manajer paket, dan test runner. `bun build --compile` membundel runtime Bun bersama aplikasi Anda menjadi satu executable. Bun menargetkan Linux, macOS, dan Windows pada x64 dan arm64.

Apa itu Perry?

Perry adalah kompiler TypeScript native yang ditulis dalam Rust. Ia mengompilasi TypeScript langsung ke kode mesin native melalui LLVM — tanpa engine JavaScript, tanpa runtime, tanpa JIT. Outputnya adalah satu binary (sekitar 330 KB untuk hello world; ~48 MB untuk aplikasi stdlib lengkap seperti server Fastify). Perry menargetkan 10 platform termasuk macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WebAssembly, dan Web.

Berdampingan

FiturPerryBun
OutputKode mesin native (LLVM)Kode Anda + runtime Bun dibundel dalam satu binary
Engine JavaScript di binaryTidak ada secara default; V8 opsional dengan --enable-js-runtime (+~15 MB)JavaScriptCore, selalu
Ukuran binary hello-world~330 KB~50–100 MB (termasuk runtime Bun)
JITTidak (dikompilasi AOT)Ya (JIT JavaScriptCore)
Target mobile (iOS, Android)Ya — UI native via UIKit/JNITidak
Target watch / TVwatchOS, tvOS, Wear OSTidak
Widget UI native25+ via AppKit, UIKit, GTK4, Win32, JNITidak (fokus server/CLI)
Ekosistem npmPaket TS/JS murni dapat dikompilasi secara native; lainnya via V8 opsionalnpm kompatibel Node sepenuhnya
StabilitasPra-1.0 (alfa)Stabil (1.x)
Dibangun denganRustZig

Di mana Perry unggul

  • +Binary lebih kecil — hello world Perry ~330 KB; hello world Bun --compile menyertakan runtime Bun dan mencapai puluhan megabyte.
  • +Tanpa biaya engine JavaScript. Binary yang dikompilasi Perry tidak membawa interpreter atau JIT — TypeScript Anda adalah executable-nya.
  • +Mobile, watch, dan TV. Perry mengompilasi ke iOS, iPadOS, Android, watchOS, tvOS, dan WebAssembly. Bun hanya untuk server/desktop.
  • +UI native. Modul perry/ui dari Perry mengompilasi ke widget platform asli (AppKit di macOS, UIKit di iOS, GTK4 di Linux, Win32 di Windows, JNI di Android). Bun tidak punya cerita UI.
  • +Lebih cepat pada sebagian besar microbench komputasi yang diukur dalam kondisi setara di M1 Max (RUNS=11, v0.5.279, 2026-04-25): fibonacci 318 ms vs Bun 589 ms; object_create 1 ms vs 6 ms; nested_loops 18 ms vs 21 ms. Lihat perry/benchmarks untuk tabel lengkap.
  • +Lebih cepat pada JSON validate-and-roundtrip dalam kelompok dynamic typing: lazy JSON tape Perry mendarat di median 75 ms vs 259 ms Bun pada workload 10k record yang sama.

Di mana Bun unggul

  • +Runtime yang matang dan stabil dengan rilis 1.x. Perry masih pra-1.0.
  • +Lebih cepat pada JSON parse-and-iterate (di mana setiap nilai disentuh): Bun 254 ms vs Perry 466 ms median pada workload yang sama — lazy tape Perry tidak dapat memotong jalur ketika iterasi dipaksakan.
  • +Ekosistem npm kompatibel Node sepenuhnya secara langsung. Perry menjalankan subset secara native dan beralih ke V8 opsional yang tertanam untuk sisanya.
  • +Test runner, bundler, dan manajer paket bawaan. Perry adalah kompiler — tooling pendamping terpisah.
  • +Performa JIT-warm dapat melampaui AOT pada kode yang berat iterasi dengan inner loop panas; Perry tidak punya JIT.
  • +Seimbang dengan Perry dalam batas noise antar-jalan pada `loop_data_dependent` (232 ms vs 235 ms) — kernel f64 yang benar-benar tidak dapat dilipat di mana kompiler kedua belah pihak tidak dapat menyusun ulang. Sumber: perry/benchmarks RUNS=11.

Kapan memilih Perry

Pilih Perry ketika ukuran binary penting (distribusi mobile, konteks embedded, cold start cepat), ketika Anda ingin mengirim ke mobile/watch/TV dari satu kode sumber TypeScript, ketika Anda ingin widget UI native, atau ketika Anda tidak ingin engine JavaScript dalam artefak yang dikirim sama sekali.

Kapan memilih Bun

Pilih Bun ketika Anda butuh runtime yang stabil dan matang hari ini, ketika kompatibilitas npm penuh tidak bisa ditawar, ketika Anda ingin satu tool untuk runtime + bundler + manajer paket + test runner, atau ketika performa JIT-warm pada workload yang berjalan lama lebih penting bagi Anda daripada ukuran cold-start.

Kesimpulan

Bun dan Perry sama-sama memungkinkan Anda mengirim program TypeScript sebagai satu binary, tetapi keduanya menjawab pertanyaan berbeda. Binary Bun berisi runtime Bun dan dioptimalkan untuk workload backend/CLI di mana JIT dan kompatibilitas Node penuh menang. Binary Perry tidak berisi engine JS dan dioptimalkan untuk ukuran, cold start, mobile, dan UI native. Jika Anda mengirim server, Bun lebih terbukti hari ini. Jika Anda mengirim aplikasi native atau peduli ukuran binary, Perry dibangun untuk kasus itu.

Coba Perry

Kompilasi TypeScript Anda menjadi native hari ini.

Mulai