Compiladores: O que são? como o que escrevemos vira instrução de máquina.

Compiladores: O que são? como o que escrevemos vira instrução de máquina.

Você com certeza, caso já tenha se deparado com programação ou tecnologia, já ouviu a palavra 'compiladores'. Se o tema te interessa ou você já explorou essa área, vamos destrinchar o que é um compilador, qual é o seu papel e como ele opera.

O que é um compilador?

Como sabemos, ou caso não saiba, um computador não é capaz de interpretar a linguagem humana. Hoje utilizamos na programação linguagens de alto nível, de fácil legibilidade, como o Java, por exemplo. Portanto, é necessário que exista uma forma de a máquina interpretar o código escrito pelo ser humano.

Partindo desse princípio, surge a necessidade de um meio de "tradução" para a linguagem nativa da nossa máquina, ou mais especificamente, onde todo esse código é processado. a CPU!

Imagem demonstrativa de como a CPU processa informações

vamos chegar nesse assunto, porém vamos esmerilhar melhor todo o processo de criação e chegada deles

Como surgiu o compilador?

Vamos começar contextualizando o começo da programação, como conseguimos dominar uma máquina e fazer ela executar comandos a nossa vontade. Nos anos 1940 e no início dos anos 1950, programador um computador significava lidar DIRETAMENTE com código de máquina (Sequência de 0's e 1's). Ou caso, Assembly.

Kathleen Booth, inventora do Assembly

Programar se tratava mais de um trabalho mecânico e elétrico do que como conhecemos hoje, tendo que ter experiência de manuseio com fiações, transistores e válvulas para poder operar a própria lógica.

A figura central pela ideia de um compilador é a Analista de Sistemas da Marinha Estadunidense, "Grace Murray Hopper". Por volta de 1951 à 1952, enquanto trabalhava na Eckert-Mauchly Computer Corporation (empresa por trás do UNIVAC I, um dos primeiros computadores comerciais), ela começou a se questionar de uma ideia que mudaria totalmente o rumo da computação: "E se o computador pudesse traduzir algo para o mais próximo nossa linguagem?".

Grace Murray Hopper

O marco Zero.

Em 1952, Grace Hopper cria o A-Zero System, amplamente considerado o primeiro compilador da história.

Tecnicamente, o sistema A-Zero era um linker automático com características de um compilador. Ele pegava lista de operações simbólicas(conhecidas como subrotinas) e as traduzia para endereços de código executável em linguagem de máquina do UNIVAC

UNIVAC, o primeiro computador de uso comercial de uso geral

Cada instrução no programa dizia ao compilador:


Que subrotina chamar(por exemplo "calcular um seno").

Quais parâmetros passar.

O A-Zero então montava o programa final, substituindo símbolos por endereços binários e gerando algo que o UNIVAC pudesse executar.

O que um compilador faz?

Como dito nos tópicos anteriores, um compilador foi criado no intuito da máquina poder entender a linguagem humana de tal maneira que o aprendizado seja mais sucinto e de melhor legibilidade. Ele traduz código-fonte(Escrito em linguagens de alto nível como C) para código de máquina( Zero e Um)

Exemplo de código em C

Em essência, ele pega algo que nós, humanos entendam e gera algo que a CPU ( que processa o código) entenda.

Etapas do compilador

Apesar da explicação "sucinta", o compilador não é uma lógica de 1 etapa, o processo de um compilador para passar em código binário passa por 4 etapas principais, vamos destrinchar todas.

  1. Compilação

Na primeira etapa, o compilador ele analisa o código-fonte escrito em linguagem de alto nível. Como da imagem mostrada acima, esse processo envolve leitura, verificação e tradução de todas as instruções para uma representação intermediária ou para o famoso código Assembly. Durante a compilação, o programa é analisado quanto à sintaxe, semântica e coerência lógica (nessa etapa que ele faz a verificação por exemplo, se o printf não está errado, erros de sintaxe no código e etc.). O resultado é um arquivo na linguagem Assembly, que representa instruções em um formato o mais próximo possível de linguagem de máquina

Exemplo de código em Assembly
  1. Assembling

Na fase de montagem, o assembler converte o código em Assembly, como dito acima, para código máquina, isto é, instruções binárias que a CPU pode entender. O produto desta etapa é o que chamamos de um arquivo objeto, que contém o código binário do programa, porém ainda não tem os endereços finais definidos. Dita forma, o arquivo objeto é um bloco de código parcialmente traduzido, aguardando a linkagem para se tornar um executável

  1. Linkagem

A etapa de ligação é realizada pelo linker, responsável por unir todos os arquivos objeto e bibliotecas utilizadas pelo programa. O linker resolve todas as referências entre módulos, ajustas endereços de memória e garante que todas as funções e variáveis estejam corretamente conectadas. O resultado desse processo é o arquivo executável, pronto para ser carregado e executado pelo sistema operacional.

  1. Execução

Por fim, após tudo isso, quando o executável(arquivo .exe) é iniciado, o sistema operacional carrega o programa na memória! Ocorre a preparação do ambiente de execução, carrega bibliotecas dinâmicas necessárias e transfere o controle ao ponto de entrada do programa(geralmente é a função main). A partir deste momento, o processador passa a executar as instruções binárias em sequência.

Agora você pode falar que sabe o que é um compilador e como ele funciona! Espero que tenha gostado desse artigo!

a música de hoje é: