цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Язык программирования Rust подходит для встраиваемых систем и робототехники

Язык программирования Rust подходит для встраиваемых систем и робототехники

Автор: Mike(admin) от 5-03-2019, 07:55

Rust – довольно современный язык программирования, он был впервые анонсирован Mozilla в 2010 году, но начал создаваться Грейдоном Хоаром в 2006 году. Он позволил создать невероятно быстрый веб-браузер Firefox Quantum. За последние несколько лет он приобрел большую популярность по многим очень веским причинам, и особенно для робототехники.


Язык программирования Rust подходит для встраиваемых систем и робототехники

Rust сочетает в себе преимущества низкоуровневых языков, таких как C и C++ (в основном они работают очень быстро, с очень малой занимаемой памятью) но с гораздо большими гарантиями и надежностью, которые обычно можно ожидать от языков более высокого уровня. Это предотвращает ошибки сегментации и гарантирует безопасность. И Rust особенно хорош в том, что он обеспечивает и безопасность и абстракцию без дополнительных затрат во время выполнения.


По этим причинам многие разработчик сегодня считают, что Rust – это будущее встраиваемых систем и робототехники, поскольку он позволяет разработчикам быть бесстрашными в написании кода, создавать и применять стандарты, а также образовывать сильное сообщество и полагаться на него. Ниже мы объясним, почему, но сначала давайте напомним, что сложного во встроенном программном обеспечении для электронных систем и робототехники сегодня.


Две основные проблемы оказались сложными для программного обеспечения встраиваемых систем. Первая состоит в том, что безопасный код писать крайне сложно. Использование памяти в C и C++ небезопасно и подвержено человеческим ошибкам. Многие ошибки связаны с переполнением буфера, повреждением данных или чтением/записью в нераспределенной памяти. Не только их очень трудно обнаружить и отладить, но многие атаки и вирусы используют это в своих интересах. Чем сложнее становится ваш проект, тем сложнее его поддерживать. Программисты встраиваемых систем боятся добавлять дополнительные функции, потому что это может сломать все.


Вторая проблема состоит в том, что практически невозможно достичь параллелизма во встроенном программном обеспечении, если идти дальше, чем в случае с разработкой какой-нибудь несложной электронной игрушки. Состояние гонки, тупик распределения данных, повреждение данных могут привести к сложным для отладки ошибкам. Особенно во встраиваемых системах, где среда разработки не настолько развита, как в мире ОС для ПК. Отладка аппаратного прерывания пугает даже более смелых разработчиков встраиваемых систем.


Помимо этих технических аспектов, сегодня также не хватает стандартизации и кода многократного использования, особенно в робототехнике. Конечно, где-то в Интернете есть пример кода практически для всего, что вы хотите сделать. Но не факт, что это будет хорошо работать в конкретном случае и еще в совокупности с другим кодом. В результате разработчики сегодня проводят большую часть своего времени, связывая чужой код со своим собственным, если не полностью его перекодируя. Много времени тратится впустую. И много нарушений безопасности в этом случае можно наблюдать. Но Rust может решить все эти проблемы и многое другое.


Если код на Rust компилируется, то это означает, что он уже безопасен. Это огромное облегчение для программирования встраиваемых систем. Как Rust делает это? Одним из важных принципов, используемых Rust, является понятие «владение». Владение отслеживает и гарантирует, что каждая переменная имеет только одного владельца за раз, и, если владелец выходит из области действия, значение отбрасывается. Этот принцип настолько силен, что решает сразу две важные проблемы: безопасность памяти (Rust не допускает нулевых или висячих указателей, также нет сборщика мусора, обеспечивающего предсказуемое поведение кода) и безболезненный параллелизм (с такой концепцией, как заимствование, Rust может отслеживать, существует ли риск гонки данных, и просто тогда не будет компилироваться).


Но какой ценой достигается это? Ну, почти нулевой. Есть в Rust понятие «абстракция с нулевой стоимостью». Эта абстракция в области компьютерных наук была изобретена не без причины. Джон В. Гуттаг определил ее довольно красиво: «Суть абстракций заключается в сохранении информации, которая имеет отношение к данному контексту, и забывания информации, которая не имеет отношения к этому контексту». Вот почему были изобретены языки более высокого уровня, такие как Python. Но Python поставляется с большим количеством служебных данных, которые трудно отследить, например, сборщик мусора, проверка указателя во время выполнения и т. д. Но встраиваемые системы часто обрабатывают критические приложения, когда требуется время выполнения в худшем случае. Подумайте о тормозах с цифровым управлением. Как вы уже догадались, Rust позволяет абстрагироваться без накладных расходов. Большинство проверок выполняется при компиляции, поэтому во время выполнения не требуется никаких дополнительных вычислений.


Rust также предоставляет современный синтаксис, точные сообщения об ошибках, безболезненную упаковку и управление зависимостями. Rust поставляется с одним из лучших менеджеров пакетов, который называется Cargo. А для встраиваемого программирования есть Xargo.


Для встраиваемых систем также были разработаны специальные инструменты.Первое – это периферийное управление. Существует такая вещь, как svd2rust, которая может автоматически генерировать Rust API для доступа к любой периферии на микроконтроллере, прямо из описания SVD. Rust умный, и он может заставить во время компиляции использовать периферийные устройства, какими они и должны быть. Вы не сможете скомпилировать, если попытаетесь записать данные в регистр только для чтения или выполнить чтение в регистры только для записи. Вы также не можете записать недопустимые битовые комбинации в регистр. SVD может определить диапазон допустимых значений, а Rust не позволит вам выйти за пределы диапазона.


Язык программирования Rust подходит для встраиваемых систем и робототехники

Второе – предотвращение коллизий с ресурсами. В следующей версии разработчики языка представят синглтоны, чтобы Rust знал, когда некоторый код хочет использовать уже используемое периферийное устройство, например, таймер. Это распространенный источник проблем во встраиваемых системах, где ресурсы ограничены, и некоторые устройства могут захотеть их использовать. Это классика с платами Arduino Uno, у которых всего несколько таймеров. Поэтому, когда вы используете библиотеку Servo, вы не можете использовать PWM на контактах 9 и 10. Но код скомпилируется, переместится на плату и будет плохо работать, создавая очень странные поведения, которые крайне трудно отладить. Это смутило многих пользователей Arduino. С помощью синглетонов Rust может сообщить вам во время компиляции без каких-либо накладных расходов во время выполнения, используется уже таймер или еще нет, предотвращая головные боли пользователей. И не беспокойтесь, Rust совместим с C и C++ в обоих направлениях.


Если вы работали или работаете с программированием встраиваемых систем, то наверняка несколько раз решали эти проблемы. Rust возвращает уверенность, как в вашем коде, так и в коде других, который вы, возможно, захотите использовать повторно.


Существует два основных недостатка в совместном использовании и повторном использовании кода для встраиваемых систем. Во-первых, есть какая-то категория вещей, которые все делают, например, считывание аналогового значения, регистрация положения датчика, изменение скорости двигателя или цвета светодиода. Тем не менее, никто не использует один и тот же интерфейс, а две реализации двигателя часто используют разные имена функций и API для одинаковых действий. Это затрудняет написание универсального контроллера двигателя, который работает для обоих двигателей. Во-вторых, мы хотим быть уверенными в том, что правильно повторно используем код других. Мы хотим быть уверены, что это не приведет к появлению новых ошибок, потому что мы используем код в случаях, не протестированных первоначальными разработчиками.


Большинство из этих проблем могут быть преодолены с помощью Rust естественным путем. Из сигнатуры функции вы в значительной степени знаете, что будет делать функция, и вы можете быть уверены, что все переменные полностью объявлены, инициализированы и используются правильно. Если модуль, который вы добавляете, компилируется в вашем проекте, он, скорее всего, ничего не сломает.


Язык программирования Rust подходит для встраиваемых систем и робототехники

Еще одним важным преимуществом Rust является его широкая поддержка и большое сообщество. Rust занял первое место в номинации «самый любимый язык программирования» в опросе разработчиков Stack Overflow в 2016 и 2017 годах. Это не удивительно. Сообщество Rust очень живое и доброжелательное. Большая часть прошлого года была в этом сообществе сосредоточена на снижении кривой обучения для новичков, обеспечении наставничества на всех уровнях и улучшении пользовательского опыта в цикле редактирования, компиляции и отладки.


У Rust комплексная система документации, которая охватывает все стандартные библиотеки и коды ошибок. У сообщества Rust есть кодекс поведения, и каждый год они обобщают достижения сообщества и создают новую дорожную карту с помощью всего сообщества. Они разработали комплексный процесс запроса комментариев (RFC), который постоянно собирает отзывы сообщества о новых разработках и направлениях.


Сообщество вокруг встраиваемых систем на Rust очень активно и растёт, с привлечением очень активных разработчиков и блоггеров, расказывающих о Embedded в Rust. Появляются очень амбициозные проекты, уже обещающие светлое будущее со средами реального времени и защищенной встроенной операционной системой. Даже Android переходит на Rust.


Rust обладает огромным потенциалом для программирования встраиваемых систем и особенно для робототехники. Тем не менее, сообщество разработчиков Rust, несмотря на его активность, все еще мало, и многие вещи по-прежнему отсутствуют, но это временно, поскольку экосистема языка быстро развивается. Так что не бойтесь, создавайте, повторно используйте стандарты и наслаждайтесь помощью сообщества.




© digitrode.ru


Теги: Rust



   Благодарим Вас за интерес к информационному проекту digitrode.ru.
   Если Вы хотите, чтобы интересные и полезные материалы выходили чаще, и было меньше рекламы,
   Вы можее поддержать наш проект, пожертвовав любую сумму на его развитие.


Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий