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!

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.

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?".

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

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)

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.
- 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

- 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
- 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.
- 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 é: