Perry vs Deno
Deno เป็นรันไทม์ JavaScript และ TypeScript สมัยใหม่ที่สร้างบน V8 รองรับ TypeScript ระดับเฟิร์สคลาส มีโมเดลความปลอดภัยแบบสิทธิ์ และมีคำสั่ง `deno compile` ที่สร้างไฟล์ปฏิบัติการไฟล์เดียวโดยรวม V8 กับแอปพลิเคชันของคุณ Perry คอมไพล์ TypeScript ตรงเป็นโค้ดเครื่องเนทีฟ — ไม่มี V8 ในเอาต์พุต ไม่มีเลเยอร์รันไทม์ มีเพียงไบนารีเนทีฟขนาดเล็ก
Deno คืออะไร?
Deno เป็นรันไทม์ TypeScript และ JavaScript ที่สร้างด้วย Rust บน V8 และ Tokio รันไฟล์ `.ts` ได้โดยตรง มีเครื่องมือในตัว (formatter, linter, test runner, language server) และใช้โมเดลสิทธิ์ที่ต้องอนุญาตอย่างชัดเจนสำหรับการเข้าถึง network, file และ environment คำสั่ง `deno compile` สร้างไฟล์ปฏิบัติการในตัวเองโดยรวมรันไทม์ Deno (ซึ่งรวม V8) กับโค้ดของคุณ Deno รองรับ Linux, macOS และ Windows บน x64 และ arm64
Perry คืออะไร?
Perry เป็นคอมไพเลอร์ TypeScript เนทีฟที่เขียนด้วย Rust คอมไพล์ TypeScript ตรงเป็นโค้ดเครื่องเนทีฟผ่าน LLVM — ไม่มี V8, ไม่มี JIT, ไม่มีรันไทม์ เอาต์พุตเป็นไบนารีไฟล์เดียว โดยทั่วไปมีขนาดไม่กี่ร้อย KB ถึงไม่กี่ MB สำหรับโค้ดเนทีฟ และอาจใหญ่ขึ้นถ้าคุณเลือกใช้ V8 runtime ฝังตัวสำหรับแพ็กเกจ npm ที่ต้องการ JS engine
เคียงข้างกัน
| ฟีเจอร์ | Perry | Deno |
|---|---|---|
| เอาต์พุต | โค้ดเครื่องเนทีฟ (LLVM) | โค้ดของคุณ + รันไทม์ Deno (V8) รวมกัน |
| JavaScript engine ในไบนารี | ไม่มีโดยค่าเริ่มต้น; V8 เสริม | V8 เสมอ |
| ขนาดไบนารี hello-world | ~330 KB | ~80–100 MB (รวม V8) |
| JIT | ไม่มี (คอมไพล์แบบ AOT) | มี (V8 TurboFan) |
| เป้าหมายมือถือ | iOS, iPadOS, Android | ไม่ |
| Watch / TV / WASM / Web | watchOS, tvOS, Wear OS, WASM, Web/JS | ไม่ |
| UI เนทีฟ | 25+ widget ผ่าน API แพลตฟอร์มเนทีฟ | ไม่ |
| โมเดลสิทธิ์ | สิทธิ์โพรเซส OS มาตรฐาน | สิทธิ์ระดับรันไทม์ที่ละเอียด (--allow-net, --allow-read, ฯลฯ) |
| ความเสถียร | Pre-1.0 | เสถียร (1.x / 2.x) |
| สร้างด้วย | Rust | Rust (บน V8) |
จุดที่ Perry ชนะ
- +ไบนารีเล็กกว่ามาก Perry hello world มีขนาด ~330 KB เอาต์พุตของ `deno compile` รวม V8 และอยู่ในช่วง 80–100 MB
- +ไม่มี JavaScript engine ในไบนารี TypeScript ของคุณถูกคอมไพล์เป็นโค้ดเครื่องเนทีฟ ไม่ได้ถูก interpret โดย V8 ที่รันไทม์
- +เป้าหมายมือถือ, watch, TV, WASM และ Web Deno เป็น server/desktop เท่านั้น
- +วิดเจ็ต UI เนทีฟที่แมปไปยัง AppKit, UIKit, GTK4, Win32 และ JNI — ไม่มีสิ่งเทียบเท่าใน Deno
- +Cold start เร็วกว่า ไบนารีเนทีฟที่คอมไพล์ AOT ไม่ต้องจ่ายต้นทุนการเริ่มต้น V8
- +ความเป็นผู้นำใน microbenchmark ด้านการคำนวณภายใต้เงื่อนไขที่เทียบเท่ากันบน M1 Max ที่ค่าเริ่มต้น `reassoc contract` fast-math ของ Perry ช่วยให้ LLVM ทำ autovectorize และพับ accumulator ที่พับได้อย่างง่ายดาย (เช่น loop_overhead 12 ms, math_intensive 14 ms; ดู perry/benchmarks)
จุดที่ Deno ชนะ
- +รันไทม์ที่เสถียรและสมบูรณ์พร้อมประวัติการใช้งานยาวนานและสาย 2.x ที่กำลังเติบโต
- +โมเดลสิทธิ์ที่ละเอียด Deno ต้องการ `--allow-net`, `--allow-read`, ฯลฯ อย่างชัดเจน — มีประโยชน์สำหรับ script ใน sandbox และโค้ดที่ไม่น่าเชื่อถือ
- +เครื่องมือในตัว: formatter, linter, test runner, ตัวสร้างเอกสาร, LSP ทั้งหมดในรันไทม์
- +ระบบนิเวศ V8 เต็มรูปแบบที่รันไทม์ — อะไรที่รันบน V8 ได้ก็รันบน Deno ได้ รวมถึงการเพิ่มประสิทธิภาพ JIT บน hot path ที่รันยาวนาน
- +TypeScript ระดับเฟิร์สคลาสโดยไม่ต้องมีขั้นตอนคอมไพเลอร์แยกต่างหากในระหว่างพัฒนา พร้อม pipeline การตรวจสอบ type ที่จัดการเต็มรูปแบบ
- +API web-platform มาตรฐาน (fetch, Web Streams, Web Crypto) ที่ implement แบบเนทีฟในรันไทม์
เมื่อใดควรเลือก Perry
เลือก Perry ถ้าคุณต้องการไบนารีเนทีฟขนาดเล็กที่เริ่มต้นเร็ว คุณกำลังส่งมอบไปยังมือถือหรือเป้าหมายอื่นที่ไม่ใช่เซิร์ฟเวอร์ คุณต้องการ UI เนทีฟ หรือคุณต้องการคอมไพล์ TypeScript เป็นไบนารีที่ไม่มี JS engine
เมื่อใดควรเลือก Deno
เลือก Deno ถ้าคุณต้องการรันไทม์ TypeScript ที่เสถียรและพร้อมใช้งานในตัว คุณให้ความสำคัญกับ sandbox สิทธิ์ คุณกำลังสร้าง workload ฝั่งเซิร์ฟเวอร์หรือ scripting หรือคุณต้องการความเข้ากันได้กับระบบนิเวศ V8 เต็มรูปแบบที่รันไทม์
บทสรุป
ทั้งคู่ให้คุณส่งมอบโปรแกรม TypeScript เป็นไบนารีเดียว ความแตกต่างอยู่ที่สิ่งที่อยู่ในไบนารี Deno ให้คุณ V8 + รันไทม์ที่ดูแลแล้ว + sandbox สิทธิ์ Perry ให้คุณโค้ดเครื่องเนทีฟโดยไม่มี engine Deno เป็นตัวเลือกที่ดีกว่าสำหรับงานฝั่งเซิร์ฟเวอร์และ scripting ที่ระบบนิเวศและโมเดลสิทธิ์มีความสำคัญ Perry เป็นตัวเลือกที่ดีกว่าเมื่อคุณต้องการไบนารีขนาดเล็กที่เริ่มต้นเร็ว เป้าหมายมือถือ หรือ UI เนทีฟ