FUI TAPEADO?

Reza a lenda que C é baixo nível…

Muitas pessoas afirmam isso, porém irei mostrar que não é!

Equivocadamente esta ideia é disseminada.

Devido a linguagem C possuir certos”plugins”, para compilers, que o “levam” a manipulação direta de hardware.

Ad-hoc o Assembly, que em tese não é mais baixo nível que binário, não é alto-nível, pois executamos instruções diretas a memória do computador, sendo assim Assembly é baixo-nível ao contrário de C que usa uma máquina virtual.

Exemplo de código em Assembly escrito em 16 bits.

C possui uma máquina abstrata, segundo a definição na spec da ISO/IEC 9899:1999:

[1]The semantic description in this International Standard describe the behavior  of an abstract machine in wich issues of optimization are irrelevant.

[2]In the abstract machine, all expressions are evaluated by the semantics.An actual implementation need not evaluate part of an  expression if it can deduce that its value is not used and that no needed sided effects will be produced(including any calling function or a acessing volatile object).

Segundo a Wikipédia, a definição de máquina abstrata:

“An abstract machine, also called an abstract computer, is a theoretical model of a computer hardware or software system used in automata theory. Abstraction of computing processes is used in both the computer science and computer engineering disciplines and usually assumes a discrete time paradigm.”

 

  •  as máquinas abstratas comumente,são usadas em experimentos mentais sobre computabilidade ou para analisar a complexidade de algoritmos.

 

  • uma máquina abstrata consiste na definição, de I/O, conjunto de aplicações disponíveis para “mudar” o início para o estado final.

O exemplo mais conhecido é a Máquina de Turing.

Máquina de Turing.
A linguagem C é altamente portável pois não há preocupação com a arquitetura em que está sendo concebida já em Assembly, terá certa diferença na portabilidade devido ao alto número de arquiteturas como:MIPS,SPARC,x86,x86_64,AMD64...

Porquê ela é portável?

C possui alto nível de abstração como foi dito acima, é uma linguagem compilada.O mais próximo de baixo nível que verão é o Assembly, em que se usa numeração hexadecimal, registradores.Portanto C É ALTO NÍVEL!

Se tiverem mais alguma dúvida:

Fontes: http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf

https://www.quora.com/What-is-C++-abstract-machine

https://en.wikipedia.org/wiki/Abstract_machine