Para código como A = A + B
, que pode compilar até uma ou duas instruções de máquina, cada uma tomando um certo número de ciclos.
Nenhum intérprete pode fazer a mesma coisa nesse número de ciclos por um motivo simples.
O interpretador também executa um conjunto de instruções próprio (chame-os de códigos de bytes, códigos-p, idioma intermediário, etc.).
Cada vez que ele vê um byte-code como ADD, ele precisa procurar de alguma forma e desviar para o código que faz a adição.
A próxima hora que ele vê, tem que repetir essa pesquisa, a menos que tenha uma maneira de lembrar a consulta anterior.
Se houver uma maneira de lembrar a consulta anterior, ela não será mais o que chamamos de "intérprete", mas sim um compilador just-in-time ou JITter.
Por outro lado ...
Para código como callSomeFunction( ... some args ...)
, quantos ciclos são gastos entre inserir esse código e deixá-lo?
Tudo depende do que acontece dentro de callSomeFunction
.
Poderia ser alguns, e poderia ser trilhões, mesmo se callSomeFunction
fosse compilado.
Se é muito, não faz sentido debater o custo de interpretação dessa linha de código - o dinheiro está em outro lugar.
Lembre-se de que os idiomas interpretados têm um valor próprio, como não há necessidade de compilá-los. (A "compilação" da sintaxe de superfície para códigos de bytes toma um tempo trivial. Tome R ou MATLAB, por exemplo.)
Além disso, há flexibilidade necessária para níveis inteligentes de programação.
Na Sociedade da Mente de Minsky, Capítulo 6.4 B -Brains, Existem programas que lidam com o mundo, e há programas B que lidam com programas A, e pode haver outros níveis.
Programas que escrevem e gerenciam outros programas podem ser mais facilmente executados em sistemas interpretativos.
Em Lisp, você pode escrever (+ A B)
para adicionar A e B, mas uma vez escrito, você só tem a opção de executá-lo ou não.
Você também pode escrever (eval (list '+ 'A 'B))
, que constrói o programa e, em seguida, o executa.
Pode construir algo diferente.
O assunto do programa é outro programa .
Isso é mais fácil de escrever em uma linguagem interpretada (embora, como aponta Jörg, versões mais recentes do Lisp, enquanto eles têm eval
, compile-on-the-fly, então eles não têm a penalidade de velocidade de interpretação). / p>