Cấu trúc bên trong trình biên dịch

Các quyết định thiết kế chính giúp Perry nhanh

01NaN-Boxing

Giá trị được lưu dưới dạng float 64-bit với các mẫu bit đặc biệt cho con trỏ, cho phép kiểu union hoạt động mà không có chi phí runtime. Điều này giúp (string | number)[] hoạt động hiệu quả.

Bằng cách mã hóa thông tin kiểu trực tiếp trong các bit payload NaN của IEEE 754, Perry tránh được nhu cầu về tagged union hoặc boxed value. Một từ 64-bit duy nhất có thể biểu diễn bất kỳ kiểu giá trị JavaScript nào — số sử dụng biểu diễn tự nhiên, trong khi chuỗi, đối tượng và các giá trị cấp phát heap khác sử dụng mẫu bit con trỏ nằm trong phạm vi NaN.

02Monomorphization

Generic được chuyên biệt hóa tại thời điểm biên dịch, giống như Rust. Mỗi lần khởi tạo kiểu tạo ra mã được tối ưu hóa, loại bỏ chi phí kiểm tra kiểu tại runtime.

Khi bạn viết Array'<'number'>' và Array'<'string'>', Perry tạo ra hai triển khai riêng biệt, được tối ưu hóa hoàn toàn. Điều này có nghĩa là các phép toán mảng trên số sử dụng phép tính máy trực tiếp — không type guard, không dynamic dispatch, không boxing.

03Static Dispatch

Không có bảng ảo. Các lệnh gọi phương thức được giải quyết tại thời điểm biên dịch, cho phép gọi hàm trực tiếp và tối ưu hóa inline.

Runtime OOP truyền thống sử dụng vtable để giải quyết phương thức, thêm một lớp gián tiếp vào mỗi lần gọi. Perry giải quyết tất cả các lệnh gọi phương thức một cách tĩnh trong quá trình biên dịch, biến các lệnh gọi phương thức interface thành nhảy trực tiếp. Điều này cũng mở khóa inline mạnh mẽ — các phương thức nhỏ thường được gấp trực tiếp vào nơi gọi.

04Zero-Cost Abstractions

Các lớp, interface và generic của TypeScript biên dịch thành mã gốc hiệu quả mà không có chi phí biểu diễn tại runtime.

Hệ thống kiểu của TypeScript chỉ tồn tại tại thời điểm biên dịch — và Perry thực hiện điều này đúng nghĩa đen. Interface không tạo mã runtime. Phân cấp lớp được làm phẳng. Ràng buộc generic được giải quyết thành kiểu cụ thể. Binary đã biên dịch chỉ chứa logic thực tế, không có bộ máy trừu tượng mà các trình thông dịch thường mang theo.