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!
Minha cabeça é pequena para a quantidade de ideias que me ocorrem. Elas surgem, crescem, juntam-se a outras que já habitam por lá, e quando dou por isso elas estão transbordando, saindo pelo ladrão! Aí o único jeito para não desperdiça-las é encontrar outra morada. Um lugar onde elas vivam e cresçam felizes. E o que pode ser mais feliz para uma boa ideia do que ser partilhada com os donos de outras ideias tão interessantes quanto?
Nenhum comentário:
Postar um comentário