2 คะแนน โดย dopeflamingo 3 시간 전 | ยังไม่มีความคิดเห็น | แชร์ทาง WhatsApp

กระบวนทัศน์การพัฒนา TypeScript แบบเดิมถือเป็นเรื่องปกติที่จะทรานสไพล์โค้ด TS ซึ่งเป็นนามธรรมระดับสูงไปเป็น JavaScript ก่อน แล้วจึงรันบนเอนจินรันไทม์แบบ JIT ขนาดใหญ่ เช่น V8 หรือ JavaScriptCore (Node.js, Bun, Deno เป็นต้น)

Perry ซึ่งเพิ่งปรากฏตัวบนสายโอเพนซอร์สเมื่อไม่นานนี้ เป็นคอมไพเลอร์แบบ Native-First ที่พัฒนาด้วย Rust โดยตั้งเป้าจะรื้อโมเดลรันไทม์แบบดั้งเดิมนี้ออกทั้งหมด และคอมไพล์โค้ด TypeScript ให้เป็น standalone native binary ได้โดยตรง


💡 สถาปัตยกรรมหลักและจุดเด่น

  • No Runtime (ไม่มีรันไทม์): ไม่มีชั้นกลางขนาดใหญ่อย่างเอนจิน V8, Electron หรือ JVM โดยใช้ SWC ในการพาร์สโค้ด TS แล้วบิลด์เป็นแมชชีนโค้ดของแพลตฟอร์มเป้าหมายโดยตรงผ่านโครงสร้างพื้นฐานของ LLVM

  • บิลด์ข้ามแพลตฟอร์มจากซอร์สชุดเดียว: ใช้โค้ดเบส TypeScript ชุดเดียวเพื่อสร้างไบนารีที่รองรับ macOS, iOS, Android, Linux และ Windows ได้ทั้งหมด

    โฆษณา
  • True TypeScript Support: ไม่ใช่ "ภาษาแยกที่คล้าย TS" แบบ AssemblyScript แต่ตั้งเป้ารองรับอีโคซิสเต็ม TypeScript อย่างเต็มรูปแบบบนพื้นฐานของ Strict Mode

  • รองรับเฟรมเวิร์ก UI ที่เบามาก: โดดเด่นด้วยขนาดไบนารีเพียงไม่กี่ MB และ cold start ระดับ sub-second ที่เกือบ 0ms รองรับทั้งการผสานกับ GUI เนทีฟของแพลตฟอร์มอย่าง SwiftUI, GTK4, WinUI รวมถึงการเขียน JSX ผ่าน React renderer ของตัวเอง


🛠️ สถานะการพัฒนาและข้อจำกัด (สะท้อนจากฟีดแบ็กบน Hacker News)
เนื่องจากเป็นโปรเจกต์ที่กำลังร้อนแรงบน HN และที่อื่น ๆ ในช่วงนี้ จึงมีการพูดคุยกันอย่างชัดเจนถึงโจทย์ที่ต้องแก้ก่อนจะไปถึงระดับ production

  • ข้อจำกัดของคุณสมบัติ JS แบบไดนามิก: สไตล์ JavaScript แบบไดนามิก เช่น การฉีดฟิลด์/เมธอดเข้าไปในอ็อบเจ็กต์ตอนรันไทม์ หรือการดัดแปลง prototype จะไม่รองรับเนื่องจากข้อจำกัดของการคอมไพล์แบบสแตติก โดยระบบทำงานบนพื้นฐานของ TS subset ที่เข้มงวดและเป็น Deterministic

    โฆษณา
  • การจำลองโมดูล built-in ของ Node.js: ปัจจุบันใช้ระบบนิเวศ Rust เช่น hyper, rustls, tokio เพื่อจำลอง HTTP standard library ของ Node.js อย่างใกล้เคียง ขณะนี้คอมไพล์บางโมดูลอย่าง Fastify ได้สำเร็จและพัฒนาอย่างรวดเร็ว แต่ความเข้ากันได้ 100% กับไลบรารีในอีโคซิสเต็มที่ซับซ้อนและพึ่งพา dynamic import อย่าง Express ยังเป็นโจทย์ในระดับอัลฟาที่ต้องแก้ต่อไป


# วิธีใช้งานเรียบง่ายอย่างยิ่ง  
$ perry compile src/main.ts -o myapp  
$ ./myapp  # รัน native binary ล้วนแบบไม่มี dependency  

ในฐานะความพยายามขยาย TypeScript ที่เคยถูกจำกัดอยู่ในอีโคซิสเต็มเว็บ ไปสู่โลกของ system programming และแอปเนทีฟน้ำหนักเบา โปรเจกต์นี้น่าจับตาสำหรับผู้ที่สนใจสถาปัตยกรรมระบบประสิทธิภาพสูงหรือคอมไพเลอร์ไปป์ไลน์ของ LLVM

GitHub: https://github.com/PerryTS/perry

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น