Qual é a diferença entre CPython, MicroPython e CircuitPython?

CPython, MicroPython, e CircuitPython ocupam um lugar querido no coração de muitos engenheiros. Mas nem sempre é claro quais são as diferenças. E se estás a brincar com microcontroladores pela primeira vez, estas distinções podem ter um papel fundamental na compreensão do que se passa com o teu código.

Por isso, neste artigo, vou explicar o que são estas três implementações de Python e como se comparam e contrastam.

É importante lembrar que Python é tanto uma linguagem e um programa. Neste contexto, a implementação é o programa que interpreta e executa o código Python.

Portanto, estamos a falar principalmente de três programas (que incluem ambientes de execução, bibliotecas padrão e outras ferramentas) que podem executar código Python. Então vamos começar com o programa de referência - CPython.

CPython

O CPython é a implementação padrão e mais amplamente utilizada da linguagem de programação Python. Normalmente, quando as pessoas falam sobre Python, elas estão falando sobre Python rodando em CPython.

Sem surpresas, é escrito em C (daí o "C") e serve como implementação de referência para a linguagem Python. Se quiser saber todos os detalhes sujos, pode consulte a documentação do CPython aqui.

O CPython interpreta e executa código Python e fornece a funcionalidade e os recursos principais do Python. E como é o mais utilizado, também tem acesso ao mais extenso ecossistema de bibliotecas e pacotes, incluindo bibliotecas como NumPy, Django, Flask, TensorFlow, etc.

O CPython também tem um ambiente de tempo de execução com gestão dinâmica da memória (incluindo a atribuição automática de memória através da contagem de referências, bem como a recolha de lixo).

No que diz respeito ao tratamento de erros, o CPython oferece-lhe a possibilidade de gerir erros e excepções através de blocos try-except.

Além disso, como é óbvio, tem um módulo de depuração incorporado, pdbque suporta breakpoints e single stepping. Pode experimentá-lo executando:

import pdb; pdb.set_trace()

Finalmente, o CPython usa um Bloqueio Global do Interpretador (GIL), que só permite que uma thread principal execute o bytecode Python num único processo. Por outras palavras, o CPython suporta programação assíncrona, mas não programação paralela. Mais sobre programação assíncrona e paralela em um próximo post!

Algumas outras implementações não utilizam o GIL para poderem oferecer diferentes abordagens à concorrência e ao paralelismo.

Por exemplo, o Jython é executado na máquina virtual Java.

IronPython é executado em .NET.

E o PyPy corre em Memória Transacional de Software.

CPython, MicroPython, e CircuitPython, no entanto, todos correm com o GIL no sítio.

MicroPython

Ao contrário do CPython, que foi concebido para fins gerais (computadores de secretária, servidores, sistemas embebidos, etc.), o MicroPython é uma implementação do Python especificamente optimizada para microcontroladores (como o Pico!) e sistemas embebidos.

Vale a pena mencionar aqui que MicroPython é por vezes escrito como uPython, por causa da letra grega μ ("mu", como na primeira letra de "mikrós").

MicroPython não necessita de um sistema operativo, pode ser executado eficazmente como o sistema operativo num microcontrolador.

Normalmente, para o fazer, as pessoas recorrem a o Thonny IDEque tem uma série de ferramentas extremamente úteis para lidar com MicroPython.

Embora ainda escrito em C, o MicroPython tem como objetivo fornecer um tempo de execução compacto para dispositivos menos potentes - por isso utiliza menos memória e apenas fornece módulos e bibliotecas específicos para sistemas incorporados, como machine, utimee network.

Se estiveres à procura de algumas bibliotecas MicroPython fantásticas, podes consultar Incrível MicroPython.

O CPython utiliza a contagem de referências como o seu principal algoritmo de recolha de lixo, mas MicroPython usa Mark and Sweep como seu principal algoritmo de coleta de lixo para gerir a memória.

Foi criado por Damien George há 10 anos e se quiser ouvi-lo falar sobre o assunto, pode assistir a esta palestra:

Assim, o MicroPython não tem todas as características da biblioteca padrão do CPython.

Ao contrário do CPython, o MicroPython não tem suporte embutido para pdb como uma ferramenta de depuração. Em vez disso, se estiver a usar o MicroPython, vai precisar de recorrer a outras técnicas como as instruções de impressão.

Se estiver interessado em utilizar depuradores externos, pode consultar este depurador MicroPython muito fixe no GitHub. O seu objetivo é fornecer pdb características do MicroPython.

Se estiveres interessado em consultar a documentação do MicroPython para obteres informações mais detalhadas, podes seguir esta ligação para ver todos os pormenores.

Assim, o MicroPython é uma implementação mais limitada do CPython, mas ainda é maravilhosamente poderoso e muitas vezes a ferramenta ideal para muitos projectos.

CircuitPython

Outra ferramenta excelente é o CircuitPython.

CircuitPython é uma bifurcação de MicroPython associada a Adafruit e tem como objetivo ser mais fácil para os principiantes (se o MicroPython não é suficientemente fácil para os principiantes é certamente uma questão de debate).

De facto, as diferenças entre MicroPython e CircuitPython são extremamente pequenas.

Uma diferença notável é que o CircuitPython é projetado para ter arquivos movidos para a placa, aparecendo como um disco externo (assim como um USB faria). A ideia é que não precisa de carregar um ficheiro através do Thonny (embora ainda o possa fazer).

Por exemplo, o CircuitPython tem bibliotecas específicas, tais como adafruit_neopixel, adafruit_bmp280e adafruit_dotstarque se destinam a hardware específico.

Algo que realmente diferencia o CircuitPython é a comunidade vibrante que a Adafruit promoveu em torno dele. Você pode conferir o CircuitPython fórum e o discórdia para ver por si próprio. (Devo salientar que o MicroPython também tem um fórum e um discórdiaembora muito menos frequente, uma vez que a maior parte da discussão sobre MicroPython ocorre em GitHub).

Se quiseres saber mais sobre o CircuitPython e as suas diferenças com o MicroPython (e o CPython), podes consultar a sua página de documentação aqui. Até a sua documentação é semelhante à documentação do MicroPython!

Caso contrário, pode ver este vídeo publicado pela Adafruit:

Se souber de outras diferenças interessantes, diga-nos nos comentários abaixo!

Deixe um comentário