Pada dasarnya, dalam bahasa yang tidak diketik, setiap referensi menunjuk ke objek yang berisi tipe dan nilai. Misalnya var a = 3
menunjuk ke sebuah instance yang berisi nilai 3 dan tipe int, jika Anda membuat a = "bla"
, referensi diperbarui ke sebuah instance yang berisi string "bla" dan string tipe, objek lama dibuang, dll ...
Ini lambat karena setiap kali operasi (mis. a + b
) Harus dilakukan pada tipe dasar ini, runtime harus terlebih dahulu melakukan dereferensi objek, periksa apakah tipenya kompatibel, lakukan operasi, buat objek baru.
Sebaliknya, a + b
dalam C ++ atau Java memeriksa pada waktu kompilasi bahwa jenisnya valid dan kompatibel, maka a dan b disimpan sebagai nilai langsung (bukan referensi), dan penambahan adalah operasi prosesor sederhana pada nilai-nilai ini.
Tentu saja, ini semua sangat teoretis. Dalam praktiknya, banyak optimasi dapat dilakukan pada proses ini untuk menghindari sebagian besar overhead, dan bahasa yang diketik secara dinamis bisa menjadi sangat cepat.