Qual è la differenza tra CPython, MicroPython e CircuitPython?

CPython, MicroPython e CircuitPython occupano un posto importante nel cuore di molti smanettoni. Ma non è sempre chiaro quali siano le differenze. E se vi state cimentando per la prima volta con i microcontrollori, queste distinzioni possono giocare un ruolo fondamentale nel capire cosa succede al vostro codice.

In questo articolo, quindi, spiegherò cosa sono queste tre implementazioni di Python e come si confrontano.

È importante ricordare che Python è un linguaggio e un programma. In questo contesto, l'implementazione è il programma che interpreta ed esegue il codice Python.

Quindi stiamo parlando principalmente di tre programmi (che includono ambienti di esecuzione, librerie standard e altri strumenti) che possono eseguire codice Python. Iniziamo con il programma di riferimento: CPython.

CPython

CPython è l'implementazione predefinita e più diffusa del linguaggio di programmazione Python. Di solito, quando si parla di Python, si parla di Python che gira su CPython.

Non sorprende che sia scritto in C (da qui il "C") e che serva come implementazione di riferimento per il linguaggio Python. Se si vogliono tutti i dettagli, si può consultare la documentazione di CPython qui.

CPython interpreta ed esegue il codice Python e fornisce le funzionalità e le caratteristiche principali di Python. Essendo il più utilizzato, ha anche accesso al più vasto ecosistema di librerie e pacchetti, tra cui librerie come NumPy, Django, Flask, TensorFlow, ecc.

CPython dispone anche di un ambiente di runtime con gestione dinamica della memoria (compresa l'allocazione automatica della memoria attraverso il conteggio dei riferimenti e la garbage collection).

Per quanto riguarda la gestione degli errori, CPython offre la possibilità di gestire errori ed eccezioni attraverso blocchi try-except.

Naturalmente, dispone anche di un modulo debugger integrato, pdbche supporta i breakpoint e il single stepping. Potete provarlo eseguendo:

import pdb; pdb.set_trace()

Infine, CPython utilizza un blocco globale dell'interprete (GIL), che consente a un solo thread principale di eseguire il bytecode Python all'interno di un singolo processo. In altre parole, CPython supporta la programmazione asincrona, ma non quella parallela. Maggiori informazioni sulla programmazione asincrona e parallela in un prossimo post!

Alcune altre implementazioni non utilizzano il GIL per poter offrire approcci diversi alla concorrenza e al parallelismo.

Ad esempio, Jython viene eseguito sulla Java Virtual Machine.

IronPython funziona su .NET.

E PyPy funziona con la memoria transazionale del software.

CPython, MicroPython e CircuitPython, tuttavia, funzionano tutti con il GIL inserito.

MicroPython

A differenza di CPython, che è stato progettato per scopi generici (desktop, server, sistemi embedded, ecc.), MicroPython è un'implementazione di Python specificamente ottimizzata per microcontrollori (come il Pico!) e sistemi embedded.

Vale la pena ricordare che MicroPython viene talvolta scritto come uPython, a causa della lettera greca μ ("mu", come la prima lettera di "mikrós").

MicroPython non richiede quindi un sistema operativo e può essere eseguito in modo efficace come il sistema operativo su un microcontrollore.

In genere, per fare ciò, ci si affida a l'IDE Thonny, che ha una serie di strumenti estremamente utili per gestire MicroPython.

Pur essendo ancora scritto in C, MicroPython si propone di fornire un runtime compatto per i dispositivi meno potenti, quindi utilizza meno memoria e fornisce solo moduli e librerie specifiche per i sistemi embedded, come ad esempio machine, utime, e network.

Se siete alla ricerca di alcune librerie MicroPython, potete dare un'occhiata a Fantastico MicroPython.

CPython utilizza il conteggio dei riferimenti come algoritmo di garbage collection principale, ma MicroPython utilizza Mark e Sweep come algoritmo principale di garbage collection. per gestire la memoria.

È stato creato da Damien George 10 anni fa e se volete ascoltarlo, potete consultare questa conferenza:

Quindi MicroPython non ha tutte le caratteristiche della libreria standard di CPython.

A differenza di CPython, MicroPython non ha un supporto incorporato per i file pdb come strumento di debug. Se invece si utilizza MicroPython, è necessario affidarsi ad altre tecniche, come le istruzioni di stampa.

Se si è interessati a utilizzare debugger esterni, si può dare un'occhiata a questo debugger MicroPython molto bello su GitHub. L'obiettivo è quello di fornire pdb a MicroPython.

Se siete interessati a consultare la documentazione di MicroPython per maggiori approfondimenti, potete seguire questo link per vedere tutti i dettagli.

Quindi MicroPython è un'implementazione più limitata di CPython, ma è ancora meravigliosamente potente e spesso è lo strumento ideale per molti progetti.

CircuitPython

Un altro ottimo strumento è CircuitPython.

CircuitPython è un fork di MicroPython associato a Adafruit e mira a essere più facile per i principianti (se MicroPython non sia abbastanza facile per i principianti è certamente una questione di discussione).

In effetti, le differenze tra MicroPython e CircuitPython sono estremamente ridotte.

Una differenza notevole è che CircuitPython è stato progettato per far sì che i file vengano spostati sulla scheda apparendo come un disco esterno (proprio come farebbe una USB). L'idea è che non sia necessario caricare un file attraverso Thonny (anche se è comunque possibile farlo).

Ad esempio, CircuitPython dispone di librerie specifiche, quali adafruit_neopixel, adafruit_bmp280, e adafruit_dotstarche si rivolgono tutti a un hardware specifico.

Un aspetto che contraddistingue CircuitPython è la vivace comunità che Adafruit ha creato intorno ad esso. È possibile consultare il sito CircuitPython forum e il discordia per verificare di persona. (Vorrei far notare che MicroPython ha anche un programma di forum e un discordiaanche se molto meno frequentato, dato che la maggior parte delle discussioni su MicroPython avviene su GitHub).

Se volete saperne di più su CircuitPython e sulle sue differenze con MicroPython (e CPython), potete dare un'occhiata a la sua pagina di documentazione qui. Anche la documentazione è simile a quella di MicroPython!

Altrimenti, potete dare un'occhiata a questo video realizzato da Adafruit:

Se conoscete altre differenze interessanti, fatecele sapere nei commenti qui sotto!

Lascia un commento