Biên dịch TypeScript trực tiếp thành mã máy LLVM, trình biên dịch native "Perry"
(github.com/PerryTS)Mô hình phát triển TypeScript truyền thống từ trước đến nay mặc nhiên được xem là viết mã TS ở mức trừu tượng cao, sau đó transpile sang JavaScript rồi chạy trên các engine runtime JIT nặng như V8 hoặc JavaScriptCore (Node.js, Bun, Deno, v.v.).
Gần đây, Perry xuất hiện trong làn sóng mã nguồn mở như một trình biên dịch Native-First viết bằng Rust, với mục tiêu loại bỏ hoàn toàn mô hình runtime truyền thống này và biên dịch trực tiếp mã TypeScript thành binary native độc lập.
💡 Kiến trúc cốt lõi và các đặc điểm
-
No Runtime (không runtime): Không có lớp trung gian nặng như V8, Electron hay JVM; thay vào đó, mã TS được phân tích bằng SWC và build trực tiếp thành mã máy của nền tảng đích thông qua hạ tầng LLVM.
-
Build đa nền tảng từ một mã nguồn: Từ một codebase TypeScript duy nhất, có thể tạo binary hỗ trợ macOS, iOS, Android, Linux và Windows.
-
True TypeScript Support: Không phải là một "ngôn ngữ riêng tương tự TS" như AssemblyScript, mà hướng tới hỗ trợ đầy đủ hệ sinh thái TypeScript dựa trên Strict Mode.
-
Tương thích với framework UI siêu nhẹ: Dung lượng binary chỉ ở mức vài MB và thời gian khởi động lạnh gần như 0ms, ở mức sub-second. Có thể kết hợp với GUI native của nền tảng như SwiftUI, GTK4, WinUI, đồng thời cũng hỗ trợ viết JSX thông qua React renderer riêng.
🛠️ Tình trạng phát triển và giới hạn (phản ánh phản hồi từ Hacker News)
Vì đây là dự án đang rất được chú ý gần đây trên HN và các nơi khác, những bài toán cần giải quyết để đạt tới mức production cũng đang được thảo luận khá rõ ràng.
-
Hạn chế với các đặc tính JS động: Kiểu JavaScript động như chèn tùy ý field/method vào object khi runtime hoặc biến đổi prototype sẽ không được hỗ trợ do đặc tính của biên dịch tĩnh; dự án vận hành trên một tập con TypeScript nghiêm ngặt và mang tính quyết định (deterministic).
-
Mô phỏng module tích hợp của Node.js: Hiện tại dự án đang mô phỏng nguyên trạng thư viện chuẩn HTTP của Node.js dựa trên hệ sinh thái Rust như hyper, rustls, tokio. Việc biên dịch một số module như Fastify đã thành công và đang tiến bộ nhanh, nhưng khả năng tương thích 100% với các thư viện hệ sinh thái phức tạp có liên quan đến dynamic import như Express vẫn là bài toán ở giai đoạn alpha.
# Cách dùng cực kỳ đơn giản
$ perry compile src/main.ts -o myapp
$ ./myapp # chạy binary native thuần túy không phụ thuộc
Đây là một nỗ lực nhằm mở rộng TypeScript vốn bị bó hẹp trong hệ sinh thái web sang lĩnh vực lập trình hệ thống và ứng dụng native siêu nhẹ, nên là dự án đáng để theo dõi đối với những ai quan tâm đến kiến trúc hệ thống hiệu năng cao hoặc pipeline trình biên dịch LLVM.
GitHub: https://github.com/PerryTS/perry
Chưa có bình luận nào.