[vc_row][vc_column][vc_column_text]Ao iniciar os estudos na área da computação, surgem muitos termos estranhos a quem está começando, que acabam sendo ignorados ou passam despercebidos. Um exemplo comum é a diferença entre Compilação e Interpretação, você sabe o que significa e o que difere esses dois termos?
[adrotate banner=”4″]
Durante o aprendizado de programação, seja na faculdade, curso técnico ou por conta própria, cedo ou tarde irão aparecer os termos: Compilação, Interpretação, Compilador, por vezes também surgem os seguintes debates: “Linguagem compilada é melhor que interpretada?”, “Linguagens interpretadas são mais lentas?”, “Qual devo escolher?”.
Então, para responder esses questionamentos, nesse artigo vou abordar essa temática e tentar explicar a diferença entre compilação e interpretação da maneira mais fácil possível.
Para executar qualquer ação, o computador precisa ser instruído (passo a passo), para saber quais ações deve fazer e de que maneira. Porém, o computador somente entende instruções em linguagem de máquina. Ou seja, “zeros” e “uns” (o famoso código binário). Entretanto, é insustentável programar dessa maneira.
Por isso, existem compiladores e interpretadores, que (a grosso modo) possibilitam que o computador entenda e execute um código que foi escrito em uma linguagem de programação de alto nível, de forma legível para seres humanos.
Pense que o processo de compilação é como se fosse uma tradução. Uma tradução precisa do quê para ser feita? De um tradutor, de uma língua de origem e de uma língua para ser traduzida.
A compilação, de fato, é uma tradução. Nesse processo, inicialmente, há um código escrito em uma linguagem de programação de alto nível. Este código será enviado ao compilador (que é nada mais nada menos que um programa), que possui a capacidade de traduzir códigos de uma determinada linguagem para outra.
Tecnicamente falando…
Agora que já foi explicado o processo de compilação, vamos aprofundar um pouco mais. Os compiladores, geralmente, possuem dois módulos: front-end e back-end.
Vamos começar pelo front-end, que é a primeira etapa do processo de compilação. Neste processo, serão checados possíveis erros de digitação, sintaxe da linguagem e tipos de dados. Caso tudo ocorra como o esperado e sem erros, o compilador continuará para o módulo back-end.
Este módulo, tem como responsabilidade alocar espaço de memória e gerar um arquivo de código-objeto, que é arquivo com o código traduzido da linguagem de programação inicial para a linguagem desejada.
Um código compilado, produzido por um compilador, não necessariamente é binário, em linguagem de máquina. Embora o mais comum seja a compilação diretamente para a linguagem de máquina, isso não é regra!
Como exemplo disso, podemos citar o Java, que tem seu código compilado para bytecode; o Elixir, que é compilado também para bytecode e executado pela máquina virtual do Erlang; e o Typescript, que é compilado para Javascript.
O processo de interpretação é um pouco diferente e peculiar. Isso porque, nesse processo, não há necessidade de gerar intermediários, como um código-objeto (arquivo gerado com o código compilado) ou um executável. A interpretação também traduz o código, assim como a compilação, porém, existem algumas diferenças.
Ao utilizar o método de compilação, o compilador irá ler o código, fazer todas as análises sintáticas e demais processos, para, por fim, gerar um arquivo código-objeto ou um arquivo executável. Já na interpretação, nenhum arquivo ou código é gerado, e sim uma tradução instantânea, em tempo de execução.
Para deixar mais claro, vamos exemplificar! Suponhamos que você está programando em uma linguagem interpretada (como Javascript, PHP, Python etc.), ao terminar de codificar, você salva o arquivo e chama o seu programa no terminal, pela linha de comando:
python3 my_program.py |
Ao fazer isso, você está chamando o interpretador da linguagem, que está instalado em seu computador. O interpretador irá ler o seu código linha a linha em tempo de execução e irá traduzir cada linha para uma linguagem alvo (que geralmente será bytecode ou linguagem de máquina). No mesmo momento que ele traduz, ele executa o código gerado, sem processos adicionais. O que é bem diferente do processo de compilação, em que você precisa primeiro compilar para somente depois executar.
Mas há desvantagens ao utilizar o processo de interpretação. A principal delas é o consumo de memória. Por ser um processo mais complexo, é necessário que seja alocado mais espaço.
Também há impacto direto na velocidade do código. Linguagens interpretadas, por padrão, tendem a ser mais lentas que as compiladas. Isso não é regra, mas costuma acontecer, pois as linguagens interpretadas costumam ser de altíssimo nível e, por isso, possuem autogerenciamento de memória, tipagem dinâmica, funções prontas e menos controle sobre o sistema operacional. Todos esses fatores tornam as linguagens interpretadas menos velozes, se comparadas às linguagens compiladas.
Um código compilado consome menos recursos da CPU, durante as fases de tradução e carregamento. Porém sua execução não é direta. Primeiro é preciso compilar, para somente depois executar (o que tira um pouco da agilidade).
Um programa interpretado tem um intervalo menor entre a codificação e a execução do programa. Além disso, costuma também ter mais facilidades na linguagem e os erros são mais fáceis de serem encontrados. Porém, o custo computacional e a execução mais lenta são fatores a serem considerados na escolha.
O importante é saber escolher e se adaptar às necessidades. Isso porque compiladores e interpretadores são ferramentas muito úteis e que possuem seus respectivos casos de uso.
Agora que chegamos ao fim do nosso artigo, já deu para você entender melhor qual é a diferença entre Compilação e Interpretação? Se você tiver alguma dúvida, pode deixar seu comentário![/vc_column_text][/vc_column][/vc_row]
Leia também:
Como evitar bugs com imutabilidade
[adrotate banner=”5″]
Autor