Perbedaan ini sangat bermakna karena bahasa yang dikompilasi membatasi semantik dengan cara yang tidak perlu ditafsirkan bahasa. Beberapa teknik interpretif sangat sulit (praktis tidak mungkin) untuk dikompilasi.
Kode yang diinterpretasikan dapat melakukan hal-hal seperti menghasilkan kode pada waktu berjalan, dan memberikan visibilitas kode tersebut ke binding leksikal dari ruang lingkup yang ada. Itu salah satu contohnya. Lain adalah bahwa penerjemah dapat diperluas dengan kode yang ditafsirkan yang dapat mengontrol bagaimana kode dievaluasi. Ini adalah dasar untuk "fexprs" Lisp kuno: fungsi yang dipanggil dengan argumen yang tidak dievaluasi dan memutuskan apa yang harus dilakukan dengannya (memiliki akses penuh ke lingkungan yang diperlukan untuk menjalankan kode dan mengevaluasi variabel, dll). Dalam bahasa yang dikompilasi, Anda tidak dapat benar-benar menggunakan teknik itu; Anda menggunakan makro sebagai gantinya: fungsi yang dipanggil pada waktu kompilasi dengan argumen yang tidak dievaluasi, dan menerjemahkan kode daripada menafsirkan.
Beberapa implementasi bahasa dibangun di sekitar teknik ini; penulisnya menolak kompilasi sebagai tujuan penting, dan lebih memilih merangkul jenis fleksibilitas ini.
Menafsirkan akan selalu berguna sebagai teknik untuk bootstrap kompiler. Untuk contoh konkret, lihat CLISP (implementasi populer Common Lisp). CLISP memiliki kompiler yang ditulis dengan sendirinya. Ketika Anda membangun CLISP, kompiler itu sedang ditafsirkan selama langkah-langkah awal membangun. Ini digunakan untuk mengkompilasi sendiri, dan kemudian setelah dikompilasi, kompilasi kemudian dilakukan dengan menggunakan kompiler yang dikompilasi.
Tanpa kernel interpreter, Anda perlu melakukan bootstrap dengan beberapa Lisp yang ada, seperti yang dilakukan SBCL.
Dengan interpretasi, Anda dapat mengembangkan bahasa dari awal mutlak, dimulai dengan bahasa assembly. Kembangkan I / O dasar dan rutinitas inti, lalu tulis eval, bahasa mesin. Setelah Anda memiliki eval, tulis dalam bahasa tingkat tinggi; kernel kode mesin melakukan evaluasi. Gunakan fasilitas ini untuk memperluas perpustakaan dengan lebih banyak rutinitas dan menulis kompiler juga. Gunakan kompiler untuk mengkompilasi rutinitas tersebut dan kompilator itu sendiri.
Interpretasi: batu loncatan penting di jalan menuju kompilasi!