Sistemas embarcados: C++ ou Python?

As linguagens de programação C e C++ dominam a programação de sistemas embarcados, embora tenham uma série de desvantagens. Python, por outro lado, tem muitos pontos fortes que o tornam uma ótima linguagem para sistemas embarcados. Vejamos os prós e contras de cada um, e por que você deve considerar o Python para programação embarcada incorporada.

C e C++ são linguagens compiladas, enquanto Python é uma linguagem interpretada. C e C++ estão aí há décadas; C foi desenvolvido pela primeira vez em 1969 e C++ veio em 1983. Python é mais jovem, foi criado em 1989 por Guido van Rossum. Desde então, tornou-se uma das mais populares linguagens de programação open source. Todas as versões do Python são de código aberto e livremente utilizáveis e distribuíveis, mesmo para projetos comerciais. Se você estiver procurando por suporte comercial e indenização, distribuições como ActivePython estão disponíveis.

O caso do Python

Python

Python

Python é a linguagem de programação introdutória mais usada nos departamentos de ensino superior de Ciência da computação nos Estados Unidos. De acordo com um estudo do Grupo Barr, oito dos dez principais departamentos de Ciência da Computação atualmente usam Python para ensinar codificação. Debata os méritos dele, se quiser, mas o simples fato é que a linguagem mais amplamente compreendida por recém-formados é Python. É dramaticamente mais provável que um recém-formado compreenderá como codificar em Python do que em C ou C++.

Os desenvolvedores hobbyistas também costumam aprender programação com Python e/ou com Ruby, e é mais provável que eles serão mais proficientes em Python do que em C/C++. Entretanto, quando se trata de sistemas embarcados, os números são outros. O estudo do Grupo Barr mostra que mais de 95% do código para sistemas embarcados é escrito em C ou em C++. Este legado em sistemas embarcados pode ser difícil para o Python superar, mas seus atributos e o grande número de pessoas que codificam em Python podem ajudá-lo a superar o C e o C++ no futuro.

O Python não é apenas a linguagem de introdução mais popular em faculdades de Ciência da Computação, é também a linguagem que cresce mais rapidamente em computação embarcada. Talvez isso soe tolo quando você vê que apenas 5% dos sistemas embarcados utilizem Python, mas o Python começará a comer o monopólio do C/C++ nos próximos anos.

O livecoder brasileiro Berlotto desenvolveu com Python e Flask uma aplicação para controle de tarefas de forma ágil com foco em profissionais freelancers. Assista abaixo:

Leia também a entrevista que o Bugginho Developer fez com Felipe Cruz, mestre em computação, autor do livro “Python – Escreva seus primeiros programas” para saber a sua opinião sobre o mercado de trabalho para pythonistas.

Enquanto o C/C++ é lento para escrever, propenso a erros e frequentemente difícil de ler, Python é conhecido por sua escritabilidade, redução de erros e legibilidade. A importância da legibilidade não pode ser menos enfatizada: quando você está trabalhando em uma equipe, a legibilidade é fundamental para manter o código. Tem que ser facilmente decifrável a menos que você esteja disposto a desembolsar mais tempo e dinheiro em depuração e garantia de qualidade. A reutilização de design de Python ultrapassa o C/C++ e, nos ambientes Agile de hoje, a reutilização do design pode ser a diferença entre ficar à frente ou ficar atrás da concorrência.

Algoritmos embutidos estão ficando cada vez mais complexos. Loops de controle simples estão sendo substituídos por redes neurais e outros processos fortemente envolvidos que ajudaram Python a ganhar sua posição. Existem bibliotecas Python como Theano que otimizam o código em Python para esses processos. Enquanto Theano é escrito principalmente em C e C++, Python é usado para interface com bibliotecas de alto desempenho de uma forma amigável.

As bibliotecas Python estão prosperando! PyPI, o índice de pacotes Python, tem mais de 80.000 módulos e esses compêndios enormes aumentam drasticamente a produtividade dos programadores, dando-lhes a opção de pular algumas etapas e usar funções já estabelecidas em seu próprio código.

O caso do C++

C++

C++

O argumento do C++ é bastante óbvio: ele cria um código de tempo de execução mais compacto e mais rápido. Os intérpretes leem cada linha de código, analisam-nas, executam verificações de tempo de execução e rotinas de chamada para executar as operações no código. É muito mais atividade do que o que você teria se fosse executar código em C++, onde a mesma linha de código pode ser compilada em apenas um par de instruções. Isso pode levar a velocidades de execução mais lenta e maior consumo de energia com o Python.

No entanto, a velocidade de execução não é o único aspecto do desenvolvimento a considerar. Você também tem que considerar a velocidade do desenvolvimento. Enquanto Python pode ser menos eficiente do que C++ em tempo de execução, durante o desenvolvimento é muito mais eficiente.

Melhorando a velocidade do Python

Portanto, o caso principal contra Python em relação ao é sua velocidade de execução, mas existem várias maneiras de otimizar o código para que ele seja executado com mais eficiência. Além de bibliotecas como Theano, há extensões otimizadoras para o Python como Cython, que é, essencialmente, Python com digitação estática e palavras-chave para executar mais rapidamente. Como Cython é tipificado estaticamente, você pode facilmente compilar e executar na mesma velocidade do C++.

Compiladores just-in-time (JIT) compiladores são outra boa maneira de melhorar a velocidade de execução do Python. Esses compiladores trabalham em paralelo com o interpretador do Python para gerar instruções de máquina compiladas para códigos dentro de loops. Isso permite passagens subsequentes pelo interpretador para executar mais rápido. O compilador PyPy é capaz de dobrar a velocidade de execução do Python. Porém, os compiladores JIT só devem ser usados se houver espaço suficiente e, geralmente, os sistemas embarcados não têm muito a oferecer. A melhor otimização é usar melhores estruturas de dados e algoritmos, mas esta é a tarefa mais difícil no design e implementação de software, então talvez seja melhor utilizar uma das ferramentas acima, dependendo do seu nível de habilidade.

Usando Python para se comunicar com sistemas embarcados

O ponto mais forte do Python é quando usado como intermediário de comunicação entre o usuário e o sistema embarcado com o qual eles estão trabalhando. O envio de mensagens através do Python para ou a partir de um sistema embarcado permite ao usuário automatizar os testes. Os scripts Python podem colocar o sistema em diferentes estados, definir configurações e testar todos os tipos de casos de uso do mundo real. O Python também pode ser usado para receber dados do sistema incorporado que podem ser armazenados para análise. Os programadores podem, então, usar Python para desenvolver parâmetros e outros métodos de analisar esses dados.

Atualmente, o principal debate sobre os méritos do Python e do C++ se resume ao que é mais importante para sua equipe: velocidade de desenvolvimento ou velocidade de execução. No futuro, no entanto, talvez não esteja nas mãos dos programadores Python mostrar seu uso em sistemas incorporados, mas sim esteja não mãos dos designers de sistemas incorporados descobrir como acomodar a popularidade implacavelmente crescente do Python.

Recomendamos que conheça a página Python Brasil, onde pythonistas brasileiros podem ficar sabendo de vagas de emprego e aprender mais com artigos educativos.

  • O artigo inteiro não menciona nenhuma vez o MicroPython… como pode um artigo focado em programação de sistema embarcados com Python nem sequer citar o MicroPython?

Read previous post:
por-que-escolher-net
Por que escolher .NET?

É raro encontrar startups em .NET até hoje e por uma boa razão. Historicamente falando, o ecossistema .NET foi pouco...

Close