A diferença entre as linguagens de computador traduzidas e interpretadas está em * como * o código -fonte (o programa escrito por um humano) é executado pelo computador. Ambos convertem código legível pelo homem em instruções legíveis por máquina, mas o fazem em momentos diferentes e de maneiras diferentes:
idiomas traduzidos (linguagens compiladas): *
Processo de tradução: A * compilador * pega todo o programa de código -fonte como entrada e o traduz em um programa completo de código da máquina (ou uma representação intermediária que é traduzida para o código da máquina) * antes de * o programa ser executado. Esse processo é frequentemente chamado de *compilação *. O código da máquina resultante é um arquivo separado (como um `.exe` no Windows ou um arquivo executável em outros sistemas).
* Execução
: O código da máquina compilado é então executado diretamente pelo processador do computador.
*
Velocidade: Execução geralmente mais rápida porque a tradução é feita com antecedência e o processador executa o código da máquina otimizado diretamente.
*
Detecção de erro: Os erros do compilador são detectados * antes de * tempo de execução. O compilador identificará erros de sintaxe e alguns erros semânticos durante o processo de compilação.
*
Portabilidade: Normalmente menos portátil. Um programa compilado para um sistema ou arquitetura operacional geralmente não é executado em outro sem recompilação.
*
Exemplos: C, C ++, Go, Rust, fortran
Idiomas interpretados: *
Processo de tradução: Um *intérprete *pega o código -fonte linha por linha (ou às vezes em pedaços maiores) e traduz e executa cada peça *imediatamente *. Não há etapa de compilação separada produzindo um executável independente.
* Execução
: O intérprete lê, traduz e executa o código simultaneamente. Não produz um arquivo de código de máquina separado.
*
Velocidade: Execução geralmente mais lenta devido à tradução on-the-fly. Cada linha (ou pedaço) precisa ser interpretada toda vez que for executada.
*
Detecção de erro: Os erros geralmente são detectados apenas durante o tempo de execução. O intérprete pode não capturar todos os erros até que o código problemático seja executado.
*
Portabilidade: Muitas vezes mais portátil. Enquanto o intérprete estiver disponível para uma plataforma específica, o código -fonte geralmente poderá ser executado.
*
Exemplos: Python, JavaScript, Ruby, Perl, Php
Abordagens híbridas: É importante observar que a distinção nem sempre é clara. Alguns idiomas empregam uma abordagem híbrida:
*
Compilação just-in-time (JIT): Idiomas como Java e C# compilam inicialmente o código -fonte em uma representação intermediária (código de byte). Um compilador JIT traduz essa representação intermediária em código da máquina *durante o tempo de execução *. Isso combina as vantagens das linguagens interpretadas e compiladas:portabilidade inicial (como interpretada) e a execução mais rápida de seções de código usadas com frequência (como compilado).
Em resumo:a compilação traduz todo o programa de uma só vez * antes * de execução, levando a uma execução mais rápida, mas menos portabilidade e detecção de erros iniciais. A interpretação traduz e executa o código linha por linha, fornecendo melhor portabilidade, mas a execução mais lenta e a detecção de erros de tempo de execução. Muitas línguas modernas usam abordagens híbridas para obter o melhor dos dois mundos.