
Python, подібно до BASIC, став першою мовою програмування для цілого покоління розробників. Його головна перевага — швидкість та простота написання коду. Проте, як і BASIC, Python є інтерпретованою мовою, що призводить до відносно повільного виконання.
Таким чином, хоча CircuitPython є надзвичайно корисним для новачків та швидких проєктів, він значно швидше досягає апаратних обмежень. Ситуацію можна виправити, попередньо скомпілювавши критичні частини коду. Це стало можливим завдяки CircuitPython Turbo від Mikey Sklar за сприяння Claude LLM від Anthropic.
Якщо це звучить подібно до компілятора машинного коду “Viper” від MicroPython, то це так і є. CircuitPython є форком MicroPython з додатковими зручними функціями для плат Adafruit, але Viper додався лише нещодавно. До появи версії Turbo, CircuitPython працював виключно в інтерпретованому режимі.
Як і в MicroPython, використовуючи CircuitPython Turbo, можна позначити секції коду для виконання в “native” режимі. У цьому разі інструкції компілюються, але значення залишаються у вигляді Python-об’єктів, що забезпечує приблизно 3-кратне прискорення. З невеликими змінами в оголошенні змінних та вказівників можна використовувати режим “viper”, який може забезпечити прискорення від 20 до 70 разів, залежно від завдання. Документація Adafruit демонструє, як Metro RP2040 обчислює множину Мандельброта в 3 рази швидше в Native режимі та в 19,7 рази швидше з Viper порівняно зі звичайним Python байт-кодом.
Єдине, чого не вистачає з часів BASIC, і що CircuitPython Turbo не надає, — це вбудований асемблер. Цікаво, що ця функція присутня в основній реалізації MicroPython, тож, можливо, її день настане і тут. Не всі завдання підходять для використання Python на мікроконтролерах, але бачили приклади використання від електровелосипедів до музичного плеєра в стилі Winamp.

deshipu: Це приблизно настільки ж інтерпретовано, як Java та C#. Будь ласка, не застосовуйте хибну дихотомію Остерхаута до сучасних мов програмування, це тут не працює.
Weasel: Вставте мем “подивіться, що їм потрібно, щоб наслідувати хоча б частку нашої сили” з C-програмістами.
jpa: Цікаво, чому CircuitPython досі існує. Незначні відмінності (автозапуск, деякі бібліотеки) здаються такими, що могли б бути просто доповненнями до звичайного MicroPython.
KDawg: Тому що, якщо дотримуватися правил, 7-річна дитина може завершити проєкт значно раніше, ніж дізнається, що MicroPython — це доволі клопітно.
douyarou: лол, як і всі в групі модераторів форуму Python.
Trent: Я намагався використовувати Viper для проєкту. Я створив власний протокол стиснення для сенсорних даних. Я без проблем написав код на звичайному Python та на C. Але Viper — це надзвичайно обмежена версія Python, де немає навіть масивів. Все є арифметикою вказівників. Але такі речі, як просування цілих чисел, приведення типів, типи вказівників тощо, працюють не дуже добре. Це більше схоже на обмежену та складну у використанні версію C, ніж на Python. І оскільки я можу викликати звичайну просту версію C з micropython, я просто зробив це. І це швидше.
