Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

Петр Зотов whitequark.org, github.com/whitequark PICOBIT для STM32, gem parser, gem ast, gem ruby-llvm, gem furnace, gem furnace-avm2, LLVM contributor, stlink gdbserver

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

No content

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

Определение эмбеддед-устройств Часть более крупной системы Должно выполнять единственную задачу Центральная часть — микропроцессор

Slide 9

Slide 9 text

Где используются? Всевозможные бытовые устройства В автомобиле — до 80 модулей В смартфонах и ноутбуках как вспомогательные модули Билеты, ключи

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Наша предметная область Internet of Things Nest Thingsquare Mist HarvestGeek, PlantLink Hue, LIFX SmartThings Умный дом

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

Ограничения, ограничения Rasberry Pi, Arduino: любительская микроэлектроника Простые, надежные, ограниченные по памяти (десятки Кб) Способность загрузить Linux — исключение, а не правило

Slide 15

Slide 15 text

Требования Проще контроллер — меньше стоимость Меньше требования к другим частям — опять же, меньше стоимость Энергопотребление: беспроводные датчики должны работать годами Кастомизация контроллеров под задачи

Slide 16

Slide 16 text

Существующие решения Си. Иногда — ассемблер. Разработка: долго и дорого. Тесты очень важны, но тестировать сложно. Попытки: mruby, espruino, uJ, megapython, pymite, ... Отдельно про mruby.

Slide 17

Slide 17 text

Что не так с альтернативой Виртуальная машина Нет низкоуровневых операций Разработчику все равно нужно знать внутренности VM, Си и ассемблер. Большая часть не работает в реальном времени.

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

Си: 2013 GCC 4.8: 2000 KLOC (C/C++) / 7300 KLOC LLVM+Clang 3.3: 780 KLOC Портирование: новый бекенд для существующего компилятора Всё еще нет: замыканий, метапрограммирования, ООП, GC, модулей, стандартных способов сборки и тестирования... (C++11: ООП, smart pointers, замыкания)

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

Как компилировать Ruby Статическая типизация Автоматический вывод большинства типов

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

Как работает компилятор Исходник → виртуальная машина → оптимизатор Foundry → оптимизатор LLVM → машинный код Foundry: семантика Ruby LLVM: семантика целевого процессора

Slide 28

Slide 28 text

Embedded-разработка с Foundry Компилятор — важно, но board support packages еще важнее Cortex-M0/M3/M4; STM32F/STM32V Maple Leaf, STM32VLDISCOVERY, etc.

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

Embedded-разработка с Foundry Тестирование, тестирование, тестирование Foundry может выполнять код на хосте, симулируя семантику цели Метапрограммирование упрощает замену периферии на mock-объекты

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

Foundry как продукт Коммерческий компилятор с open source частями Кроссплатформенный, работает на JRuby+FFI+LLVM Первый релиз — лето 2013 Early adopters are welcome! http://foundry-lang.org/

Slide 33

Slide 33 text

Что дальше? http://foundry-lang.org — подписывайтесь. [email protected] Github: whitequark/parser, /ast, /picobit, /furnace, /furnace-avm2 ruby-llvm/ruby-llvm

Slide 34

Slide 34 text

Вопросы? [email protected] http://foundry-lang.org