Untuk kode seperti A = A + B
, yang dapat dikompilasi ke satu atau dua instruksi mesin, masing-masing mengambil sejumlah siklus. Tidak ada penerjemah yang dapat melakukan hal yang sama dalam jumlah siklus itu karena alasan sederhana.
Penerjemah juga mengeksekusi set instruksi sendiri (sebut saja kode-byte, kode-p, bahasa perantara, apa pun). Setiap kali ia melihat kode byte seperti ADD, ia harus mencarinya entah bagaimana dan bercabang ke kode yang melakukan penambahan.
The berikutnya kali melihatnya, ia harus mengulang pencarian itu, kecuali ia memiliki cara untuk mengingat lookup sebelumnya. Jika memang ada cara untuk mengingat pencarian sebelumnya, itu bukan lagi apa yang kita sebut "interpreter", melainkan kompiler just-in-time, atau JITter.
Di samping itu...
Untuk kode seperti callSomeFunction( ... some args ...)
, berapa banyak siklus yang dihabiskan antara memasukkan kode itu dan meninggalkannya? Itu semua tergantung pada apa yang terjadi di dalam callSomeFunction
. Bisa jadi beberapa, dan bisa triliunan, bahkan jika callSomeFunction
itu sendiri dikompilasi. Jika banyak, tidak ada gunanya memperdebatkan biaya interpretasi dari baris kode - uang ada di tempat lain.
Ingat, bahasa yang ditafsirkan memiliki nilai sendiri, seperti, tidak perlu dikompilasi. ("Kompilasi" dari sintaks permukaan ke kode byte membutuhkan waktu yang sepele. Ambil R atau MATLAB, misalnya.)
Juga, ada fleksibilitas yang dibutuhkan untuk tingkat pemrograman yang cerdas. Dalam Minsky's Society of Mind , Bab 6.4 B -Brain, ada program A yang berhubungan dengan dunia, dan ada program B yang berhubungan dengan program A, dan bisa ada level lebih lanjut. Program yang menulis dan mengelola program lain dapat lebih mudah dilakukan dalam sistem interpretif.
Di Lisp, Anda dapat menulis (+ A B)
untuk menambahkan A dan B, tetapi begitu ditulis, Anda hanya memiliki pilihan untuk menjalankannya atau tidak. Anda juga dapat menulis (eval (list '+ 'A 'B))
yang membangun program dan kemudian menjalankannya. Itu bisa membangun sesuatu yang berbeda.
Subjek program adalah program lain . Ini lebih mudah untuk ditulis dalam bahasa yang ditafsirkan (meskipun, seperti yang Jorg tunjukkan, versi yang lebih baru dari Lisp, sementara mereka memiliki eval
, kompilasi-on-the-fly, sehingga mereka tidak memiliki penalti kecepatan menafsirkan).