Perry vs Deno
Deno là một runtime JavaScript và TypeScript hiện đại được xây dựng trên V8, với hỗ trợ TypeScript hạng nhất, mô hình bảo mật dựa trên quyền và lệnh `deno compile` tạo ra một tệp thực thi duy nhất bằng cách đóng gói V8 với ứng dụng của bạn. Perry biên dịch TypeScript trực tiếp thành mã máy gốc — không có V8 trong đầu ra, không có lớp runtime, chỉ là một binary gốc nhỏ.
Deno là gì?
Deno là một runtime TypeScript và JavaScript được xây dựng bằng Rust trên V8 và Tokio. Nó thực thi trực tiếp mã nguồn `.ts`, có công cụ tích hợp (formatter, linter, test runner, language server) và sử dụng mô hình quyền yêu cầu cấp quyền tường minh cho truy cập mạng, tệp và môi trường. `deno compile` tạo một tệp thực thi tự chứa bằng cách đóng gói runtime Deno (bao gồm V8) cùng mã của bạn. Deno nhắm đến Linux, macOS và Windows trên x64 và arm64.
Perry là gì?
Perry là một trình biên dịch TypeScript gốc được viết bằng Rust. Nó biên dịch TypeScript trực tiếp thành mã máy gốc qua LLVM — không có V8, không có JIT, không có runtime. Đầu ra là một binary đơn lẻ, thường là vài trăm KB đến vài MB cho mã gốc, có thể lớn hơn nếu bạn chọn dùng V8 runtime nhúng cho các gói npm cần engine JS.
So sánh song song
| Tính năng | Perry | Deno |
|---|---|---|
| Đầu ra | Mã máy gốc (LLVM) | Mã của bạn + runtime Deno (V8) đóng gói |
| Engine JavaScript trong binary | Không có mặc định; tùy chọn V8 | V8, luôn luôn |
| Kích thước binary hello-world | ~330 KB | ~80–100 MB (bao gồm V8) |
| JIT | Không (biên dịch AOT) | Có (V8 TurboFan) |
| Mục tiêu di động | iOS, iPadOS, Android | Không |
| Watch / TV / WASM / Web | watchOS, tvOS, Wear OS, WASM, Web/JS | Không |
| UI gốc | 25+ widget qua API nền tảng gốc | Không |
| Mô hình quyền | Quyền tiến trình OS tiêu chuẩn | Quyền runtime chi tiết (--allow-net, --allow-read, v.v.) |
| Độ ổn định | Trước 1.0 | Ổn định (1.x / 2.x) |
| Được xây dựng bằng | Rust | Rust (trên V8) |
Perry thắng ở đâu
- +Binary nhỏ hơn đáng kể. Hello world của Perry chỉ ~330 KB. Đầu ra `deno compile` bao gồm V8 và đạt mức 80–100 MB.
- +Không có engine JavaScript trong binary. TypeScript của bạn được biên dịch thành mã máy gốc, không bị V8 thông dịch tại runtime.
- +Mục tiêu di động, watch, TV, WASM và Web. Deno chỉ dành cho server/desktop.
- +Widget UI gốc ánh xạ sang AppKit, UIKit, GTK4, Win32 và JNI — không có tương đương trong Deno.
- +Khởi động nguội nhanh hơn. Binary gốc biên dịch AOT không trả chi phí khởi động V8.
- +Dẫn đầu microbench tính toán trong điều kiện tương đương trên M1 Max nơi mặc định fast-math `reassoc contract` của Perry cho phép LLVM tự động vector hóa và fold các bộ tích lũy có thể fold đơn giản (ví dụ loop_overhead 12 ms, math_intensive 14 ms; xem perry/benchmarks).
Deno thắng ở đâu
- +Runtime trưởng thành, ổn định với lịch sử lâu dài và dòng 2.x đang hoạt động.
- +Mô hình quyền chi tiết. Deno yêu cầu `--allow-net`, `--allow-read` tường minh, v.v. — hữu ích cho script trong sandbox và mã không đáng tin.
- +Công cụ tích hợp: formatter, linter, test runner, doc generator, LSP, tất cả trong runtime.
- +Hệ sinh thái V8 đầy đủ tại runtime — bất cứ thứ gì chạy trên V8 đều chạy trên Deno, bao gồm tối ưu JIT trên các đường nóng chạy lâu.
- +TypeScript hạng nhất không cần bước biên dịch riêng trong quá trình phát triển, với pipeline kiểm tra kiểu được quản lý đầy đủ.
- +API nền tảng web tiêu chuẩn (fetch, Web Streams, Web Crypto) được triển khai gốc trong runtime.
Khi nào nên chọn Perry
Chọn Perry nếu bạn muốn một binary gốc nhỏ, khởi động nhanh, bạn xuất bản đến di động hoặc các mục tiêu phi-server khác, bạn muốn UI gốc, hoặc bạn muốn biên dịch TypeScript thành một binary không chứa engine JS.
Khi nào nên chọn Deno
Chọn Deno nếu bạn muốn một runtime TypeScript ổn định, đầy đủ pin, bạn coi trọng sandbox quyền, bạn xây dựng workload phía server hoặc kịch bản, hoặc bạn cần tương thích đầy đủ hệ sinh thái V8 tại runtime.
Kết luận
Cả hai đều cho phép xuất bản chương trình TypeScript dưới dạng một binary đơn lẻ; sự khác biệt là những gì bên trong binary đó. Deno cho bạn V8 + runtime được tuyển chọn + sandbox quyền. Perry cho bạn mã máy gốc không có engine. Deno là lựa chọn tốt hơn cho công việc phía server và kịch bản nơi hệ sinh thái và mô hình quyền quan trọng. Perry là lựa chọn tốt hơn khi bạn cần binary nhỏ, khởi động nhanh, mục tiêu di động hoặc UI gốc.