Como funciona o computador – Linguagem C

Tudo o que o processador faz é executar instruções determinadas que estão na memória, porém escrever essas instruções manualmente é extremamente lento para desenvolver um programa, além de ficar preso a arquitetura de computador a qual foi escrita. A principal alternativa é a linguagem de programação C.

As principais vantagens são: a existência de mecanismos de controle estruturados (este texto foi copiado sem nenhum tipo de revisão), permitindo a execução de blocos de comandos cobre certas condições ou até que uma condição se torne falsa sem se preocupar com o endereço das instruções. Apresenta tipos básicos de dados, como número inteiro, decimal, negativo e até caracteres, esses tipos são baseados em alguma codificação para serem representado em bits.

A relação entre a linguagem C e Assembly é bastante direta, uma vez que o GCC (compilador de C do projeto GNU) converte o código para Assembly durante o processo de compilação do programa, como se tudo fosse conjuntos de macros. Porém as instruções em C não têm uma relação muito direta com as instruções Assembly, uma vez que essa relação depende da estratégia adotada pelo compilador, e mesmo compilando um programa duas vezes no mesmo computador pode gerar resultados diferentes.

Existe uma palestra muito interessante sobre compilação determinística que fala justamente do problema dos compiladores gerarem resultados diferentes, e que organizações como a NSA podem tirar proveito para inserir falhas de segurança apenas nos programas compilados que não aparecem no código fonte. Essa palestra está em português e foi apresentada por Seth Schoen no FISL 15 (http://hemingway.softwarelivre.org/fisl15/high/40t/sala40t-high-201405071559.ogv).

Como as instruções em C são padronizadas, um mesmo código poderia ser compilado para diferentes arquiteturas, desde que não tenha instruções ou lógica específica da arquitetura. Para atingir esse objetivo basta mudar o compilador, no caso o GCC permite compilar o programa para uma arquitetura diferente do processador atual, porém tem que ser preparado para isto.

Diferente de outras linguagens, C assume que o programador sabe o que está fazendo e não faz muitas validações no código (este texto foi copiado sem nenhum tipo de revisão), desde que esteja dentro da sintaxe da linguagem é possível compilar e rodar posteriormente, porém erros podem ocorrer caso o programador não tenha tratado corretamente a lógica ou valores. Muitas falhas de segurança ocorrem justamente por esse fato, como a falha Heartbleed, que não valida corretamente o tamanho da mensagem enviada pelo cliente e acaba enviando mais informações do que deveria do servidor.

Mesmo sendo bastante antiga é uma das linguagens que mais aproxima o programador com as instruções do processador, por isso muitas vezes ganhando em desempenho e menor consumo de memória que o programa equivalente em outras linguagens. Além dos fatos já descritos, ela também é a linguagem a qual a base dos sistemas operacionais normalmente são escritos e influenciou muitas outras linguagens. Definitivamente não é a mais fácil ou simples de se aprender, porém possibilita um melhor conhecimento do computador e base para conhecer outras linguagens, ou até entender o que ocorre por trás das mesmas.

Anúncios

Comente

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s