¿Cuál es la diferencia entre CPython, MicroPython y CircuitPython?
CPython, MicroPython y CircuitPython ocupan un lugar muy querido en los corazones de muchos trasteadores. Pero no siempre está claro cuáles son las diferencias. Y si estás jugando con microcontroladores por primera vez, estas distinciones pueden jugar un papel clave en la comprensión de lo que está pasando con tu código.
Así que, en este artículo, explicaré cuáles son estas tres implementaciones de Python y cómo se comparan y contrastan.
Es importante recordar que Python es a la vez un lenguaje y un programa. En este contexto, la implementación es el programa que interpreta y ejecuta el código Python.
Así que estamos hablando principalmente de tres programas (que incluyen entornos de ejecución, bibliotecas estándar y otras herramientas) que pueden ejecutar código Python. Así que vamos a empezar con el programa de referencia - CPython.
CPython
CPython es la implementación por defecto y más utilizada del lenguaje de programación Python. Normalmente, cuando la gente habla de Python, se refiere a Python ejecutándose sobre CPython.
Como era de esperar, está escrito en C (de ahí el "C") y sirve como implementación de referencia para el lenguaje Python. Si quieres todos los detalles sucios, puedes consulte la documentación de CPython aquí.
CPython interpreta y ejecuta código Python y proporciona la funcionalidad y características principales de Python. Y como es el más utilizado, también tiene acceso al ecosistema más amplio de bibliotecas y paquetes, incluidas bibliotecas como NumPy, Django, Flask, TensorFlow, etc.
CPython también tiene un entorno de ejecución con gestión dinámica de memoria (incluyendo la asignación automática de memoria a través del conteo de referencias, así como la recolección de basura).
Cuando se trata de la gestión de errores, CPython le ofrece la posibilidad de gestionar errores y excepciones a través de bloques try-except.
También, por supuesto, tiene un módulo depurador incorporado, pdb
que soporta breakpoints y single stepping. Puede probarlo ejecutando:
import pdb; pdb.set_trace()
Por último, CPython utiliza un Bloqueo Global del Intérprete (GIL), que sólo permite que un hilo principal ejecute el código de bytes de Python dentro de un único proceso. En otras palabras, CPython soporta programación asíncrona, pero no programación paralela. Más información sobre programación asíncrona y paralela en un próximo artículo.
Algunas otras implementaciones no utilizan el GIL para poder ofrecer diferentes enfoques a la concurrencia y el paralelismo.
Por ejemplo, Jython se ejecuta en la máquina virtual Java.
IronPython se ejecuta en .NET.
Y PyPy se ejecuta en Memoria Transaccional de Software.
CPython, MicroPython, y CircuitPython, sin embargo, todos se ejecutan con el GIL en su lugar.
MicroPython
A diferencia de CPython, que está diseñado para uso general (ordenadores de sobremesa, servidores, sistemas embebidos, etc.), MicroPython es una implementación de Python optimizada específicamente para microcontroladores (¡como el Pico!) y sistemas embebidos.
Cabe mencionar aquí que MicroPython se escribe a veces como uPython, debido a la letra griega μ ("mu", como en la primera letra de "mikrós").
MicroPython por lo tanto no requiere un sistema operativo, puede ejecutarlo eficazmente como el sistema operativo en un microcontrolador.
Para ello, la gente suele recurrir a el IDE de Thonnyque cuenta con una serie de herramientas extremadamente útiles para trabajar con MicroPython.
Aunque sigue estando escrito en C, el objetivo de MicroPython es proporcionar un tiempo de ejecución compacto para dispositivos menos potentes, por lo que utiliza menos memoria y sólo proporciona módulos y bibliotecas específicos para sistemas embebidos, como por ejemplo machine
, utime
y network
.
Si estás buscando algunas bibliotecas MicroPython impresionantes, puedes echar un vistazo a Impresionante MicroPython.
CPython utiliza el conteo de referencias como su principal algoritmo de recolección de basura, pero MicroPython utiliza Mark y Sweep como su principal algoritmo de recolección de basura para gestionar la memoria.
Fue creado por Damien George hace 10 años y si quieres escucharle hablar de él, puedes consultar esta conferencia:
Así que MicroPython no tiene todas las características de la biblioteca estándar en CPython.
A diferencia de CPython, MicroPython no tiene soporte incorporado para pdb
como herramienta de depuración. En cambio, si utiliza MicroPython, tendrá que recurrir a otras técnicas como las sentencias print.
Si está interesado en utilizar depuradores externos, puede consultar este genial depurador MicroPython en GitHub. Su objetivo es proporcionar pdb
a MicroPython.
Si está interesado en consultar la documentación de MicroPython para obtener información más detallada, puede seguir los siguientes pasos este enlace para ver todos los detalles.
Así que MicroPython es una implementación más limitada de CPython, pero sigue siendo maravillosamente potente y a menudo la herramienta ideal para muchos proyectos.
CircuitoPython
Otra gran herramienta es CircuitPython.
CircuitPython es una bifurcación de MicroPython asociada a Adafruit y tiene como objetivo ser más fácil de usar para los principiantes (si MicroPython no es lo suficientemente fácil de usar para los principiantes es ciertamente una cuestión de debate).
De hecho, las diferencias entre MicroPython y CircuitPython son extremadamente pequeñas.
Una diferencia notable es que CircuitPython está diseñado para que los archivos se muevan a la placa apareciendo como un disco externo (como lo haría un USB). La idea ahí es que no necesitas subir un archivo a través de Thonny (aunque aún puedes hacerlo).
Por ejemplo, CircuitPython tiene bibliotecas específicas, como adafruit_neopixel
, adafruit_bmp280
y adafruit_dotstar
todos ellos destinados a un hardware específico.
Algo que realmente diferencia a CircuitPython es la vibrante comunidad que Adafruit ha fomentado a su alrededor. Puede consultar el CircuitPython foro y el discordia para comprobarlo. (Debo señalar que MicroPython también tiene un foro y un discordiaaunque mucho menos frecuentado, ya que la mayoría de los debates sobre MicroPython tienen lugar en GitHub).
Si quieres saber más sobre CircuitPython y sus diferencias con MicroPython (y CPython), puedes consultar su página de documentación aquí. Incluso su documentación se parece a la de MicroPython.
Si no, puedes ver este vídeo publicado por Adafruit:
Si conoce otras diferencias interesantes, háganoslo saber en los comentarios.