CPython、MicroPython、CircuitPythonの違いは何ですか?
CPython、MicroPython、CircuitPythonは、多くのティンカーにとって大切な存在です。しかし、その違いは必ずしも明確ではありません。もしあなたが初めてマイクロコントローラーをいじっているのなら、これらの違いはあなたのコードに何が起きているのかを理解する上で重要な役割を果たすでしょう。
そこでこの記事では、Pythonのこれら3つの実装がどのようなもので、どのように比較対照するのかを説明する。
Pythonが言語であると同時に そして プログラムです。この文脈では、実装とはPythonのコードを解釈して実行するプログラムのことです。
つまり、Pythonコードを実行できる3つのプログラム(実行環境、標準ライブラリ、その他のツールを含む)について、主に話しているわけです。では、リファレンスプログラムであるCPythonから始めましょう。
CPython
CPythonは、プログラミング言語Pythonのデフォルト実装であり、最も広く使われています。通常、人々がPythonについて語るとき、それはCPython上で動作するPythonのことを指しています。
驚くなかれ、これはC言語で書かれており(だから "C "なのだ)、Python言語のリファレンス実装として機能している。詳細が知りたければ CPythonのドキュメントはこちらをご覧ください。.
CPythonはPythonコードを解釈して実行し、Pythonのコア機能と特徴を提供する。また、CPythonは最も利用されているため、NumPy、Django、Flask、TensorFlowなどのライブラリを含む、最も広範なライブラリやパッケージのエコシステムにもアクセスできる。
CPythonはまた、動的メモリ管理(参照カウントによる自動メモリ割り当てやガベージコレクションを含む)を備えたランタイム環境を持っています。
エラー処理に関しては、CPythonはtry-exceptブロックを通してエラーや例外を管理する機能を提供します。
もちろん、デバッガー・モジュールも内蔵している、 pdb
ブレークポイントとシングル・ステップをサポートしている。実行することで試してみることができる:
import pdb; pdb.set_trace()
最後に、CPythonはGlobal Interpreter Lock (GIL)を使い、1つのプロセス内で1つのメインスレッドだけがPythonバイトコードを実行できるようにします。言い換えると、CPythonは非同期プログラミングをサポートしていますが、並列プログラミングはサポートしていません。 非同期プログラミングと並列プログラミングについては、次の記事で詳しく説明する!
他の実装の中には、GILを使用しないものもあり、並行処理や並列処理に異なるアプローチを提供できるようになっている。
例えば、JythonはJava仮想マシン上で動作する。
IronPythonは.NET上で動作します。
そしてPyPyはSoftware Transactional Memory上で動作する。
しかし、CPython、MicroPython、CircuitPythonは、すべてGILがある状態で動作する。
MicroPython
汎用(デスクトップ、サーバー、組み込みシステムなど)向けに設計されたCPythonとは対照的に、MicroPythonは特にマイクロコントローラー(Pico!など)や組み込みシステム向けに最適化されたPythonの実装です。
MicroPythonは、ギリシャ文字のμ("mikrós "の頭文字のように "mu")にちなんで、uPythonと書かれることもあることをここで述べておく。
これにより、MicroPythonはオペレーティング・システムを必要とせず、効率的に動作させることができる。 として マイクロコントローラ上のオペレーティング・システム。
通常、そのためには、次のようなものを頼りにする。 トニーのIDEMicroPythonを扱うための非常に便利なツールがたくさんある。
C言語で書かれていますが、MicroPythonは、あまり性能の高くないデバイスのためにコンパクトなランタイムを提供することを目的としています。 machine
, utime
としています。 network
.
MicroPythonの素晴らしいライブラリをお探しなら 素晴らしいMicroPython.
CPythonは主なガベージコレクションアルゴリズムとして参照カウントを使用しますが MicroPythonはMarkとSweepを主なガベージコレクションアルゴリズムとして使用します。 メモリを管理する。
ダミアン・ジョージが10年前に考案したもので、彼の話を聞きたければ、このレクチャーをチェックしてほしい:
だから、MicroPythonはCPythonの標準ライブラリのすべての機能を持っているわけではない。
CPythonと違って、MicroPythonは pdb
をデバッグツールとして使うことができます。その代わりに、もしあなたがMicroPythonを使っているなら、print文のような他のテクニックに頼る必要があるでしょう。
外部デバッガーを活用することに興味があるなら、以下のサイトをチェックしてほしい。 このとてもクールなMicroPythonデバッガはGitHubにある。.その目的は pdb
の機能をMicroPythonに追加した。
MicroPythonのドキュメントをもっと詳しくチェックしたい場合は、以下のリンクをたどってください。 このリンクから詳細をご覧ください。.
MicroPythonはCPythonをより制約された形で実装したものですが、それでも驚くほどパワフルで、多くのプロジェクトにとって理想的なツールです。
CircuitPython
もう一つの素晴らしいツールはCircuitPythonだ。
CircuitPythonは、MicroPythonのフォークで、次のようなものです。 Adafruit MicroPythonが初心者に優しくないかどうかは議論の余地がある)。
実際、MicroPythonとCircuitPythonの違いは非常に小さい。
特筆すべき違いは、CircuitPythonはファイルを外部ディスクとしてボードに移動できるように設計されていることです(ちょうどUSBのように)。Thonnyを通してファイルをアップロードする必要がないということです(それでもアップロードは可能ですが)。
例えば、CircuitPythonには以下のような特定のライブラリがあります。 adafruit_neopixel
, adafruit_bmp280
としています。 adafruit_dotstar
これらはすべて特定のハードウェアを対象としている。
CircuitPythonを際立たせているのは、Adafruitが育ててきた活気あるコミュニティです。CircuitPythonをチェックアウトできます。 フォーラム とのことです。 不和 を参照してください。(MicroPythonにも フォーラム そして 不和でMicroPythonのディスカッションが行われることが多いので、頻度は低いですが。 GitHub).
CircuitPythonについて、またMicroPython(およびCPython)との違いについてもっと知りたい方は、以下をご覧ください。 ドキュメントページはこちら.ドキュメントもMicroPythonのドキュメントに似ている!
そうでない場合は、Adafruit社のビデオをご覧いただきたい:
他にも興味深い違いがあれば、下のコメント欄で教えてください!