segunda-feira, 5 de setembro de 2011

Uma questão de Nivel...

Estou atualmente ministrando um curso de programação de microcontroladores.  E como sempre surge a polêmica:  Linguagem de alto nivel?  Baixo nivel?  O que é isso?  O que utilizar, e quando?

Bom... "nivel" é um conceito relativo.  Todos concordam que as linguagens Assembly são baixo nivel.  Mas a partir daí, o cenário fica muito mais confuso!

Essa classificação foi criada quando só existiam os Assemblers e os compiladores procedurais.  Nesse cenário, as linguagens Assembly foram consideradas "baixo nivel", porque seus comandos descrevem código nativo de máquina, numa relação um-para-um, portanto estamos na camada mais baixa possível de interação com o hardware.  As linguagens compiladas foram, como um todo, consideradas de "alto nivel", pois seus comandos são compilados para código de máquina numa relação um-para-N, e o programador não vê mais os detalhes desse código.

Mas depois as coisas começaram a se complicar.  Apareceram as linguagens não-procedurais, nas quais o programador descreve tarefas, e os compiladores se encarregam da geração de comandos.  Como chamar isso?  Altíssimo nivel?  Além disso, apareceram linguagens como o "C", hoje largamente empregado em microcontroladores.  O "C", embora compilado, conserva uma relação muito mais direta entre código fonte e código de máquina.  Ele "disfarça" muito menos o hardware, e protege muito menos o programador de seus erros de lógica - e nesse aspecto lembra bastante um Assembler.  Tanto que alguns programadores que nunca usam Assembler passaram a chamar o "C" de "baixo nivel".

De qualquer forma, eu falava de programação de microcontroladores.  E nesse tipo de programação eu nunca vi serem utilizadas linguagens não-procedurais, já que isso nos colocaria longe demais da camada de hardware, o que é inviável nesse tipo de ambiente.  Mesmo linguagens de alto nivel são poucas nesse ambiente.  Quase exclusivamente "C".  E assim voltamos ao princípio de tudo.  Num microcontrolador, Assembly é baixo nivel.  Linguagem compilada é alto nivel.  Ponto.

E agora, depois de falar tudo isso, podemos responder à pergunta.  Repetindo o que já disse em ocasiões anteriores:  Aconselho sempre meus alunos a estudar cuidadosamente cada "core" de microcontrolador que forem utilizar.  E para isso, nada melhor do que programar em Assembler.  Depois que conhecerem bem o "core", o "C" é uma boa pedida, pois vai economizar bastante em esforço e tempo de programação.

Ahhh... mas não se esqueçam de dar uma olhada no código de máquina gerado pelo compilador... até hoje não inventaram um compilador tão esperto quanto um programador, e se vocês forem bons nisso sempre poderão otimizar o código gerado!

Nenhum comentário:

Postar um comentário