██╗██████╗ ███████╗██████╗ ██╗ █████╗ ███████╗
     ██║██╔══██╗╚══███╔╝██╔══██╗██║██╔══██╗██╔════╝
     ██║██████╔╝  ███╔╝ ██║  ██║██║███████║███████╗
██   ██║██╔═══╝  ███╔╝  ██║  ██║██║██╔══██║╚════██║
╚█████╔╝██║     ███████╗██████╔╝██║██║  ██║███████║
 ╚════╝ ╚═╝     ╚══════╝╚═════╝ ╚═╝╚═╝  ╚═╝╚══════╝   
⠀⠀
    

Compiladores, Interpretadores e a Procrastinação Eterna

Comecei a matéria de Compiladores na faculdade há quase um semestre, por conhecidência (ou não) estou há quase um semestre pra começar a escrever sobre isso aqui aqui no blog. Pretendo falar um pouco mais sobre isso, sair um pouco dos posts que fiz até agora com o tom mais técnico mas ainda preciso me preparar pra escrever da maneira que gostaria. De qualquer forma é como diz aquele ditado: ‘Antes tarde do que nunca’ e com isso seguimos pro post de hoje.

Confesso que a matéria na teoria é bem interessante, saber como as linguagens funcionam, saber como fazer a minha própria e acima disso tudo ter aquela sensação de que tô chegando no momento da faculdade de computação que todo esforço “valeu a pena” e finalmente chegamos nos finalmentes. Só que na realidade é uma matéria bem chatinha, cheia de detalhes e bem complexa pra se aprender em menos de 6 meses. Além disso juntando com a correria do dia-a-dia + emprego + outras matérias fica quase impossível de acompanhar e dar a atenção devida.

Dito tudo isso, vou transformar os aprendizados em uma série aqui no blog, acho que faz mais sentido escrever aqui o que sei que estudaria só um dia antes da prova. A ideia é documentar o progresso, principalmente pra consolidar o conteúdo e, quem sabe, ajudar alguém que esteja começando também.

Esse primeiro post é uma introdução direta ao tema e os próximos devem seguir o mesmo modelo. Então sem mais delongas…

O que é um Compilador?

Um compilador é um programa que traduz um código-fonte escrito em uma linguagem de alto nível (como C) para uma linguagem de baixo nível, geralmente código de máquina ou bytecode. O foco é transformar todo o programa antes da execução. Como exemplos clássicos de compiladores temos:

  • gcc (C/C++), javac (Java para bytecode), rustc (Rust)

O Ato de compilar uma linguagem envolve várias etapas: análise léxica, sintática, semântica, geração de código intermediário e otimizações. o Ato de compilar uma linguagem envolve várias etapas: análise léxica, sintática, semântica, geração de código intermediário e otimizações.

O que é um Interpretador?

O interpretador é um programa que executa diretamente o código-fonte, linha por linha, sem convertê-lo previamente em código de máquina ou gerar um executável. Ele analisa cada instrução em tempo de execução, traduz e executa na hora. Isso permite um ciclo de desenvolvimento mais rápido, já que não exige um processo de compilação completo entre mudanças no código e testes.

Compilado vs Interpretado

Tudo o que pode ser feito em uma, pode ser feito na outra — a diferença está na forma como o código é executado e implementado, não em sua capacidade computacional.

Generalizando bem por cima, as vantagens típicas de linguagens compiladas são:

- Maior performance, pois o código é traduzido para a linguagem nativa da máquina.

- Otimizações que podem ser aplicadas durante a etapa de compilação, melhorando o desempenho final do programa.

E as vantagens comuns de linguagens interpretadas:

- Depuração mais fácil devido aos interpretadores executarem o código linha por linha, sendo mais fácil identificar e corrigir erros durante a execução.

- Portabilidade, As linguagens interpretadas podem ser mais portáveis, pois não dependem de um compilador específico para cada plataforma.

- Maior flexibilidade em tempo de execução, suportando features como tipagem dinâmica, reflexão e execução de código gerado em tempo real

Apesar dessas diferenças, o modelo de execução escolhido depende dos objetivos do projeto e das características da linguagem. Vale também notar que essa distinção nem sempre é absoluta. Muitas linguagens modernas adotam um modelo híbrido. Por exemplo, Java é compilado para bytecode (por javac), mas esse bytecode é interpretado pela JVM pra daí executar o programa.

Mas no fim das contas a parte mais legal disso tudo é poder ser o cara posta num blog sobre o que ta aprendendo mesmo que nunca mais vá usar.

Dito tudo isso, pretendo os próximos dias, semanas, meses… continuar escrevendo baseado no conteúdo proposto da matéria pra aproveitar e estudar pra essa matéria e fixar as ideias.

Se quiser acompanhar, só seguir a tag compiladores aqui no blog e caso queira ver o projeto prático antes de eu explicar é só entrar na seção de projetos e pesquisar por JavaCompiler.

Fora isso… Obrgiado pela atenção, um abraço e até mais!

j