Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Foundry: Ruby для микроконтроллеров

Foundry: Ruby для микроконтроллеров

Foundry - компилятор Ruby для встраиваемых устройств: "умных" термостатов, узлов Internet of Things, Arduino или квадрокоптеров. Хватит писать на Си! Современный объектно-ориентированный язык с блоками и метапрограммированием может быть эффективным.

Peter Zotov

April 13, 2013
Tweet

More Decks by Peter Zotov

Other Decks in Programming

Transcript

  1. Петр Зотов whitequark.org, github.com/whitequark PICOBIT для STM32, gem parser, gem

    ast, gem ruby-llvm, gem furnace, gem furnace-avm2, LLVM contributor, stlink gdbserver
  2. Где используются? Всевозможные бытовые устройства В автомобиле — до 80

    модулей В смартфонах и ноутбуках как вспомогательные модули Билеты, ключи
  3. Где деньги в embedded? Только 2010, только ARM: 6.1 млрд

    устройств Только 2011, только контроллеры (не готовые устройства), ARM: $ 32 млрд
  4. Ограничения, ограничения Rasberry Pi, Arduino: любительская микроэлектроника Простые, надежные, ограниченные

    по памяти (десятки Кб) Способность загрузить Linux — исключение, а не правило
  5. Требования Проще контроллер — меньше стоимость Меньше требования к другим

    частям — опять же, меньше стоимость Энергопотребление: беспроводные датчики должны работать годами Кастомизация контроллеров под задачи
  6. Существующие решения Си. Иногда — ассемблер. Разработка: долго и дорого.

    Тесты очень важны, но тестировать сложно. Попытки: mruby, espruino, uJ, megapython, pymite, ... Отдельно про mruby.
  7. Что не так с альтернативой Виртуальная машина Нет низкоуровневых операций

    Разработчику все равно нужно знать внутренности VM, Си и ассемблер. Большая часть не работает в реальном времени.
  8. Си: 1973 Маленький, простой в реализации компилятор Легко портировать на

    другие платформы Нет: замыканий, метапрограммирования, ООП, GC, модулей, стандартных способов сборки и тестирования...
  9. Си: 2013 GCC 4.8: 2000 KLOC (C/C++) / 7300 KLOC

    LLVM+Clang 3.3: 780 KLOC Портирование: новый бекенд для существующего компилятора Всё еще нет: замыканий, метапрограммирования, ООП, GC, модулей, стандартных способов сборки и тестирования... (C++11: ООП, smart pointers, замыкания)
  10. Код для встраиваемых устройств Низкоуровневая часть: RTOS, настройка периферии, ввод-вывод

    Высокоуровневая часть: логика работы устройства Эффективная оптимизация: вся программа целиком
  11. Foundry Статически компилируемый диалект языка Ruby Область применения — системное

    программирование, встраиваемые устройства Компилируется в машинный код Можно использовать большинство высокоуровневых конструкций Ruby Не нужно писать на Си или ассемблере
  12. Как работает компилятор Исходник → виртуальная машина → оптимизатор Foundry

    → оптимизатор LLVM → машинный код Foundry: семантика Ruby LLVM: семантика целевого процессора
  13. Embedded-разработка с Foundry Компилятор — важно, но board support packages

    еще важнее Cortex-M0/M3/M4; STM32F/STM32V Maple Leaf, STM32VLDISCOVERY, etc.
  14. Embedded-разработка с Foundry Язык и компилятор не ограничивают программиста, а

    помогают ему Стандартная библиотека Foundry написана полностью на Foundry Покрывает стандартные задачи: работа со строками, fixed point вычисления, TCP/IP, ...
  15. Embedded-разработка с Foundry Тестирование, тестирование, тестирование Foundry может выполнять код

    на хосте, симулируя семантику цели Метапрограммирование упрощает замену периферии на mock-объекты
  16. Embedded-разработка с Foundry Абстракции полезны, если упрощают и ускоряют разрабоку

    Foundry позволяет, но не требует использование абстракций Можно: работать напрямую с периферией, использовать ручное управление памятью, делать ассемблерные вставки, ...
  17. Foundry как продукт Коммерческий компилятор с open source частями Кроссплатформенный,

    работает на JRuby+FFI+LLVM Первый релиз — лето 2013 Early adopters are welcome! http://foundry-lang.org/