MicroPython:Основы/Язык MicroPython и его реализация/Глоссарий

Материал из Онлайн справочника
Версия от 17:34, 18 июля 2020; Myagkij (обсуждение | вклад) (→‎См.также)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Глоссарий[1]

  • Байт-код. Компактная репрезентация программы на языке Python, сгенерированная при помощи компиляции исходного кода Python. Это то, что – по сути – выполняет виртуальная машина. Как правило, байт-код генерируется автоматически во время работы программы и пользователю этот процесс не виден. Помните, что хотя байт-код используется и в CPython, и в MicroPython, формат байт-кода у них разный. Кроме того, вы можете сделать предкомпиляцию исходного кода оффлайн при помощи кросс-компилятора.
  • Буферный протокол. Любой Python-объект – вроде bytes, bytearray, memoryview и str – можно автоматически преобразовать в байты. Во всех них реализован «буферный протокол».
  • Вызываемый кортеж. Это конструкция, разработанная специально для MicroPython по соображениям эффективности. Она позволяет некоторым встроенным функциям и методам повторно использовать один и тот же базовый объект кортежа для возвращения данных. Это позволяет не выделять место под новый кортеж при каждом вызове и снизить фрагментацию кучи. Программы не должны хранить указатели на такие кортежи – вместо этого они лишь извлекают из них данные (или копируют).
  • «Голое» железо/устройство/плата. Система без (полнофункциональной) операционной системы – например, система на базе микроконтроллера. Будучи запущенным на «голом железе» MicroPython, по сути, функционирует как маленькая операционная система, запускающая программы пользователя и предоставляющая доступ к интерпретатору команд (REPL).
  • Драйвер. Библиотека MicroPython, в которой реализована поддержка какого-либо компонента (вроде датчика или дисплея).
  • Замороженный модуль. Модуль Python, который был кросс-компилирован и встроен в образ прошивки. Это снижает требования к RAM-памяти, т.к. код выполняется напрямую из flash-памяти.
  • Интернированная строка. Это оптимизационная функция, используемая MicroPython для повышения эффективности работы со строками. Обращение к интернированной строке происходит при помощи ее (уникального) идентификатора, а не адреса, поэтому сравнение такой строки выполняется быстро – ведь используется лишь ее идентификатор. Это позволяет дедуплицировать идентичные строки в памяти устройства. Интернирование строк почти всегда невидимо для пользователя.
  • Кросс-компилятор. Его также называют mpy-cross. Этот инструмент запускается на вашем ПК и конвертирует файл «*.py», содержащий код MicroPython, в файл «*.mpy», содержащий байт-код MicroPython. Это значит, что он будет быстрее загружаться (плате не надо будет компилировать код) и занимать меньше места на flash-памяти (байт-код в этом смысле лучше оптимизирован).
  • Куча. Участок RAM-памяти, в котором MicroPyton хранит динамические данные. Он управляется автоматически сборщиком мусора. Размер RAM-памяти, выделенной под кучу, очень сильно различается у разных микроконтроллеров и плат, и это влияет на то, насколько сложной может быть ваша программа.
  • Нативный. Обычно используется во фразе «нативный код», что означает машинный код, предназначенный для того или иного микроконтроллера (вроде ARM Thumb, Xtensa, x86/x64). К функции MicroPython можно применить декоратор @native, чтобы сгенерировать для нее не байт-код, а нативный код. Он, скорее всего, будет работать быстрее, но в то же время – использовать больше RAM-памяти.
  • Плата. Обычно этим термином называют печатную плату, оснащенную микроконтроллером и вспомогательными компонентами. Для разных типов плат разработаны разные версии MicroPython, т.к. в прошивке содержится не только функционал для микроконтроллера, но и функционал для самой платы (вроде драйверов и названий контактов).
  • Порт. Обычно сокращение от «порт MicroPython», но также может использоваться в контексте «GPIO-порт».
  • Порт MicroPython. MicroPython поддерживает разные платы, RTOS и ОС, и его относительно легко адаптировать под новые системы. MicroPython, поддерживающий какую-либо систему, называется «портом» для этой системы. У разных портов может быть совершенно разный функционал. Данная документация – это справочник по универсальным API, которыми можно пользоваться на разных портах («ядро MicroPython»). Учтите, что в некоторых портах может не быть описываемых здесь API (например, из-за ресурсных ограничений). Все эти отличия, а также расширения для некоторых портов, не входящие в ядро MicroPython, будут описаны в отдельной документации для этих портов.
  • Порт MicroPython Unix. Порт для Unix – это один из главных портов MicroPython. Он предназначен для запуска POSIX-совместимых операционных систем вроде Linux, MacOS, FreeBSD, Solaris и т.д. Он также служит основой для Windows-порта. Порт Unix очень полезен в быстрой разработке и тестировании функций языка MicroPython и платформонезависимых функций. Он также может функционировать аналогично исполняемому файлу python в CPython.
  • Поток ввода/вывода. Он же «файлообразный объект». Объект Python, позволяющий последовательно считывать/записывать в него данные. Интерфейс потока ввода/вывода реализован соответствующе – он состоит из методов вроде read(), write(), readinto(), seek(), flush(), close() и т.д. Поток ввода/вывода – это важный концепт в MicroPython, его интерфейс реализован во многих объектах ввода/вывода, благодаря чему их можно систематически и взаимозаменяемо использовать в разных контекстах. Более подробно о потоках ввода/вывода в MicroPython читайте в статье о модуле uio.
  • Сборщик мусора. Фоновый процесс в PythonMicroPython), очищающий неиспользуемую память в куче.
  • Файловая система. У большинства плат и портов Micropython есть файловая система, которая хранится в flash-памяти. Пользовательский код может получить доступ к ней с помощью стандартных файловых API языка Python вроде open(). У некоторых плат доступ к этой внутренней файловой системе осуществляется как к USB-флеш-накопителю.
  • Файл «*.mpy». Результат работы кросс-компилятора. Скомпилированная версия файла «*.py», содержащая байт-код MicroPython вместо исходного кода Python.
  • Файл «*.py». Файл, содержащий исходный код Python.
  • CircuitPython. Версия MicroPython, разработанная Adafruit Industries.
  • CPython. Эталонная реализация языка программирования Python. На самом деле реализаций Python много (включая Jython, IronPython, PyPy и MicroPython), но CPython – это самая известная и них. Хотя реализация MicroPython сильно отличается от CPython, ее разработчики все же пытаются добиться максимальной совместимости между ними.
  • FFI. Это аббревиатура для «Foreign Function Interface», что можно перевести как «интерфейс для взаимодействия с функцией из другого языка программирования». Этот механизм используется портом MicroPython Unix для доступа к функционалу операционной системы. На портах для «голого железа» эта функция не доступна.
  • GPIO. Аббревиатура для «general purpose input/output», что можно перевести как «интерфейс ввода/вывода общего назначения». Самое простое средство для управления электрическими сигналами (обычно называемыми «контактами») на микроконтроллере. Как правило, GPIO позволяет переводить контакты в режимы ввода или вывода данных, а также задавать или считывать с них цифровые значения (логическое «0» или «1»). В порте MicroPython доступ к GPIO-функционалу осуществляется при помощи классов machine.Pin и machine.Signal.
  • GPIO-порт. Группа GPIO-контактов, сформированная исходя из аппаратных свойств этих контактов (например, они управляются одним и тем же регистром).
  • MCU. Микроконтроллер. У микроконтроллеров обычно гораздо меньше ресурсов, чем у настольных ПК, ноутбуков или телефонов, но они меньше, дешевле и требуют гораздо меньше электроэнергии. Порт MicroPython достаточно мал и оптимизирован для того, чтобы его можно было запустить на среднем современном микроконтроллере.
  • micropython-lib. MicroPython обычно распространяется в виде одного исполняемого/бинарного файла, имеющего лишь несколько встроенных модулей. Это несопоставимо с огромной стандартной библиотекой CPython. Однако у MicroPython есть родственный, но отдельный проект micropython-lib, в котором реализованы многие модули из стандартной библиотеки CPython. Некоторые из этих модулей реализованы в самом Python, и их можно использовать на всех портах. Но большая часть этих модулей использует FFI для доступа к функционалу ОС, поэтому их можно использовать только в порте MicroPython Unix (с ограниченной поддержкой на Windows). В отличие от CPython’овской stdlib, модули micropython-lib необходимо устанавливать по отдельности – либо с помощью ручного копирования, либо при помощи upip.
  • REPL. Аббревиатура для «Read, Eval, Print, Loop», что можно перевести как «цикл "чтение-вычисление-вывод"». Это интерактивная командная строка Python, предназначенная для отладки и тестирования маленьких фрагментов кода. У большинства MicroPython-плат REPL доступна на порте UART, доступ к которому, как правило, можно получить через USB-порт на ПК-хосте.
  • UART. Это аббревиатура для «Universal Asynchronous Receiver/Transmitter», что можно перевести как «универсальный асинхронный приемопередатчик». Это периферийный компонент, пересылающий данные при помощи двух контактов (TX и RX). У многих плат имеется как минимум один UART-порт, который можно подключить к USB-порту и использовать как последовательный порт для коммуникации с ПК-хостом.
  • upip. (Буквально, «микро pip»). Менеджер пакетов для MicroPython, созданный по примеру pip из CPython, но гораздо меньше и с урезанным функционалом. upip можно запустить и на Unix-порте, и на портах для «голого железа», где есть файловая система и функционал для работы с сетью.

См.также

Внешние ссылки