Dia 13 - 1.3 Por trás do programa

Matheus Gomes - Oct 12 - - Dev Community

Esse post fala sobre o capítulo 1.3 do livro "Organização e Projeto de Computadores: Interface Hardware/Software"

-

O começo desse capítulo deixa explícito que o computador só pode executar instruções de baixo nível e há várias camadas que interpretam ou traduzem as operações de alto nível para baixo nível. Esse é um grande exemplo de abstração.

computação em camadas

Essas camadas demonstram a organização de maneira hierárquica. software de sistemas seria serviços como: sistemas operacionais, compiladores, carregadores e montadores.

Software de aplicações é o que nós, devs, normalmente codamos muito: apps de web, desktop e afins.

Há muitos software de sistemas, mas os mais fundamentais são: sistemas operacionais e compiladores.

Um ponto interessante é que, no contexto desse livro, C/C++ é considerado linguagem de alto nível. Já vi algumas pessoas falando isso também, e faz sentido, mas quando comparado com Python por exemplo, eu também acho que faz sentido chamar C/C++ de baixo nível. Será que cabe perspectiva nessa "discussão"? Honestamente não ligo muito para essa terminologia 😅.

Continuando, sistema operacional é importante por conta da manipulação de operações básicas de entradas e saídas, alocamento de memória, além de ser o caminho de comunicação amigável entre o usuário e o hardware. Já o compilador é responsável por traduzir linguagens de alto nível para instruções de máquina.

Sobre instruções de máquina:

Nossas instruções são grupos de bits que o computador entende e obecede. Nada mais são que sinais elétricos resumidos em 0's e 1's.

Gostaria de fazer uma menção honrosa ao excelente jogo "Turing Complete" isso é bastante demonstrado lá.

Sobre montador (assembler):

Um assembler traduz a versão simbólica de uma instrução para binário.

add A,B
Enter fullscreen mode Exit fullscreen mode

seria traduzido para:

1000110010100000
Enter fullscreen mode Exit fullscreen mode

Essa instrução diz para o computador somar dois números A e B. E essa linguagem simbólica foi denominada como assembly.

poder da abstração

Também existem linguagens que ignoram essa etapa intermediária já traduzindo diretamente para linguagem de máquina. Um exemplo é o GoLang, que após utilizamos o go build, é gerado um executável binário.

Então, por que não codamos em binário e assembly?

Utilizar linguagens de alto nível:

  1. Permite que o programador pense em uma linguagem mais natural, e também há linguagens projetadas para fins específicos.
  2. Aumento de produtividade.
  3. Permite que os programas sejam independentes do computador no qual estão sendo desenvolvidos. Compiladores e Montadores traduzem o programa para instruções binárias de qualquer máquina.
. . . . . . . . . . . . . . . . . . . . . .