ruby для встраиваемых устройств / Петр Зотов (evil martians)

34
Foundry Ruby для встраиваемых устройств

Upload: ontico

Post on 05-Jul-2015

577 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

FoundryRuby для встраиваемых устройств

Page 2: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Петр Зотов

whitequark.org, github.com/whitequark

PICOBIT для STM32, gem parser, gem ast, gem ruby-llvm, gem furnace, gem furnace-avm2, LLVM contributor, stlink gdbserver

Page 3: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Демонстрация

Page 4: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Page 5: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)
Page 6: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Ресурсы0 байтов RAM

80 байтов ROM

Page 7: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Что такое «embedded» и зачем это нужно

Page 8: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Определение эмбеддед-устройствЧасть более крупной системы

Должно выполнять единственную задачу

Центральная часть — микропроцессор

Page 9: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Где используются?Всевозможные бытовые устройства

В автомобиле — до 80 модулей

В смартфонах и ноутбуках как вспомогательные модули

Билеты, ключи

Page 10: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Как выглядят?Маленькие: размер, энергопотребление, стоимость

Page 11: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Наша предметная областьInternet of Things

Nest

Thingsquare Mist

HarvestGeek, PlantLink

Hue, LIFX

SmartThings

Page 12: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Где деньги в embedded?Только 2010, только ARM: 6.1 млрд устройств

Только 2011, только контроллеры (не готовые устройства), ARM: $ 32 млрд

Page 13: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Проблемы в embedded-разработке

Page 14: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Ограничения, ограниченияRasberry Pi, Arduino: любительская микроэлектроника

Простые, надежные, ограниченные по памяти (десятки Кб)

Способность загрузить Linux — исключение, а не правило

Page 15: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

ТребованияПроще контроллер — меньше стоимость

Меньше требования к другим частям — опять же, меньше стоимость

Энергопотребление: беспроводные датчики должны работать годами

Кастомизация контроллеров под задачи

Page 16: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Существующие решенияСи. Иногда — ассемблер.

Разработка: долго и дорого. Тесты очень важны, но тестировать сложно.

Попытки:

mruby, espruino, uJ, megapython, pymite, ...

Отдельно про mruby.

Page 17: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Что не так с альтернативойВиртуальная машина

Нет низкоуровневых операций

Разработчику все равно нужно знать внутренности VM, Си и ассемблер.

Большая часть не работает в реальном времени.

Page 18: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Программирование для встраиваемых устройств

Page 19: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Си: 1973Маленький, простой в реализации компилятор

Легко портировать на другие платформы

Нет: замыканий, метапрограммирования, ООП, GC, модулей, стандартных способов сборки и тестирования...

Page 20: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Си: 2013GCC 4.8: 2000 KLOC (C/C++) / 7300 KLOC

LLVM+Clang 3.3: 780 KLOC

Портирование: новый бекенд для существующего компилятора

Всё еще нет: замыканий, метапрограммирования, ООП, GC, модулей, стандартных способов сборки и тестирования...

(C++11: ООП, smart pointers, замыкания)

Page 21: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Код для встраиваемых устройствНизкоуровневая часть: RTOS, настройка периферии, ввод-вывод

Высокоуровневая часть: логика работы устройства

Эффективная оптимизация: вся программа целиком

Page 22: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Давайте писать на Ruby!

Page 23: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

FoundryСтатически компилируемый диалект языка Ruby

Область применения — системное программирование, встраиваемые устройства

Компилируется в машинный код

Можно использовать большинство высокоуровневых конструкций Ruby

Не нужно писать на Си или ассемблере

Page 24: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Как компилировать RubyСтатическая типизация

Автоматический вывод большинства типов

Page 25: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Как компилировать RubyУтиная типизация

Page 26: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Как компилировать RubyПромежуточные массивы, splat

Page 27: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Как работает компиляторИсходник →

виртуальная машина → оптимизатор Foundry → оптимизатор LLVM →

машинный код

Foundry: семантика Ruby

LLVM: семантика целевого процессора

Page 28: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Embedded-разработка с FoundryКомпилятор — важно, но board support packages еще важнее

Cortex-M0/M3/M4; STM32F/STM32V

Maple Leaf, STM32VLDISCOVERY, etc.

Page 29: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Embedded-разработка с FoundryЯзык и компилятор не ограничивают программиста, а помогают ему

Стандартная библиотека Foundry написана полностью на Foundry

Покрывает стандартные задачи: работа со строками, fixed point вычисления, TCP/IP, ...

Page 30: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Embedded-разработка с FoundryТестирование, тестирование, тестирование

Foundry может выполнять код на хосте, симулируя семантику цели

Метапрограммирование упрощает замену периферии на mock-объекты

Page 31: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Embedded-разработка с FoundryАбстракции полезны, если упрощают и ускоряют разрабоку

Foundry позволяет, но не требует использование абстракций

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

Page 32: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Foundry как продуктКоммерческий компилятор с open source частями

Кроссплатформенный, работает на JRuby+FFI+LLVM

Первый релиз — лето 2013

http://foundry-lang.org/

Page 33: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Что дальше?http://foundry-lang.org — подписывайтесь.

[email protected]

Github:

whitequark/parser, /ast, /picobit, /furnace, /furnace-avm2

ruby-llvm/ruby-llvm

Page 34: Ruby для встраиваемых устройств / Петр Зотов (Evil Martians)

Вопросы?

[email protected]://foundry-lang.org