Quelle est la différence entre CPython, MicroPython et CircuitPython ?

CPython, MicroPython et CircuitPython occupent une place de choix dans le cœur de nombreux bricoleurs. Mais les différences ne sont pas toujours évidentes. Et si vous manipulez des microcontrôleurs pour la première fois, ces distinctions peuvent jouer un rôle clé pour comprendre ce qui se passe dans votre code.

Dans cet article, je vais donc expliquer ce que sont ces trois implémentations de Python et comment elles se comparent.

Il est important de se rappeler que Python est à la fois un langage et un programme. Dans ce contexte, l'implémentation est le programme qui interprète et exécute le code Python.

Nous parlons donc principalement de trois programmes (qui comprennent des environnements d'exécution, des bibliothèques standard et d'autres outils) qui peuvent exécuter du code Python. Commençons donc par le programme de référence - CPython.

CPython

CPython est l'implémentation par défaut et la plus utilisée du langage de programmation Python. En général, lorsque les gens parlent de Python, ils parlent de Python fonctionnant sur CPython.

Sans surprise, il est écrit en C (d'où le "C") et sert d'implémentation de référence pour le langage Python. Si vous voulez tous les détails, vous pouvez consultez la documentation de CPython ici.

CPython interprète et exécute le code Python et fournit les principales fonctionnalités et caractéristiques de Python. Et comme il est le plus utilisé, il a également accès à l'écosystème le plus étendu de bibliothèques et de paquets, y compris des bibliothèques comme NumPy, Django, Flask, TensorFlow, etc.

CPython dispose également d'un environnement d'exécution avec une gestion dynamique de la mémoire (y compris l'allocation automatique de la mémoire par comptage de références ainsi que le ramassage des ordures).

En ce qui concerne la gestion des erreurs, CPython vous offre la possibilité de gérer les erreurs et les exceptions à l'aide de blocs try-except.

Il dispose également, bien entendu, d'un module de débogage intégré, pdbqui prend en charge les points d'arrêt et les étapes uniques. Vous pouvez l'essayer en lançant :

import pdb; pdb.set_trace()

Enfin, CPython utilise un verrouillage global de l'interpréteur (GIL), qui n'autorise qu'un seul thread principal à exécuter le bytecode Python au sein d'un même processus. En d'autres termes, CPython prend en charge la programmation asynchrone, mais pas la programmation parallèle. Plus d'informations sur la programmation asynchrone et parallèle dans un prochain article !

D'autres implémentations n'utilisent pas la GIL afin de pouvoir proposer différentes approches de la concurrence et du parallélisme.

Par exemple, Jython fonctionne sur la machine virtuelle Java.

IronPython fonctionne sur .NET.

Et PyPy fonctionne sur la mémoire transactionnelle logicielle.

CPython, MicroPython et CircuitPython, cependant, fonctionnent tous avec la GIL en place.

MicroPython

Contrairement à CPython, qui est conçu pour un usage général (ordinateurs de bureau, serveurs, systèmes embarqués, etc.), MicroPython est une implémentation de Python spécifiquement optimisée pour les microcontrôleurs (comme le Pico !) et les systèmes embarqués.

Il convient de mentionner ici que MicroPython est parfois écrit uPython, en raison de la lettre grecque μ ("mu", comme dans la première lettre de "mikrós").

MicroPython ne nécessite donc pas de système d'exploitation, vous pouvez le faire fonctionner efficacement comme le système d'exploitation d'un microcontrôleur.

Généralement, pour ce faire, les personnes s'appuient sur l'IDE de Thonnyqui contient un certain nombre d'outils extrêmement utiles pour utiliser MicroPython.

Bien qu'il soit toujours écrit en C, MicroPython vise à fournir un temps d'exécution compact pour les appareils moins puissants - il utilise donc moins de mémoire et ne fournit que des modules et des bibliothèques spécifiques pour les systèmes embarqués, tels que machine, utimeet network.

Si vous cherchez d'excellentes bibliothèques MicroPython, vous pouvez consulter les sites suivants Un MicroPython génial.

CPython utilise le comptage de références comme principal algorithme de ramassage des ordures. MicroPython utilise Mark and Sweep comme principal algorithme de ramassage des ordures. pour gérer la mémoire.

Il a été créé par Damien George il y a 10 ans et si vous voulez l'écouter en parler, vous pouvez consulter cette conférence :

MicroPython ne dispose donc pas de toutes les fonctionnalités de la bibliothèque standard de CPython.

Contrairement à CPython, MicroPython n'a pas de support intégré pour le pdb comme outil de débogage. En revanche, si vous utilisez MicroPython, vous devrez vous appuyer sur d'autres techniques telles que les instructions d'impression.

Si vous souhaitez utiliser des débogueurs externes, vous pouvez consulter le site suivant ce débogueur MicroPython très cool sur GitHub. Il vise à fournir pdb à MicroPython.

Si vous souhaitez consulter la documentation de MicroPython pour plus de détails, vous pouvez suivre le lien suivant ce lien pour voir tous les détails.

MicroPython est donc une implémentation plus limitée de CPython, mais il reste merveilleusement puissant et constitue souvent l'outil idéal pour de nombreux projets.

CircuitPython

Un autre outil formidable est CircuitPython.

CircuitPython est un dérivé de MicroPython associé à Adafruit et se veut plus convivial pour les débutants (la question de savoir si MicroPython n'est pas suffisamment convivial pour les débutants est certainement un sujet de débat).

En fait, les différences entre MicroPython et CircuitPython sont extrêmement faibles.

Une différence notable est que CircuitPython est conçu pour que les fichiers soient déplacés vers la carte en apparaissant comme un disque externe (comme le ferait une clé USB). L'idée est que vous n'avez pas besoin de télécharger un fichier via Thonny (bien que vous puissiez toujours le faire).

Par exemple, CircuitPython dispose de bibliothèques spécifiques, telles que adafruit_neopixel, adafruit_bmp280et adafruit_dotstarqui sont tous destinés à un matériel spécifique.

Ce qui distingue vraiment CircuitPython, c'est la communauté dynamique qu'Adafruit a encouragée autour de lui. Vous pouvez consulter le site CircuitPython forum et le discorde pour vous en convaincre. (Je dois préciser que MicroPython dispose également d'une fonction forum et un discordebien que beaucoup moins fréquenté, puisque la plupart des discussions sur MicroPython se déroulent sur GitHub).

Si vous souhaitez en savoir plus sur CircuitPython et ses différences avec MicroPython (et CPython), vous pouvez consulter le site suivant sa page de documentation ici. Même sa documentation ressemble à celle de MicroPython !

Sinon, vous pouvez regarder cette vidéo publiée par Adafruit :

Si vous connaissez d'autres différences intéressantes, faites-le nous savoir dans les commentaires ci-dessous !

Laissez un commentaire