Perry vs Static Hermes
Static Hermes (`shermes`) là nỗ lực ở giai đoạn nghiên cứu của Meta nhằm biên dịch ahead-of-time một tập con JavaScript/TypeScript có kiểu mạnh thông qua engine Hermes, chủ yếu nhắm đến React Native. Perry là một canh bạc khác trên cùng ý tưởng chung — TypeScript biên dịch sang gốc — nhưng được xây dựng độc lập bằng Rust trên LLVM, với một trình biên dịch hoạt động được, hơn 25 widget UI gốc và 10 mục tiêu biên dịch đang phát hành ngay hôm nay. Tính đến tháng 4/2026, bộ benchmark riêng của Perry báo cáo rằng Static Hermes đã được thử như một peer và không thể cài đặt sạch sẽ qua các trình quản lý gói tiêu chuẩn được thử.
Static Hermes là gì?
Hermes là engine JavaScript mà Meta xây dựng cho React Native — dựa trên bytecode, biên dịch AOT trước, tối ưu cho thời gian khởi động trên di động. Static Hermes là nỗ lực nghiên cứu để mở rộng Hermes với biên dịch gốc ahead-of-time của một tập con JavaScript có kiểu, nhằm cho React Native một con đường đến mã gốc thực sự. Đây chủ yếu là dự án R&D về trình biên dịch; theo ghi chú benchmark của Perry, nó chưa được đóng gói để cài đặt thường quy trên macOS arm64 (`shermes` đã bị bỏ qua khỏi benchmark đa ngôn ngữ với ghi chú rằng nó 'không có sẵn trên Homebrew hoặc npm theo cách cài đặt sạch sẽ trên macOS arm64' — xem perry/benchmarks/README.md).
Perry là gì?
Perry là một trình biên dịch TypeScript gốc được viết bằng Rust, sử dụng SWC để phân tích cú pháp và LLVM để sinh mã. Nó cung cấp một CLI hoạt động (`perry compile`, `perry run`, `perry publish`), hơn 25 widget UI gốc, 10 mục tiêu biên dịch, runtime tự lưu trữ và một bộ benchmark được đo trong điều kiện minh bạch (M1 Max, RUNS=11). Perry còn ở giai đoạn trước 1.0 nhưng đang theo hướng sản xuất: mọi người đang xuất bản ứng dụng được xây dựng với nó (Bloom Engine, Mango, Hone, Pry, dB Meter — xem perryts.com).
So sánh song song
| Tính năng | Perry | Static Hermes |
|---|---|---|
| Trạng thái | Trước 1.0 (alpha) — theo hướng sản xuất | Nghiên cứu / thử nghiệm |
| Đường cài đặt (macOS arm64) | Homebrew, APT, npm (@perryts/perry) | Chưa được đóng gói để cài đặt sạch tại thời điểm viết (theo perry/benchmarks) |
| Backend | LLVM | Tùy chỉnh (sinh mã dựa trên Hermes) |
| Đầu vào | TypeScript (đầy đủ) | Tập con JS/TS có kiểu |
| Mục tiêu biên dịch | 10: macOS, iOS, iPadOS, Android, Linux, Windows, watchOS, tvOS, WASM, Web/JS | Chủ yếu là di động (ngữ cảnh React Native) |
| UI gốc | 25+ widget qua AppKit, UIKit, GTK4, Win32, JNI | Qua bridge React Native (khi tích hợp) |
| Quy trình ứng dụng CLI độc lập | Có — `perry compile main.ts` tạo ra một binary | Gắn với ngữ cảnh React Native |
| Bộ benchmark công khai | Có — RUNS=11 vs Node, Bun, Rust, C++, Go, Swift, Java | Nội bộ / bài báo nghiên cứu |
Perry thắng ở đâu
- +Nó tồn tại như một công cụ có thể dùng được. Perry có thể được cài đặt ngay hôm nay qua Homebrew, APT hoặc `npm install @perryts/perry`, và `perry compile main.ts` tạo ra một binary ngay lần thử đầu tiên.
- +Phạm vi rộng hơn. Perry biên dịch ứng dụng CLI độc lập, ứng dụng desktop gốc, ứng dụng di động, ứng dụng watch, ứng dụng TV, WASM và web từ một mã nguồn TypeScript. Static Hermes tập trung vào con đường mã gốc của React Native.
- +UI gốc tích hợp sẵn. Module perry/ui của Perry là một lớp UI khai báo phong cách SwiftUI hoạt động được, biên dịch thành widget AppKit/UIKit/GTK4/Win32/JNI. Static Hermes để UI cho host của nó (React Native).
- +Bộ benchmark công khai, có thể tái lập với phương pháp được tài liệu hóa — perry/benchmarks hiển thị trung vị + p95 + σ qua RUNS=11 so với các trình biên dịch và runtime được nêu tên.
- +Backend LLVM nghĩa là Perry kế thừa hàng thập kỷ tối ưu hóa trưởng thành (autovectorization, IndVarSimplify, scalar replacement) và hỗ trợ mọi nền tảng mà LLVM nhắm đến.
Static Hermes thắng ở đâu
- +Được hậu thuẫn bởi Meta — nguồn lực kỹ thuật đáng kể và một điểm tựa chiến lược rõ ràng ở React Native.
- +Hermes đã được phát hành trong các ứng dụng React Native sản xuất với tư cách engine bytecode; Static Hermes kế thừa hệ sinh thái và công cụ đó.
- +Công việc nghiên cứu cấp cao về quy tắc kiểu AOT và ngữ nghĩa tập con JS thực sự mới mẻ.
- +Nếu bạn đã ở trên React Native, Static Hermes (khi có sẵn) là con đường gia tăng dần hơn so với việc viết lại với một trình biên dịch khác.
Khi nào nên chọn Perry
Chọn Perry nếu bạn cần một trình biên dịch TS-to-native hoạt động ngay hôm nay, bạn muốn một mã nguồn TypeScript duy nhất nhắm đến desktop, di động, watch, TV, WASM và web, hoặc bạn muốn widget UI gốc mà không cần bridge của React Native.
Khi nào nên chọn Static Hermes
Chọn Static Hermes (khi có sẵn) nếu bạn cam kết với React Native và muốn một con đường từ JavaScript/TypeScript đến mã gốc biên dịch ahead-of-time trên di động, và bạn thoải mái làm việc ở rìa công cụ nghiên cứu.
Kết luận
Static Hermes là nghiên cứu thú vị từ một đội đáng tin cậy. Perry là một sản phẩm hoạt động được trên cùng ý tưởng chung, có phạm vi rộng hơn nhiều so với chỉ di động và đang phát hành ngay hôm nay. Nếu bạn cần một trình biên dịch TS-to-native trong tay ngay bây giờ, Perry là lựa chọn. Nếu bạn ở trên React Native và sẵn sàng theo dõi một dự án nghiên cứu, hãy theo dõi Static Hermes.