В чем же все-таки разница между 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:
Если вы знаете еще какие-либо интересные отличия, сообщите нам об этом в комментариях ниже!