Yo diría que tienes la mitad de razón. Si representó la velocidad de interpretación, con el nivel de idioma en el eje X y la velocidad de ejecución en el eje Y, obtendría una curva de "bañera": interpretar un lenguaje de nivel extremadamente bajo puede ser bastante rápido e interpretar un nivel extremadamente alto. el lenguaje de nivel puede ser bastante rápido. Entre los dos, la interpretación es sustancialmente más lenta.
Dado un lenguaje de entrada de nivel extremadamente alto (por ejemplo, APL), obtiene una sobrecarga de interpretación mínima porque puede hacer una gran cantidad de trabajo basándose en analizar relativamente poco código de entrada.
En el extremo opuesto, puede obtener una velocidad bastante decente simplemente porque con un lenguaje de bajo nivel, la interpretación se vuelve casi trivial. El intérprete interno de una implementación Forth es un excelente ejemplo de esto. Estos a menudo representan un programa dado bastante compacto, que tiende a ser bastante caché, por lo que al menos en teoría se puede ejecutar tan rápido como (o incluso algo más rápido que) el código de máquina puro.
La intención original era que la mayoría de las JVM, el entorno "administrado" de .NET, los intérpretes de código de bytes Smalltalk, etc., encajarían en este último caso. Como la mayoría de los que han intentado desarrollar esto lo han encontrado rápidamente, es difícil para mantener la interpretación lo suficientemente baja como para lograr esto. Todos los que conozco que encajan en esta clase tienen el bucle interno escrito en lenguaje ensamblador a mano y generalmente por un buen programador de lenguaje ensamblador.Casi iría tan lejos como para decir que si intentas usar un lenguaje de nivel superior (incluso C) va a ser más lento, y probablemente de manera significativa (cuando agregas una sobrecarga para cada instrucción de entrada, incluso una instrucción extra en el circuito interno conducirá casi con certeza a una penalización de velocidad mensurable).
Vaya, tanta gente NO leyó la pregunta aquí? Sheesh. OP no está comparando interpretado a lenguajes compilados. OP está comparando lenguajes interpretados de alto nivel con lenguajes INTERPRETADOS de bajo nivel ... –
@Brian: Como se evidencia en la discusión a continuación, la distinción entre * compilado * y * interpretado * aparentemente no es tan claro como podría parecer a primera vista . –
@Robert: ¿Cómo es eso? Un lenguaje compilado es un lenguaje que se compila en el ensamblaje de la máquina en la que se ejecutará. un lenguaje interpretado es un lenguaje que alimenta a un intérprete y se ejecuta en una especie de máquina virtual. Java no es ninguno de los dos. Java se traduce en un idioma intermedio que se interpreta. –