Jaka jest różnica między CPython, MicroPython i CircuitPython?

CPython, MicroPython i CircuitPython zajmują drogie miejsce w sercach wielu majsterkowiczów. Ale nie zawsze jest jasne, jakie są między nimi różnice. A jeśli majstrujesz przy mikrokontrolerach po raz pierwszy, te rozróżnienia mogą odegrać kluczową rolę w zrozumieniu, co dzieje się z twoim kodem.

W tym artykule wyjaśnię więc, czym są te trzy implementacje Pythona i jak je ze sobą porównać.

Ważne jest, aby pamiętać, że Python jest zarówno językiem oraz program. W tym kontekście implementacja jest programem, który interpretuje i wykonuje kod Pythona.

Mówimy więc głównie o trzech programach (które obejmują środowiska uruchomieniowe, standardowe biblioteki i inne narzędzia), które mogą uruchamiać kod Pythona. Zacznijmy więc od programu referencyjnego - CPython.

CPython

CPython jest domyślną i najczęściej używaną implementacją języka programowania Python. Zazwyczaj, gdy ludzie mówią o Pythonie, mówią o Pythonie działającym na CPythonie.

Nic dziwnego, że jest napisany w języku C (stąd "C") i służy jako referencyjna implementacja dla języka Python. Jeśli chcesz poznać wszystkie brudne szczegóły, możesz Sprawdź dokumentację CPython tutaj.

CPython interpretuje i wykonuje kod Pythona oraz zapewnia podstawową funkcjonalność i funkcje Pythona. A ponieważ jest najczęściej używany, ma również dostęp do najbardziej rozbudowanego ekosystemu bibliotek i pakietów, w tym bibliotek takich jak NumPy, Django, Flask, TensorFlow itp.

CPython posiada również środowisko uruchomieniowe z dynamicznym zarządzaniem pamięcią (w tym automatyczną alokacją pamięci poprzez liczenie referencji, a także zbieranie śmieci).

Jeśli chodzi o obsługę błędów, CPython oferuje możliwość zarządzania błędami i wyjątkami za pomocą bloków try-except.

Posiada również oczywiście wbudowany moduł debuggera, pdbktóry obsługuje punkty przerwania i pojedyncze kroki. Możesz dać mu szansę, uruchamiając go:

import pdb; pdb.set_trace()

Wreszcie, CPython używa Globalnej Blokady Interpretera (GIL), która pozwala tylko jednemu głównemu wątkowi na wykonywanie kodu bajtowego Pythona w ramach jednego procesu. Innymi słowy, CPython obsługuje programowanie asynchroniczne, ale nie równoległe. Więcej na temat programowania asynchronicznego i równoległego w nadchodzącym poście!

Niektóre inne implementacje nie używają GIL, dzięki czemu mogą oferować różne podejścia do współbieżności i równoległości.

Na przykład Jython działa na wirtualnej maszynie Javy.

IronPython działa na platformie .NET.

PyPy działa na Software Transactional Memory.

CPython, MicroPython i CircuitPython działają jednak z zainstalowanym GIL.

MicroPython

W przeciwieństwie do CPython, który jest przeznaczony do ogólnego użytku (komputery stacjonarne, serwery, systemy wbudowane itp.), MicroPython jest implementacją Pythona specjalnie zoptymalizowaną pod kątem mikrokontrolerów (takich jak Pico!) i systemów wbudowanych.

Warto tutaj wspomnieć, że MicroPython jest czasami zapisywany jako uPython, ze względu na grecką literę μ ("mu", jak w pierwszej literze "mikrós").

MicroPython nie wymaga tym samym systemu operacyjnego, można go efektywnie uruchamiać jak system operacyjny na mikrokontrolerze.

Zazwyczaj, aby to zrobić, ludzie polegają na Thonny IDEktóry zawiera szereg niezwykle przydatnych narzędzi do pracy z MicroPythonem.

Choć nadal napisany w języku C, MicroPython ma na celu zapewnienie kompaktowego środowiska uruchomieniowego dla mniej wydajnych urządzeń - więc używa mniej pamięci i tak naprawdę zapewnia tylko określone moduły i biblioteki dla systemów wbudowanych, takie jak machine, utimeoraz network.

Jeśli szukasz niesamowitych bibliotek MicroPython, możesz sprawdzić Niesamowity MicroPython.

CPython używa liczenia referencji jako głównego algorytmu odśmiecania, ale MicroPython używa Mark i Sweep jako głównego algorytmu odśmiecania do zarządzania pamięcią.

Został on stworzony przez Damiena George'a 10 lat temu, a jeśli chcesz posłuchać, jak o nim mówi, możesz sprawdzić ten wykład:

MicroPython nie posiada więc wszystkich funkcji standardowej biblioteki CPython.

W przeciwieństwie do CPythona, MicroPython nie ma wbudowanej obsługi funkcji pdb jako narzędzie do debugowania. Zamiast tego, jeśli używasz MicroPython, będziesz musiał polegać na innych technikach, takich jak instrukcje print.

Jeśli jesteś zainteresowany korzystaniem z zewnętrznych debuggerów, możesz sprawdzić ten bardzo fajny debugger MicroPython na GitHubie. Jego celem jest zapewnienie pdb do MicroPython.

Jeśli chcesz zapoznać się z dokumentacją MicroPython, aby uzyskać bardziej szczegółowe informacje, możesz śledzić ten link, aby zobaczyć wszystkie szczegóły.

MicroPython jest więc bardziej ograniczoną implementacją CPythona, ale wciąż jest cudownie potężny i często jest idealnym narzędziem dla wielu projektów.

CircuitPython

Innym świetnym narzędziem jest CircuitPython.

CircuitPython jest rozwidleniem MicroPythona powiązanym z Adafruit i ma na celu być bardziej przyjazny dla początkujących (to, czy MicroPython nie jest wystarczająco przyjazny dla początkujących, jest z pewnością kwestią do dyskusji).

W rzeczywistości różnice między MicroPython i CircuitPython są niezwykle małe.

Jedną zauważalną różnicą jest to, że CircuitPython został zaprojektowany tak, aby pliki były przenoszone na płytkę, pojawiając się jako dysk zewnętrzny (tak jak USB). Chodzi o to, że nie trzeba przesyłać pliku przez Thonny (choć nadal można).

Przykładowo, CircuitPython posiada specyficzne biblioteki, takie jak adafruit_neopixel, adafruit_bmp280oraz adafruit_dotstarktóre są przeznaczone dla określonego sprzętu.

Coś, co naprawdę wyróżnia CircuitPython, to tętniąca życiem społeczność, którą Adafruit stworzył wokół niego. Możesz sprawdzić CircuitPython forum i niezgoda aby przekonać się samemu. (Powinienem zaznaczyć, że MicroPython posiada również aplikację forum oraz niezgodaaczkolwiek znacznie rzadziej odwiedzana, ponieważ większość dyskusji na temat MicroPythona toczy się na GitHub).

Jeśli chcesz dowiedzieć się więcej o CircuitPython i jego różnicach z MicroPython (i CPython), możesz sprawdzić jego strona dokumentacji tutaj. Nawet jego dokumentacja wygląda podobnie do dokumentacji MicroPythona!

W przeciwnym razie możesz obejrzeć ten film opublikowany przez Adafruit:

Jeśli znasz jakieś inne interesujące różnice, daj nam znać w komentarzach poniżej!

Pozostaw komentarz