цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Различия между Python и MicroPython



Различия между Python и MicroPython

Автор: Mike(admin) от 27-02-2023, 03:55

Одним из наиболее привлекательных аспектов программирования на MicroPython является его сходство с широко популярным Python (далее Python), используемым в настольных средах почти два десятилетия. Благодаря почти идентичному синтаксису и парадигмам проектирования переход между средами разработки для встраиваемых систем и настольных компьютеров может быть практически беспроблемным. Это может быть очень желательно в эпоху Интернета вещей, когда данные продуктов встраиваемой электроники должны быть доступны на множестве платформ, включая мобильные, настольные и облачные. Персонал разработчиков можно сократить, а циклы разработки продукта сократить, если свести к минимуму разнообразие инструментов и языков программирования. Тем не менее, сама природа встраиваемой аппаратной среды по сравнению с настольными компьютерами требует некоторых существенных различий между MicroPython и Python.


Различия между Python и MicroPython

Экосистема встраиваемой электроники во многом ограничена, в отличие от настольных компьютеров или серверов. Прежде всего, они ограничиваются потреблением энергии. Многие встраиваемые устройства питаются от батарей или аккумуляторов, поэтому продление срока службы батареи ограничено с точки зрения производительности. Настольные компьютеры могут работать на частоте в несколько гигагерц, тогда как микроконтроллеры в лучшем случае работают на скоростях, измеряемых десятками или сотнями мегагерц. Ограниченные объемы памяти также являются ограничивающими факторами, существенно влияющими на разницу между Python и MicroPython. Объем памяти во встраиваемых системах измеряется всего в килобайтах или мегабайтах, поэтому функции, интенсивно использующие память, часто сокращаются или даже полностью удаляются из реализации MicroPython.


Знание различий между этими двумя языками важно для разработчиков, которые хотят избежать многих разочаровывающих часов отладки кода для встраиваемых систем. Далее приведены важные отличия, о которых должны знать разработчики.


Разработчики, работающие с Python, имеют доступ к сотням готовых модулей, которые можно легко добавить в свои проекты с помощью одной строки кода. Эти модули избавляют от необходимости заново изобретать велосипед при попытке добавить функциональности в проект. Однако многие модули могут быть довольно большими с точки зрения использования памяти. MicroPython либо исключает подобные модули, либо предоставляет специальные реализации модулей, предназначенные для встраиваемых платформ. Существуют также модули, уникальные для встраиваемых платформ, такие как взаимодействие с контактами ввода/вывода общего назначения (GPIO).


Различия между Python и MicroPython

Python использует автоматический подсчет ссылок как средство управления памятью, тогда как MicroPython использует сборщик мусора. С практической точки зрения, когда необходимо выделить память, MicroPython попытается найти в куче кусок памяти достаточного размера. Если это не удастся, MicroPython попытается освободить неиспользуемые или избыточные объекты в памяти. Это процесс, который обычно измеряется в миллисекундах. В качестве альтернативы разработчик может время от времени запускать gc.collect() для очистки памяти через заданные интервалы времени, гарантируя, что сборка мусора не будет выполняться в критических участках кода.


Различия в синтаксисе, вероятно, являются тем типом различий, который вызовет проблемы у большинства разработчиков, особенно если у вас есть значительный опыт работы с Python, который может дать вам своего рода «мышечную память» при программировании:


  • MicroPython требует пробелов между литеральными числами и ключевыми словами, а Python, напротив, нет.
  • MicroPython позволяет использовать := (двоеточие равно) для назначения переменной понимания, а в Python данное написание будет расценено как синтаксическая ошибка.

Одна из особенностей дизайна, которая делает Python удобным для начинающих программистов – это то, как он обрабатывает типы данных (например, целое число, логическое значение, число с плавающей запятой). В Python все типы данных являются классами, а переменная – экземпляром класса. Однако MicroPython не реализует всю объектную модель данных Python. Отличия включают отсутствие множественного наследования, методы __new__ и __del__special могут не работать, порядок разрешения методов отличается, а метаклассы не поддерживаются.


Цепочка исключений не реализована в MicroPython. Поэтому MicroPython не может повторно выдавать исключения на разных уровнях абстракции программы.


Встроенные типы обрабатываются по-разному. Например, MicroPython не поддерживает удаление массивов.


В Python функции являются объектами и имеют определенный набор атрибутов, к которым можно получить доступ через вызов функции. Например, все функции имеют встроенный атрибут __doc__, который возвращает строку документации, определенную в исходном коде функции. В Python возможны определяемые пользователем атрибуты для функций, однако они не поддерживаются в MicroPython. Это сделано из-за ограничений памяти, обычно встречающихся во встраиваемых системах.


Переопределение sys.stdin, sys.stdout и sys.stderr невозможно. Это файловые объекты, используемые интерпретатором для стандартного ввода, вывода и ошибок. Это то, как мы показываем текст пользователю и получаем ввод от пользователя.


Модули, которые не загружаются, по-прежнему регистрируются как загруженные. Это сделано для того, чтобы сделать работу с модулями более эффективной. Таким образом, загрузка не оборачивается обработкой исключений. Обязательно протестируйте код в среде разработки перед развертыванием в производственной среде.


Атрибут окружения environ не реализован. Вместо этого разработчики должны использовать методы getenv(), putenv() и unsetenv() для установки и получения переменных окружения. Обратите внимание, что метод getenv() позволяет передать ему только один аргумент.


Различия между Python и MicroPython

Функция print() не проверяет рекурсивные структуры данных (например, рекурсивные списки) так, как это делает Python. MicroPython проверяет использование стека, поэтому печать рекурсивной структуры данных не приведет к сбою в результате переполнения стека.


Сообщения об ошибках для методов могут отображать неожиданное количество аргументов, поскольку MicroPython считает «self» аргументом. Убедитесь, что при работе с сообщениями об ошибках этот факт учитывается.


JSON (нотация объектов javascript) – это популярный формат обмена данными, используемый многими конечными устройствами IoT для эффективного взаимодействия с облаком. Модуль MicroPython JSON не генерирует исключение, если объект JSON не сериализуем.


Модуль struct выполняет преобразование между значениями Python и структурами C, представленными в виде байтовых объектов Python. Это обеспечивает эффективную обработку двоичных данных, хранящихся в файлах, сетевых соединениях или последовательных протоколах, обычно используемых датчиками. К сожалению, функция struct.pack(format, v1, v2) не проверяет правильность количества аргументов. Это отличается от реализации Python, которая проверяет количество аргументов.


Возможность поиска целого числа в массиве не реализована. Таким образом, следующий код приведет к ошибке:



import array as array
a = array.array('i', [1, 2, 3, 4])
print(1 in a)

Python выведет false, тогда как MicroPython вернет нереализованное сообщение об ошибке.


MicroPython – это мощный, но простой в использовании язык программирования для разработки встраиваемых приложений. Однако он ограничен по сравнению с более многофункциональными реализациями Python, которые используются для создания настольных и облачных приложений. Некоторые различия могут быть устранены в будущих версиях MicroPython, или могут появиться новые различия по мере добавления новых функций в эталонную реализацию Python.




© digitrode.ru


Теги: MicroPython, Python




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий