Qual é a melhor e mais simples maneira de explicar a diferença entre uma linguagem interpretada e uma linguagem compilada?

Vou discordar de algumas respostas aqui. Sim, existe uma diferença entre idiomas compilados e interpretados e não, nem todos os idiomas podem ser compilados. Sim, os JITs tentam compilar algumas partes da linguagem interpretada sempre que possível, mas geralmente, linguagens de script de tipo dinâmico não podem ser "compiladas".

Computadores não executam linguagens de programação. Eles executam algo chamado "código de máquina", que é o conjunto de instruções naturais do microprocessador. Ninguém programa em código de máquina, a menos que seja absolutamente necessário para obter o desempenho máximo ou é uma das poucas partes de um kernal do SO que deve estar em código de máquina (eles usam assembly realmente usado para pelo menos calcular endereços mnemônicos e de ramificação).

Um compilador converte um programa, por exemplo, escrito em C em código de máquina. Então, quando um usuário executa o programa, ele executa o arquivo que contém o código da máquina, e não o arquivo que contém o código-fonte C. O sistema operacional carrega o código da máquina e o chama, fazendo com que o microprocessador aspire o código da máquina e o execute nativamente.

Um programa interpretado é executado de maneira totalmente diferente. Se você deseja executar um programa em uma linguagem interpretada como Perl, chame o interpretador Perl, que é um programa que o sistema operacional absorve e executa no processador. O intérprete é o programa que está sendo executado diretamente, não o seu programa. Esse programa de intérpretes Perl lê seu programa Perl e "interpreta" seu código fonte e produz saída com base nessa interpretação. Nenhum compilador é executado para converter seu código-fonte em código de máquina. O intérprete está constantemente (enquanto o programa estiver em execução) lendo alguma forma do seu programa e interpretando-o para gerar saída.

Claramente, a compilação gerará em quase todos os casos um programa em execução mais rápida; portanto, se um idioma puder ser compilado, será. Por que alguns idiomas são interpretados? É porque essas linguagens possuem recursos que, embora sejam muito agradáveis ​​para o programador, são difíceis, se não impossíveis, de compilar. As pessoas estão dispostas a trocar o desempenho pela facilidade de codificação. Dados digitados dinamicamente são um dos muitos exemplos. Se você tiver uma matriz em uma linguagem compilada, precisará especificar com antecedência no seu código qual o tamanho da matriz e o que cada local da matriz contém. Você pode declarar uma matriz de números inteiros de 32 bits que possui 1024 locais, por exemplo. Com muitas linguagens interpretadas como Perl, Python, PHP, Javascript etc., você cria uma matriz e apenas começa a colocar as coisas nela. Qualquer coisa. A primeira coisa que você coloca nele (local 0) pode ser "Olá, mundo". O próximo local pode ser 23432. O próximo local pode ter 3,1415. O próximo local pode ser uma sequência muito longa. O tamanho da matriz não foi declarado antecipadamente. Ele cresce e diminui à medida que o programa é executado com base em quaisquer dados que sejam lançados nele. Um intérprete pode lidar com isso porque pode reagir rapidamente a que tipo de dados estão sendo lançados na matriz. Um compilador realmente não pode. isso é apenas um exemplo. Linguagens interpretadas têm muitos recursos que os programadores adoram porque facilitam as coisas difíceis, mas esses recursos não são fáceis ou muitas vezes possíveis de serem compilados em um código de máquina executável. (e nenhum executável que * inclua * o intérprete não é um exemplo de compilação do idioma em um executável ...)

Vim aqui para dizer a mesma coisa que Jon Harrop, não há diferença.

Compilar ou interpretar é uma decisão de implementação tomada por pessoas que fazem compiladores ou intérpretes; não faz parte do idioma.

No C, a maioria das pessoas considera uma "linguagem compilada", mas você também pode obter um intérprete com facilidade.

Em certo sentido, é como "a viagem de Sydney a Melbourne é voada ou conduzida?", É uma decisão de implementação. :)

Não há diferença entre uma linguagem interpretada e compilada. Todos os idiomas podem ser interpretados e compilados.

Você provavelmente quer dizer "qual é a diferença entre um intérprete e um compilador?" nesse caso, a resposta é que ambos aceitam um programa como entrada, mas um compilador fornece um programa equivalente como saída, enquanto um intérprete fornece o resultado da execução do programa como saída.