Was ist eigentlich der Unterschied zwischen CPython, MicroPython und CircuitPython?

CPython, MicroPython und CircuitPython haben einen festen Platz im Herzen vieler Tüftler. Aber es ist nicht immer klar, wo die Unterschiede liegen. Und wenn Sie zum ersten Mal mit Mikrocontrollern herumspielen, können diese Unterscheidungen eine wichtige Rolle spielen, um zu verstehen, was mit Ihrem Code los ist.

In diesem Artikel werde ich also erklären, was diese drei Implementierungen von Python sind und wie sie sich vergleichen und abheben.

Es ist wichtig, daran zu denken, dass Python sowohl eine Sprache und ein Programm. In diesem Zusammenhang ist die Implementierung das Programm, das den Python-Code interpretiert und ausführt.

Wir sprechen also hauptsächlich über drei Programme (zu denen Laufzeitumgebungen, Standardbibliotheken und andere Werkzeuge gehören), die Python-Code ausführen können. Beginnen wir also mit dem Referenzprogramm - CPython.

CPython

CPython ist die standardmäßige und am weitesten verbreitete Implementierung der Programmiersprache Python. Wenn man von Python spricht, meint man in der Regel Python, das auf CPython läuft.

Es überrascht nicht, dass es in C geschrieben ist (daher das "C") und als Referenzimplementierung für die Sprache Python dient. Wenn Sie alle schmutzigen Details wissen wollen, können Sie Hier finden Sie die Dokumentation von CPython.

CPython interpretiert und führt Python-Code aus und bietet die Kernfunktionen und -merkmale von Python. Und da es am häufigsten verwendet wird, hat es auch Zugriff auf das umfangreichste Ökosystem von Bibliotheken und Paketen, einschließlich Bibliotheken wie NumPy, Django, Flask, TensorFlow usw.

CPython verfügt außerdem über eine Laufzeitumgebung mit dynamischer Speicherverwaltung (einschließlich automatischer Speicherzuweisung durch Referenzzählung und Garbage Collection).

Was die Fehlerbehandlung angeht, so bietet CPython die Möglichkeit, Fehler und Ausnahmen durch try-except-Blöcke zu verwalten.

Es hat natürlich auch ein eingebautes Debugger-Modul, pdb, das Haltepunkte und Einzelschritte unterstützt. Sie können es ausprobieren, indem Sie es ausführen:

import pdb; pdb.set_trace()

Schließlich verwendet CPython ein Global Interpreter Lock (GIL), das es nur einem Haupt-Thread erlaubt, Python-Bytecode innerhalb eines einzigen Prozesses auszuführen. Mit anderen Worten: CPython unterstützt asynchrone Programmierung, aber keine parallele Programmierung. Mehr über Async und parallele Programmierung in einem der nächsten Beiträge!

Einige andere Implementierungen verwenden die GIL nicht, so dass sie unterschiedliche Ansätze für Gleichzeitigkeit und Parallelität anbieten können.

Jython läuft zum Beispiel auf der Java Virtual Machine.

IronPython läuft auf .NET.

Und PyPy läuft auf Software Transactional Memory.

CPython, MicroPython und CircuitPython laufen jedoch alle mit der vorhandenen GIL.

MicroPython

Im Gegensatz zu CPython, das für allgemeine Zwecke (Desktops, Server, eingebettete Systeme usw.) entwickelt wurde, ist MicroPython eine Implementierung von Python, die speziell für Mikrocontroller (wie den Pico!) und eingebettete Systeme optimiert ist.

Es ist erwähnenswert, dass MicroPython manchmal als uPython geschrieben wird, wegen des griechischen Buchstabens μ ("mu", wie der erste Buchstabe von "mikrós").

MicroPython benötigt dabei kein Betriebssystem, Sie können es effektiv einsetzen als das Betriebssystem auf einem Mikrocontroller.

In der Regel verlassen sich die Menschen dabei auf das Thonny-IDEdie eine Reihe von äußerst nützlichen Werkzeugen für den Umgang mit MicroPython enthält.

MicroPython ist zwar immer noch in C geschrieben, aber es geht darum, eine kompakte Laufzeit für weniger leistungsfähige Geräte bereitzustellen - es verbraucht also weniger Speicher und bietet eigentlich nur spezifische Module und Bibliotheken für eingebettete Systeme, wie machine, utimeund network.

Wenn Sie auf der Suche nach einigen großartigen MicroPython-Bibliotheken sind, können Sie sich hier informieren Fantastisches MicroPython.

CPython verwendet Referenzzählung als Hauptalgorithmus für die Garbage Collection, aber MicroPython verwendet Mark und Sweep als Hauptalgorithmus für die Garbage Collection um den Speicher zu verwalten.

Es wurde von Damien George vor 10 Jahren entwickelt, und wenn Sie hören möchten, wie er darüber spricht, können Sie sich diesen Vortrag ansehen:

MicroPython verfügt also nicht über alle Funktionen der Standardbibliothek von CPython.

Im Gegensatz zu CPython hat MicroPython keine eingebaute Unterstützung für pdb als Debugging-Werkzeug. Wenn Sie MicroPython verwenden, müssen Sie sich stattdessen auf andere Techniken wie Druckanweisungen verlassen.

Wenn Sie an der Verwendung von externen Debuggern interessiert sind, können Sie sich dieser sehr coole MicroPython Debugger auf GitHub. Es soll Folgendes bieten pdb Funktionen zu MicroPython.

Wenn Sie daran interessiert sind, die MicroPython-Dokumentation zu lesen, um mehr über das Thema zu erfahren, können Sie diesen Link, um alle Einzelheiten zu erfahren.

MicroPython ist also eine eingeschränktere Implementierung von CPython, aber es ist immer noch wunderbar leistungsfähig und oft das ideale Werkzeug für viele Projekte.

SchaltkreisPython

Ein weiteres großartiges Werkzeug ist CircuitPython.

CircuitPython ist ein Fork von MicroPython, der mit Adafruit und soll anfängerfreundlicher sein (ob MicroPython nicht anfängerfreundlich genug ist, darüber kann man sicher streiten).

In der Tat sind die Unterschiede zwischen MicroPython und CircuitPython äußerst gering.

Ein bemerkenswerter Unterschied ist, dass CircuitPython so konzipiert ist, dass Dateien auf die Platine verschoben werden können, indem sie wie ein externer Datenträger erscheinen (genau wie bei einem USB). Die Idee dahinter ist, dass Sie eine Datei nicht über Thonny hochladen müssen (obwohl Sie das trotzdem können).

CircuitPython hat zum Beispiel spezielle Bibliotheken, wie zum Beispiel adafruit_neopixel, adafruit_bmp280und adafruit_dotstardie alle auf eine bestimmte Hardware ausgerichtet sind.

Was CircuitPython wirklich auszeichnet, ist die lebendige Gemeinschaft, die Adafruit rund um CircuitPython aufgebaut hat. Sie können sich die CircuitPython Forum und die diskord um sich selbst davon zu überzeugen. (Ich sollte darauf hinweisen, dass MicroPython auch eine Forum und eine diskordwenn auch weit weniger frequentiert, da die meisten MicroPython-Diskussionen auf GitHub).

Wenn Sie mehr über CircuitPython und seine Unterschiede zu MicroPython (und CPython) erfahren möchten, können Sie sich seine Dokumentationsseite hier. Sogar die Dokumentation sieht der MicroPython-Dokumentation ähnlich!

Ansonsten können Sie sich dieses Video von Adafruit ansehen:

Wenn Sie weitere interessante Unterschiede kennen, lassen Sie es uns in den Kommentaren wissen!

Hinterlassen Sie einen Kommentar