Espruino

Espruino — экосистема программирования микроконтроллеров на языке JavaScript. В нее входят:

  • прошивка для микроконтроллера с интерпретатором JavaScript;
  • среда разработки Espruino Web IDE;
  • платы Espruino и совместимые с ними устройства.

Официальный сайт платформы — http://www.espruino.com/.

История

Основатель и идеолог проекта Гордон Вильямс выпустил первую Espruino в 2013 году. Платформа быстро завоевала популярность, в том числе благодаря кампании на Kickstarter.

Название Espruino пародирует Arduino, самую известную на тот момент хобби-платформу, но Espruino не совместима с классической Arduino Uno ни механически, ни программно. Общая черта — архитектура стандартной библиотеки Espruino, в которой функция работы с пинами похожа на библиотеку Arduino. Благодаря этому разобраться с новой платформой тем, кто знаком с Arduino не составляет труда.

Составляющие проекта Espruino опубликованы в открытом доступе по лицензии MPL.

Роль Амперки

Мы использовали свободную лицензию и улучшили экосистему:

  • Выпустили плату Iskra JS, которая работает на ядре Espruino и механически совместима с Arduino. Это позволяет использовать платы расширения для Arduino.
  • Сделали форк среды Espruino Web IDE под названием Iskra IDE, куда вносим улучшения и отправляем патчи обратно, в основную ветку. Так мы добавили поддержку кириллицы (юникода), сделали автосохранение кода в флеш-памяти при загрузке.
  • Возвели идею о библиотеках в абсолют. У каждого периферийного модуля и компонента свой модуль-библиотека с интуитивно понятными методами и объектами. Разрабатывать устройства можно быстрей и проще.

Отличия JavaScript от стандарта

По большей части интерпретатор Espruino следует стандарту языка. Однако, есть ряд нюансов:

  • Точки с запятыми не расставляются автоматически на месте переноса строк.
  • Отсутствуют метки для инструкций break.
  • Отсутствуют регулярные выражения.
  • Символы строк хранятся в кодировке UTF-8, поэтому символы вне ASCII-диапазона занимают по 2 байта: "SWD".length === 3; "ЫЙЦ".length === 6; "SWЙ".length === 4;

Встроенные объекты JavaScript следуют стандарту ECMA Script 5, но некоторые функции не реализованы из соображений экономии памяти. Также как и в браузере, проблема решается с помощью полифиллов: добавлением реализации нужных функций «на лету».