В чем же все-таки разница между CPython, MicroPython и CircuitPython?

CPython, MicroPython и CircuitPython занимают достойное место в сердцах многих мастеров. Однако не всегда понятно, в чем их различие. Если вы впервые сталкиваетесь с микроконтроллерами, эти различия могут сыграть ключевую роль в понимании того, что происходит с вашим кодом.

Итак, в этой статье я расскажу о том, что представляют собой эти три реализации Python и как они сравниваются и различаются.

Важно помнить, что Python - это одновременно и язык и программа. В данном контексте реализация - это программа, которая интерпретирует и исполняет код Python.

Таким образом, речь идет в основном о трех программах (к которым относятся среды выполнения, стандартные библиотеки и другие инструменты), позволяющих выполнять код на языке Python. Итак, начнем с эталонной программы - CPython.

CPython

CPython - это стандартная и наиболее распространенная реализация языка программирования Python. Обычно, когда говорят о Python, имеют в виду Python, работающий на CPython.

Неудивительно, что он написан на языке C (отсюда и "C") и служит эталонной реализацией для языка Python. Если вы хотите узнать все грязные подробности, вы можете ознакомьтесь с документацией по CPython здесь.

CPython интерпретирует и выполняет код на языке Python и обеспечивает основную функциональность и возможности языка Python. А поскольку он является наиболее используемым, он также имеет доступ к самой обширной экосистеме библиотек и пакетов, включая такие библиотеки, как NumPy, Django, Flask, TensorFlow и т.д.

CPython также имеет среду выполнения с динамическим управлением памятью (включая автоматическое выделение памяти с помощью подсчета ссылок, а также сборку мусора).

Что касается обработки ошибок, то CPython предоставляет возможность управлять ошибками и исключениями с помощью блоков try-except.

Также, конечно, в нем имеется встроенный модуль отладчика, pdb, который поддерживает точки останова и одиночный шаг. Вы можете испытать его, запустив:

import pdb; pdb.set_trace()

Наконец, в CPython используется глобальная блокировка интерпретатора (GIL), которая позволяет выполнять байткод Python только одному главному потоку в рамках одного процесса. Другими словами, CPython поддерживает асинхронное, но не параллельное программирование. Подробнее об асинхронном и параллельном программировании - в следующем посте!

Некоторые другие реализации не используют GIL, что позволяет им предлагать различные подходы к параллелизму и параллельности.

Например, Jython работает на виртуальной машине Java.

IronPython работает на платформе .NET.

А PyPy работает на программной транзакционной памяти.

Однако CPython, MicroPython и CircuitPython работают с установленным GIL.

MicroPython

В отличие от CPython, предназначенного для общего назначения (настольные компьютеры, серверы, встраиваемые системы и т.д.), MicroPython - это реализация Python, специально оптимизированная для микроконтроллеров (например, Pico!) и встраиваемых систем.

Стоит отметить, что MicroPython иногда пишут как uPython, из-за греческой буквы μ ("mu", как в первой букве слова "mikrós").

MicroPython thereby не требует операционной системы, его можно эффективно запускать в роли операционная система на микроконтроллере.

Как правило, для этого люди опираются на IDE Thonny, в котором имеется ряд чрезвычайно полезных инструментов для работы с MicroPython.

Хотя MicroPython по-прежнему написан на языке C, его цель - обеспечить компактную среду выполнения для менее мощных устройств, поэтому он использует меньше памяти и предоставляет только специальные модули и библиотеки для встраиваемых систем, такие как machine, utimeи network.

Если вы ищете замечательные библиотеки MicroPython, вы можете посмотреть Замечательный MicroPython.

В CPython в качестве основного алгоритма сборки мусора используется подсчет ссылок, но В качестве основного алгоритма сборки мусора в MicroPython используются Mark и Sweep для управления памятью.

Он был создан Дэмиеном Джорджем 10 лет назад, и если вы хотите послушать, как он рассказывает об этом, то можете посмотреть эту лекцию:

Таким образом, MicroPython не обладает всеми возможностями стандартной библиотеки в CPython.

В отличие от CPython, MicroPython не имеет встроенной поддержки pdb в качестве инструмента отладки. Если же вы используете MicroPython, то вам придется прибегнуть к другим методам, например, к операторам печати.

Если вы заинтересованы в использовании внешних отладчиков, вы можете ознакомиться с очень интересный отладчик 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:

Если вы знаете еще какие-либо интересные отличия, сообщите нам об этом в комментариях ниже!

Комментировать