O que significa uma linguagem ser “interpretada”?
Pergunta
Faça idiomas como, por exemplo.Ruby (se estiver executando MRI, quero dizer, não compilado em código de bytes) é realmente analisado sempre que uma execução de, por exemplo, método ou corpo de loop é necessária?Quero dizer, para executar um loop, você precisa analisar seu corpo N vezes?
Sempre pensei que todos esses programas estavam sendo analisados uma vez no bootstrap, transformados em uma árvore de instruções “fortemente tipada”, etc.Isso não é verdade?
Solução
Serei apenas cruel agora e direi que quase TODAS as linguagens de programação são interpretadas, seja um interpretador de software (Ruby, Python, Java) ou de hardware (C, C++) :)
Para uma resposta real, embora eu não saiba sobre a implementação interna do Ruby, tenho certeza que eles não analisam a instrução repetidamente.Embora não usem bytecode na implementação original (ou eles já migraram?), eles usam alguma representação intermediária (você pode ver isso muito bem quando deseja escrever extensões C para ele), apenas executando-as repetidamente.
Outras dicas
Interpretado é uma palavra com uma definição muito vaga.Até as instruções do código de máquina são interpretadas pelo processador.
Em geral é feita uma distinção entre linguagens que são compiladas antes de serem executadas e linguagens que não possuem um processo de compilação e são executadas dentro de outro programa, denominado interpretador.Os últimos tipos de linguagens são frequentemente chamados de linguagens interpretadas.
A linha não é tão clara em alguns casos:
- Algumas linguagens podem ser compiladas ou interpretadas, por ex.PHP.
- Algum código interpretado pode ser compilado em tempo de execução em instruções de máquina nativas (Compilação JIT).
- Algumas linguagens compiladas podem ter um
exec
funcionalidade que permite que o código seja gerado e executado em tempo de execução, ignorando o processo normal de compilação.