Struktur Internal Kompiler
Keputusan desain utama yang membuat Perry cepat
01NaN-Boxing
Nilai disimpan sebagai float 64-bit dengan pola bit khusus untuk pointer, memungkinkan tipe union tanpa overhead runtime. Ini memungkinkan (string | number)[] bekerja secara efisien.
Dengan mengkodekan informasi tipe langsung dalam bit payload NaN IEEE 754, Perry menghindari kebutuhan akan tagged union atau boxed value. Satu kata 64-bit dapat merepresentasikan tipe nilai JavaScript apa pun — angka menggunakan representasi naturalnya, sementara string, objek, dan nilai heap-allocated lainnya menggunakan pola bit pointer yang berada dalam rentang NaN.
02Monomorphization
Generic dikhususkan pada waktu kompilasi, seperti Rust. Setiap instansiasi tipe menghasilkan kode yang dioptimalkan, menghilangkan overhead pemeriksaan tipe saat runtime.
Ketika Anda menulis Array'<'number'>' dan Array'<'string'>', Perry menghasilkan dua implementasi terpisah yang sepenuhnya dioptimalkan. Ini berarti operasi array pada angka menggunakan aritmatika mesin langsung — tanpa type guard, tanpa dynamic dispatch, tanpa boxing.
03Static Dispatch
Tanpa tabel virtual. Pemanggilan metode diselesaikan pada waktu kompilasi, memungkinkan pemanggilan fungsi langsung dan optimasi inlining.
Runtime OOP tradisional menggunakan vtable untuk resolusi metode, menambahkan lapisan indireksi pada setiap pemanggilan. Perry menyelesaikan semua pemanggilan metode secara statis selama kompilasi, mengubah pemanggilan metode interface menjadi lompatan langsung. Ini juga membuka inlining agresif — metode kecil sering dilipat langsung ke situs pemanggilan mereka.
04Zero-Cost Abstractions
Kelas, interface, dan generic TypeScript dikompilasi menjadi kode native yang efisien tanpa overhead representasi runtime.
Sistem tipe TypeScript hanya ada pada waktu kompilasi — dan Perry mengambil ini secara literal. Interface tidak menghasilkan kode runtime. Hierarki kelas diratakan. Constraint generic diselesaikan menjadi tipe konkret. Binary yang dikompilasi hanya berisi logika aktual, tanpa mesin abstraksi yang biasanya dibawa oleh interpreter.