Como você explicaria para um iniciante?
Como você explicaria a diferença entre linguagens compiladas vs interpretadas para um iniciante?
Como você explicaria a diferença entre linguagens compiladas vs interpretadas para um iniciante?
Linguagens compiladas são aquelas em que o código-fonte é transformado em um formato de máquina antes de ser executado. Isso significa que o código é convertido em um formato que a máquina pode entender e executar diretamente, sem a necessidade de uma etapa intermediária de interpretação.
Linguagens interpretadas, por outro lado, são aquelas em que o código é lido e executado diretamente pelo interpretador, sem a necessidade de uma etapa de compilação. Isso significa que o código é lido e executado linha a linha, enquanto o programa está sendo executado.
Em resumo, a principal diferença entre linguagens compiladas e interpretadas é que as linguagens compiladas são convertidas em um formato de máquina antes de serem executadas, enquanto as linguagens interpretadas são lidas e executadas diretamente pelo interpretador enquanto o programa está sendo executado.
C, Java e C# são linguagens compiladas enquanto Javascript e Python são linguagens interpretadas. Para responder o que isso significa é preciso saber o que é compilação e interpretação nesse contexto.
A compilação se divide em 4 etapas principais.
Análise léxica, ou tokenização, em que cada símbolo é transformado num token. Nessa etapa só se verifica se os tokens são válidos. Um exemplo de token inválido é o nome de uma variável com um número no começo.
Análise sintática ou parsing, em que a sequência de tokens é transformada em uma árvore sintática abstrata (AST). É onde se decide, por exemplo, que a multiplicação precisa ser executada antes da soma.
Análise semântica, em que os tipos gerados anteriormente são checados. Imagine que você esteja tentando dividir com algo que não é um número, é nessa fase que o erro é gerado.
A etapa final é a geração de código binário, instruções de máquina, onde a árvore é transformada na sequência de instruções que serão executadas pelo processador e as chamadas de função são transformadas em endereços de memória.
A etapa final é específica para cada arquitetura de computador, portanto isso levou à criação de uma etapa intermediária de geração de código intermediário. O código é parecido com as intruções de máquina de várias arquiteturas, mas ainda tem várias informações usadas para ser possível converter esse código em instruções de máquina para cada aquitetura diferente.
Nas linguagens compiladas, como C, Java e C#, o compilador só aceita arquivos inteiros.
Um interpretador também implementa algumas dessas etapas, ele só não precisa gerar as instruções de máquina. No entanto o intepretador, por diversos motivos, é criado para interpretar e executar, não a partir da AST, mas de um código intermediário gerado na etapa final.
Mas se essa for a diferença, então Java e C# são linguagens interpretadas, pois elas precisam de uma máquina virtual para serem executadas, o que é basicamente o que o interpretador faz.
Ainda assim não chamamos essas linguagens de interpretadas. Por quê?
Linguagens interpretadas como Python e Javascript têm um interpretador interativo, onde é possível escrever o código uma linha por vez e o interpretador executa as etapas assim que possível e executa o código no mesmo contexto. As linguagens compiladas não têm isso.
A conclusão é que separar linguagens interpretadas de compiladas é uma diferenciação histórica e prática, por delinear as capacidades da linguagem e do ambiente de execução. Uma linguagem compilada pode ser executada sem o código fonte e uma linguagem interpretada geralmente tem um interpretador interativo.
Dependendo do nível do iniciante ele definitivamente vai ter um treco com essa explicação 😅.
Estou brincando, mas obrigado pela colaboração, ficou um conteúdo realmente muito completo e acabei entendendo um pouco mais sobre compiladores com ela, valeu!
Obrigado pelo feedback. Eu resolvi escrever essa resposta porque esse tópico tem nuances que não são comumente discutidas.
Linguagens compiladas são como um bolo ou um pão: você precisa assar pra comer, não dá pra comer cru.
Já as linguagens interpretadas, são como um lanche, você monta com os ingredientes que quer e come, sem a necessidade de assar ou etc.
Eu não sou muito bom com explicações mas é mais ou menos por aí.
Volta e meia me deparo com alguma publicação desse tipo no Linkedn e acho bem interessante porque nos força a pensar de uma outra forma sobre o assunto. Tipo "Explicando cloud para um iniciante", "Explicando laços condicionais para um iniciante".
Agora, esse assunto que você trouxe é bem desafiador! hahahah
Eu acho que esse assunto possui várias "camadas". É possível explicar de forma bem simplória, apenas para passar uma ideia ou entrar em camadas mais "ocultas" da programação. rs
De qualquer forma, acho que os dois comentários anteriores já passam uma visão mais "rasa" e outra um pouco mais detalhada.