Para código como A = A + B
, que puede compilar hasta una o dos instrucciones de máquina, cada una de ellas con un cierto número de ciclos.
Ningún intérprete puede hacer lo mismo en ese número de ciclos por una simple razón.
El intérprete también ejecuta un conjunto de instrucciones propio (llámelos códigos de bytes, códigos p, lenguaje intermedio, lo que sea).
Cada vez que ve un código de bytes como AGREGAR, debe buscarlo de alguna manera y derivarse al código que hace la adición.
La siguiente vez que la ve, tiene que repetir esa búsqueda, a menos que tenga una forma de recordar la búsqueda anterior.
Si tiene una manera de recordar la búsqueda anterior, ya no es lo que llamamos un "intérprete", sino un compilador justo a tiempo, o JITter.
Por otro lado ...
Para códigos como callSomeFunction( ... some args ...)
, ¿cuántos ciclos se gastan entre ingresar ese código y dejarlo?
Todo depende de lo que ocurra dentro de callSomeFunction
.
Podrían ser unos pocos, y podrían ser billones, incluso si callSomeFunction
está compilado.
Si es mucho, no tiene sentido debatir el costo de interpretación de esa línea de código, el dinero está en otra parte.
Recuerde que los idiomas interpretados tienen un valor propio, como, por ejemplo, no es necesario compilarlos. (La "compilación" de la sintaxis de la superficie a los códigos de bytes toma un tiempo trivial. Tome R o MATLAB, por ejemplo).
También, se necesita flexibilidad para niveles inteligentes de programación.
En Society of Mind de Minsky, Capítulo 6.4 B -Frenos, hay programas A que tratan con el mundo, y programas B que tratan con los programas A, y puede haber niveles adicionales.
Los programas que escriben y administran otros programas se pueden hacer más fácilmente en sistemas interpretativos.
En Lisp, puedes escribir (+ A B)
para agregar A y B, pero una vez que está escrito solo tienes la opción de ejecutarlo o no.
También puede escribir (eval (list '+ 'A 'B))
que construye el programa y luego lo ejecuta.
Podría construir algo diferente.
El tema del programa es otro programa .
Esto es más fácil de escribir en un lenguaje interpretado (aunque, como señala Jörg, las versiones más recientes de Lisp, mientras que tienen eval
, compila sobre la marcha, por lo que no tienen la penalización de velocidad de la interpretación). / p>