Desenvolvimento

29 out, 2018

Sistemas embarcados com Python?

Publicidade

Provavelmente você deve estar fazendo a mesma cara que eu em relação ao título deste artigo, mas depois de alguns dias pesquisando, vi como o Python pode ser um grande aliado quando usado como intermediário de comunicação entre usuário e sistema.

Nós já sabemos que a linguagem que domina o desenvolvimento de sistemas embarcados é C/C++. Já o Python vem cheio de pontos fortes e diversos estudos estão apontando a linguagem para o desenvolvimento de sistemas embarcados.

C/C++ são linguagens compiladas – ambas já existem há bastante tempo. O C surgiu em 1969 e o C++ foi desenvolvido em 1983. Logo depois, em 1989, surgiu o Python, que é uma linguagem interpretada e tem se tornado uma das linguagens mais utilizadas, com todas as suas versões open source e distributiveis.

O Python

A linguagem tem se tornado introdutória em diversas faculdades, e é uma das mais compreensíveis em grupos de recém formados, com uma comunidade forte. É bem mais provável que um formando hoje aprenda a programar em Python do que em C/C++. Também não podemos esquecer que existe uma parcela de desenvolvedores que utilizam Python como hobbie.

Mas quando o assunto é sistemas embarcados, a diferença é gritante! Cerca de 95% dos códigos são escritos em C/C++. É difícil imaginar que o Python um dia possa ultrapassar o legado do C/C++, mas com o grande número de desenvolvedores Python, C/C++ podem ser ultrapassados no futuro.

Python não é só a linguagem mais comum para quem está em início de carreira/faculdade, é também a linguagem que mais cresce quando o assunto é ciência de dados, inteligência artificial e computação incorporada. Pode parecer estranho, mas quando vamos olhar os números, percebe-se que a linguagem que vem crescendo mais rápido, onde 5% dos demais códigos para sistemas embarcados, são C/C++, mas quem sabe o Python não “rouba” esse monopólio nos próximos anos?

Quem está migrando para a indústria com experiências em desenvolvimento focado em drones ou robôs tem uma certa afinidade com Arduíno e Raspberry Pi. Essas pessoas, em algum momento, tiveram contato com o Python e também com alguma programação de sistemas embarcados.

C/C++ é um pouco lento de se escrever, propenso a erros e as vezes é ilegível, o Python é conhecido pela sua capacidade de escrita, redução de erros e legibilidade e sinceramente legibilidade é fundamental para manter o código, ainda mais quando se trata de trabalhos em equipe.

Tem que ser fácil e decifrável. Com prazos apertados ninguém está disposto a gastar mais tempo em depuração, garantia e qualidade. O design do Python supera muito o C/C++ e reutilização em ambientes ágeis pode fazer a diferença em relação a concorrência.

Os algoritmos estão ficando cada vez mais complexos. Loops de controle estão sendo substituídos por redes neurais e outros processos que ajudaram o Python a embarcar nessa área. O Python tem bibliotecas como a Theano, que otimizam o código para esses processos, mas tudo bem que o Theano é escrito em C/C++, o Python tem bibliotecas de altíssimo desempenho e é muito mais amigável.

O índice de pacotes o Python tem enésimos módulos que vêm aumentando a produtividade dos programadores, nos dando a opção de pular etapas, pois as funções já vêm estabelecidas em seu próprio código.

E o C/C++?

É bem óbvio: eles geram códigos de tempo de execução de forma compacta e rápida, e é a linguagem escolhida por 95% dos desenvolvedores de sistemas embarcados. Portanto, é uma história que talvez o Python demore a superar.

Mas e quando se trata de velocidade? A velocidade do tempo de execução não é o único aspecto do desenvolvimento a ser considerado. Também consideramos a velocidade do desenvolvimento. O Python pode ser menos eficiente que o C/C++ em tempo de execução, porém, durante o desenvolvimento é muito mais eficiente.

Os intérpretes lêem cada linha de código, analisam e fazem verificações de tempo de execução e rotinas de chamada para executar as operações no código. Isso é muito mais atividade do que o que você obtém ao executar o código C/C ++, onde a mesma linha de código pode ser compilada em apenas algumas instruções. Isso pode levar a velocidades de tempo de execução mais lentas e maior consumo de energia com o Python.

A velocidade do Python:

O principal argumento contra o Python em relação ao C/C++ é a sua velocidade de tempo de execução, mas existem diversas maneiras de melhorar o código e deixá-lo mais eficiente. Além das bibliotecas, também existem extensões para o Python como, por exemplo, o Cython, que é basicamente Python com digitação estática para executar a matemática mais rápido. O Cython é tipado estaticamente – podemos compilar para C/C++ e executar nas velocidades de C/C++.

Os Just In Time são outra maneira de melhorar a velocidade de execução do Python. Esses tipos de compiladores trabalham em paralelo com o interpretador do Python, ele gera instruções de máquina compiladas para loops do código. Isso faz com o que os passes subsequentes sejam executados pelo interprete de forma mais rápida.

O compilador PyPY JIT pode aumentar a velocidade de execução do Python em quase um fator de dois. Lembrando que os compiladores JIT só devem ser utilizados se houver espaço, já que os sistemas embarcados não têm muito disco de sobra.

Então, qual é a melhor otimização?

É utilizar de estruturas de dados e algoritmos melhores, mas isso pode se tornar a tarefa mais difícil na implementação de software, então é melhor utilizar as ferramentas citadas acima.

Comunicação do Python com sistemas embarcados:

O Python pode ser uma forte ferramenta quando utilizada como um intermediário de comunicação entre o usuário e o sistema embarcado trabalhado, o envio de mensagens pelo Python para um embarcado permite que o usuário automatize seus testes.

O Python também pode ser usado para receber dados do sistema embarcado que podem ser armazenados para análise. Os programadores podem usar o Python para desenvolver parâmetros e outros métodos de análise desses dados.

Mas, enfim, o que é mais importante para a sua equipe? Deixando um pouco de lado o debate entre Python e C/C++, futuramente pode não caber aos programadores de Python defender seu uso em sistemas embarcados, mas sim aos designers/arquitetos de sistemas embarcados para descobrir como acomodar a popularidade crescente do Python.