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, pdb
que 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
, utime
e 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_bmp280
e adafruit_dotstar
que 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!