Qual é a diferença entre linguagem compilada e interpretada?
A diferença não está no idioma; está na implementação .
Tendo tirado isso do meu sistema, aqui vai uma resposta:
Em uma implementação compilada, o programa original é traduzido em instruções de máquina nativas, que são executadas diretamente pelo hardware.
Em uma implementação interpretada, o programa original é traduzido em outra coisa. Outro programa, chamado "o intérprete", examina "outra coisa" e executa todas as ações necessárias. Dependendo da linguagem e de sua implementação, há uma variedade de formas de "outra coisa". Do mais popular ao menos popular, "outra coisa" pode ser
Instruções binárias para uma máquina virtual, muitas vezes chamada de bytecode , como é feito em Lua, Python, Ruby, Smalltalk e muitos outros sistemas (a abordagem foi popularizada na década de 1970 pelo UCSD P-system e UCSD Pascal)
Uma representação em forma de árvore do programa original, como uma árvore de sintaxe abstrata, como é feito para muitos protótipos ou intérpretes educacionais
Uma representação tokenizada do programa de origem, semelhante ao Tcl
Os personagens do programa fonte, como foi feito no MINT e TRAC
Uma coisa que complica o problema é que é possível traduzir (compilar) o bytecode em instruções de máquina nativas . Assim, uma implementação bem-sucedida pode eventualmente adquirir um compilador. Se o compilador for executado dinamicamente, nos bastidores, ele costuma ser chamado de compilador just-in-time ou compilador JIT. Os JITs foram desenvolvidos para Java, JavaScript, Lua e, ouso dizer, muitas outras linguagens. Nesse ponto, você pode ter uma implementação híbrida na qual algum código é interpretado e outro código é compilado.
Java e JavaScript são um exemplo bastante ruim para demonstrar essa diferença
, porque ambos são linguagens interpretadas. Java(interpretado)e C (ou C ++)(compilado)podem ter sido um exemplo melhor.Basicamente, o código compilado pode ser executado diretamente pela CPU do computador. Ou seja, o código executável é especificado na linguagem "nativa" da CPU ( linguagem assembly ).
O código das linguagens interpretadas, entretanto, deve ser traduzido em tempo de execução de qualquer formato para as instruções da máquina da CPU. Esta tradução é feita por um intérprete.
Outra maneira de colocar isso é que as
linguagensinterpretadassão ocódigo que é traduzido em instruções de máquina passo a passo enquanto o programa está sendo executado, enquanto aslinguagenscompiladastêm ocódigo traduzido antes da execução do programa.fonte
Aqui está a diferença básica entre a linguagem do compilador e a linguagem do intérprete.
Linguagem do compilador
Idioma do intérprete:
fonte
Um compilador, em geral, lê código de computador de linguagem de nível superior e o converte em código-p ou código de máquina nativo. Um interpretador é executado diretamente a partir do código-p ou de um código interpretado como Basic ou Lisp. Normalmente, o código compilado é executado muito mais rápido, é mais compacto e já encontrou todos os erros de sintaxe e muitos dos erros de referência ilegal. O código interpretado só encontra esses erros depois que o aplicativo tenta interpretar o código afetado. O código interpretado geralmente é bom para aplicativos simples que serão usados apenas uma vez ou no máximo algumas vezes, ou talvez até mesmo para prototipagem. O código compilado é melhor para aplicativos sérios. Um compilador primeiro pega todo o programa, verifica se há erros, compila-o e então o executa. Enquanto um intérprete faz isso linha por linha, ele pega uma linha, verifica se há erros,
Se precisar de mais informações, procure no Google "diferença entre compilador e interpretador".
fonte
É uma distinção muito obscura e, de fato, geralmente não é uma propriedade de uma linguagem em si, mas sim do programa que você está usando para executar o código nessa linguagem.
No entanto, a maioria das linguagens é usada principalmente de uma forma ou de outra e, sim, Java é essencialmente sempre compilado, enquanto javascript é essencialmente sempre interpretado.
Compilar o código-fonte é executar nele um programa que gere um arquivo binário executável que, ao ser executado, tem o comportamento definido pela fonte. Por exemplo, javac compila arquivos .java legíveis por humanos em arquivos .class legíveis por máquina.
Para interpretar o código-fonte é executado um programa que produz o comportamento definido de imediato, sem gerar um arquivo intermediário. Por exemplo, quando seu navegador carrega stackoverflow.com, ele interpreta um monte de javascript (que você pode ver ao visualizar o código-fonte da página) e produz muitos dos efeitos interessantes que essas páginas têm - por exemplo, upvoting ou o pequeno notificador barras na parte superior.
fonte
A linguagem interpretada é executada em tempo de execução de acordo com as instruções como no shell script e a linguagem compilada é aquela que é compilada (alterada para a linguagem Assembly, que a CPU pode entender) e então executada como em c ++.
fonte
Como já foi dito, compilado e interpretado são específicos para uma implementação de uma linguagem de programação; eles não são inerentes ao idioma. Por exemplo, existem interpretadores C.
No entanto, podemos (e na prática fazemos) classificar as linguagens de programação com base em sua implementação mais comum (às vezes canônica). Por exemplo, dizemos que C é compilado.
Primeiro, devemos definir intérpretes e compiladores sem ambigüidade:
Um intérprete de linguagem X é um programa (ou uma máquina, ou algum tipo de mecanismo de um modo geral), que executa qualquer programa p escrito em linguagem X de tal forma que ele executa os efeitos e avalia os resultados como prescrito pela especificação de X .
Um compilador de X para Y é um programa (ou uma máquina, ou apenas algum tipo de mecanismo em geral) que traduz qualquer programa p de alguma linguagem X em um programa semanticamente equivalente p ' em alguma linguagem Y de tal forma que interpretar p ' com um intérprete para Y irá produzir os mesmos resultados e têm os mesmos efeitos que a interpretação de p com um intérprete para X .
Observe que, do ponto de vista do programador, as CPUs são intérpretes de máquina para sua respectiva linguagem de máquina nativa.
Agora, podemos fazer uma classificação provisória das linguagens de programação em 3 categorias, dependendo de sua implementação mais comum:
Às vezes, as linguagens compiladas soft e hard são referenciadas como simplesmente compiladas, portanto, C #, Java, C, C ++ são chamados de compilados.
Dentro dessa categorização, o JavaScript costumava ser uma linguagem interpretada, mas isso foi há muitos anos. Hoje em dia, ele é compilado por JIT para linguagem de máquina nativa na maioria das principais implementações de JavaScript, então eu diria que ele cai em linguagens compiladas de software.
fonte