The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Выпуск Rust 1.96. Оценка пригодности Rust для создания прошивок к микроконтроллерам"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск Rust 1.96. Оценка пригодности Rust для создания прошивок к микроконтроллерам"  +/
Сообщение от opennews (??), 29-Май-26, 20:23 
Опубликован релиз языка программирования  Rust 1.96, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки)...

Подробнее: https://www.opennet.ru/opennews/art.shtml?num=65574

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Аноним (1), 29-Май-26, 20:23   +/
>для микроконтроллеров STM32U585AI

https://www.st.com/en/microcontrollers-microprocessors/stm32...
Интересный эксперимент.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #9

2. Сообщение от Аноним (2), 29-Май-26, 20:33   –3 +/
Лучше производность, быстрее код писать, меньше оперативной памяти нужно и чуть больше места занимает.

Выбор очевиден.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #4, #6, #15, #40, #49

3. Сообщение от НяшМяш (ok), 29-Май-26, 20:33   +4 +/
Под микроконтроллер в 160 мегагерц можно было хоть на бидоне писать, в чём смысл делать какие-то сравнения под эту лошадь. Сообщество на тот же 16-мегагерцовый nRF51 на embassy фигачит со свистом уже много лет, открыли они Америку.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #5, #7

4. Сообщение от Аноним (4), 29-Май-26, 20:49   +5 +/
Выбираю SPARK.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

5. Сообщение от Аноним (5), 29-Май-26, 20:54   +1 +/
Во, точняк! Раст -- низкоуровневый питон!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #14

6. Сообщение от Аноним (6), 29-Май-26, 21:00   +/
Быстрее код писать, воюя с чекером боровов? Ах да, для микроконтроллеров же - сплошной @unsafe.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2

7. Сообщение от Аноним (1), 29-Май-26, 21:05   +/
Ну они для себя же делали опыт, что и описано в посте, значит им нужнее.
Да и остальные языки никуда не деваются:
https://opennet.ru/64135-github
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

8. Сообщение от Аноним (6), 29-Май-26, 21:05   +5 +/
Что-то мне кажется, что если для микроконтроллеров писать на Algol68 с POSIX-расширениями (ga68), то тоже производительность будет не сильно отличаться.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #20

9. Сообщение от Аноним (9), 29-Май-26, 21:06   +1 +/
Интересно, во сколько раз при этом будет больше ошибок, чем в uutils?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1 Ответы: #60

10. Сообщение от Аноним (15), 29-Май-26, 21:07   +2 +/
В эмбедном байтодрочестве rust равных нет уже за счёт упаковки структур и нишевой оптимизации. А так-то без экспериментов было понятно что как минимум если писать на нём в C/плюсовом стиле, то и результаты будут примерно такими же. Вот было бы гораздо интереснее сравнить rust с C/плюсовым стилем и идиоматический rust с Option, Result, итераторами, монадическими конструкциями, лямбдами и трейтами, а желательно с ещё более высокоуровневыми штуками типа разбора протоколов через serde или хотя бы nom.

Пока мой опыт в портировании сишного кода, правда не для эмбеддовки, но как раз разбор строк и протоколов и прочее битодрочество показывает что получается в 3 раза меньше (исходного) кода и он намного понятнее, и работает это быстрее (и юнит тесты рядом с кодом очень удобная штука), но на размер машинного кода я не смотрел. А давний опыт в эмбеддовке (AVR) показал что на полноценном C++ со всякими `unique_ptr`, `<algorithm>` и повсеместными шаблонами (когда разные реализации таймеров и экранчиков прокидываются как шаблонные аргументы, реализация I2C мокается для тестов и т.д.) получает прошивки компактнее дубового сишного кода, после чего про C в нашеё команде вообще забыли.

Вот на rust такое будет ещё проще и там где в плюсах ещё был возможен какой-то оверхед, то гарантированно без него, но хочется чтобы это красиво показали. Потому что кто-то, как даже в новости написано, до сих пор пишет эмбеддовку на C!

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #12, #18, #28

12. Сообщение от Аноним (12), 29-Май-26, 21:14   +1 +/
Ничего интересного в этом нет. Вопрос применения раста в плоскости практического применения вообще не лежит.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #16, #29

14. Сообщение от Аноним (14), 29-Май-26, 21:19   –2 +/
Низкоуровневый питон называется forth. Это низкоуровневый сишарп.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #5

15. Сообщение от Аноним (15), 29-Май-26, 21:24   +4 +/
> Быстрее код писать, воюя с чекером боровов?

Завязывайте позориться. Если у вас проблемы с БЧ при написании кода, значит вы не понимаете сколько у вас живут объекты и плодите UB, на сях с такой квалификацией вы будете вместо "войны с БЧ" который вас тыкает в проблему ещё до того как вы даже код собрали, сидеть неделями в отладчике.

> Ах да, для микроконтроллеров же - сплошной @unsafe

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #31

16. Сообщение от Аноним (15), 29-Май-26, 21:25   –2 +/
Какой интересный тейк. Даже интересно в какой плоскости лежит вопрос применения если не в плоскости применения.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12 Ответы: #19

18. Сообщение от Сладкая булочка (?), 29-Май-26, 21:32   +3 +/
> (и юнит тесты рядом с кодом очень удобная штука)

В си никто не мешает положить тесты рядом с кодом.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #22

19. Сообщение от анонимс (?), 29-Май-26, 21:36   +/
Идеологическом. Rust компилируется LLVM написанным на C++ бэкэндом rustc так что машинный код совершенно одинаков
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16 Ответы: #21

20. Сообщение от Аноним (15), 29-Май-26, 21:44   +1 +/
Это скорее правда. Под железо без изысков (типа всяких SIMD) компилировать чистую математику (а что ещё в эмбеддовке может быть CPU-bound) компиляторы давно уже научились, и язык тут можно вообще любой взять. Если у него конечно бэкенд gcc/llvm, а не самодельное музейное гoвнo из прошлого века.

Сейчас скорее интересно другое, а именно возможность написать взрослый асинхронный код типа

```rust
task::spawn(async ||
    loop {
        button.await;
        i2c.send(0x12, b"button pressed").await.unwrap();
    }
);
```

и чтобы он скомпилился в те же 276 байт которые я напишу на ассемблере с ручным диспатчем прерываний и конечным автоматом для состояний. Хотя даже тут интерес уже даже не практический, а фановый, поскольку нет давно железа где было бы принципиально скомпилится это в 276 или 27600 байт.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #27, #47

21. Сообщение от Аноним (15), 29-Май-26, 21:48   +/
Машинный код одинаков только если писать на общем подмножестве двух языков, на нахрена это кому-то нужно? На rust можно писать на порядок выразительнее, и ответ на вопрос будет ли полученный код компактнее и быстрее не для всех очевиден, а даже без учёта этого, вопросы компайл-тайм проверок и более качественного тулинга - сугубо практические.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #41

22. Сообщение от Аноним (15), 29-Май-26, 21:53   –2 +/
Тесты рядом с кодом это, если что так и ни строчкой больше, даже если это первый тест в проекте:

```
fn inc(a: u32) -> u32 {
     a + 1
}

+#[test]
+fn test_inc() {
+    assert_eq!(inc(1), 2);
+}
```

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #18 Ответы: #26

23. Сообщение от Аноним (15), 29-Май-26, 21:57   +4 +/
Жаль про размер исходников ничего не сказано.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #25, #64

25. Сообщение от Аноним (25), 29-Май-26, 22:07   +/
А может и сказано...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #55

26. Сообщение от Аноним (9), 29-Май-26, 22:34   +/
И что тут такого особенного, чего не было нигде в других языках?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22 Ответы: #54

27. Сообщение от Аноним (9), 29-Май-26, 22:38   +/
> скомпилится это в 276 или 27600 байт

Вся суть растерманов.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20 Ответы: #32

28. Сообщение от Аноним83 (?), 29-Май-26, 22:44   +1 +/
> писать на нём в C/плюсовом стиле, то и результаты будут примерно такими же. Вот было бы гораздо интереснее сравнить rust с C/плюсовым стилем и идиоматический rust с Option, Result, итераторами, монадическими конструкциями, лямбдами и трейтами, а желательно с ещё более высокоуровневыми штуками типа разбора протоколов через serde или хотя бы nom.

Столько буков и ни слова о конечном результате, только какие то бесполезные языковые абстракции.


> А давний опыт в эмбеддовке (AVR) показал что на полноценном C++ со всякими `unique_ptr`, `<algorithm>` и повсеместными шаблонами (когда разные реализации таймеров и экранчиков прокидываются как шаблонные аргументы, реализация I2C мокается для тестов и т.д.) получает прошивки компактнее дубового сишного кода, после чего про C в нашеё команде вообще забыли.

Потому что видимо на С не пробовали даже делать плагины и абстракции, как оно сделано в том же линухе/бсд в дровах для всего того же самого.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10 Ответы: #58

29. Сообщение от Аноним (1), 29-Май-26, 23:10   +/
>практического применения

https://github.com/discord

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

31. Сообщение от Аноним (31), 29-Май-26, 23:18    Скрыто ботом-модератором+2 +/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

32. Сообщение от Аноним (31), 29-Май-26, 23:20   +/
А в чем суть? Или пока сам не понял?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #27

33. Сообщение от Аноним (33), 29-Май-26, 23:22   +1 +/
Нашел! Я нашел! https://github.com/FluxSysLang/Flux
Ответить | Правка | Наверх | Cообщить модератору

35. Сообщение от localhostadmin (ok), 30-Май-26, 00:06   +/
Сейчас далеко не под все контроллеры можно сишный код собрать. Поэтому я слабо представляю, как в такую нишу ещё и раст запихнуть можно
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #37

36. Сообщение от Аноним (37), 30-Май-26, 00:07   +4 +/
"Тестирование выполненной работы не выявило заметных преимуществ в использовании языка Rust вместо C"

Поправил

Ответить | Правка | Наверх | Cообщить модератору

37. Сообщение от Аноним (37), 30-Май-26, 00:09   +5 +/
Если в микроконтроллер залазит Rust, то это уже не микроконтроллер.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #46

38. Сообщение от Аноним (37), 30-Май-26, 00:16   +3 +/
>В пакетном менеджере Cargo устранена уязвимость

С каждой новой версией Rust всё усложняется, расширяется, а значит программирование на нём становится менее надёжным.
А Cи остаётся таким же простым.

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #52

39. Сообщение от Аноним (39), 30-Май-26, 00:27   +2 +/
Авторы исследования забыли указать, что сишники в эмбедовке разбираются в шинах данных, iommu, dma и тд. А эти на расте ни в чем не разбираются. Так что все-таки сишка под МК лучше уже хотя бы поэтому.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #43, #56, #57

40. Сообщение от Аноним (40), 30-Май-26, 00:54   +/
Ну тогда Паскаль лучше обоих)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #42

41. Сообщение от Аноним (40), 30-Май-26, 01:00   +/
> На rust можно писать на порядок выразительнее

Тогда вы выбрали не тот язык. На порядок выразительнее писать на языке из 2000ых (а автор раста начал разрабатывать его в начале 2000ых) с синтаксисом из языков 80ых (для сравнение python это начало 90ых) вряд ли получится.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #21 Ответы: #53

42. Сообщение от Я (??), 30-Май-26, 01:04   –1 +/
Паскаль - это вообще дно днищенское.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #40

43. Сообщение от Я (??), 30-Май-26, 01:06   +2 +/
Плюс на Си куча отлаженного и переносимого кода под любую платформу.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39

44. Сообщение от Аноним (44), 30-Май-26, 01:08   +2 +/
У меня совершенно другой вопрос соберется ли этот же код на расте спустя года 3... У раста до сих пор нет стейбл версии и на обратную совместимость они тоже положили, так что такое.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #50

45. Сообщение от Аноним (44), 30-Май-26, 01:10   +2 +/
Одного не пойму, зачем изобретать новый яп, привинтите к си все те же безопасные указатели да проверки....
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #48, #51

46. Сообщение от Аноним (59), 30-Май-26, 01:50   +/
Машкод на Rust весит примерно столько же сколько аналогичный код на C. Можно было бы и под AVR'ки писать, но вроде поддержки в llvm нет. Но в любом случае AVR'ки уже отмерли, микроконтроллеры сейчас поголовно такие что туда и микропитон влезет, но rust и приятнее, и эффективнее.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #63

47. Сообщение от anonymous (??), 30-Май-26, 01:52   +/
Особенно будет весело, когда ваш раст захочет сделать прерывание (для await) в контексте с заблокированными перываниями...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #20 Ответы: #59

48. Сообщение от Аноним (59), 30-Май-26, 01:53   +/
Чтобы это понять, надо программировать, а если вы не программируете, вам зачем это понимание?

> привинтите к си все те же безопасные указатели да проверки

Да, ещё лайфтаймы, БЧ, нормальную систему типов, экосистему, тулинг. Собственно Rust и получится. Ну или zig, если вам он ближе, правда в нём ничего этого нет и он экспериментальная поделка. В любом случае, без нового языка программирования не обойтись.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45

49. Сообщение от Аноним (49), 30-Май-26, 01:54   +/
> Лучше производность

Предпочитаю интегральность.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #61

50. Сообщение от Аноним (59), 30-Май-26, 01:56   –1 +/
Пару месяцев назад я столкнулся с кодом написанным во времена rust 1.0x, он вполне себе собирается. Собственно со стабильностью там всё в порядке.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #44

51. Сообщение от anonymous (??), 30-Май-26, 01:57    Скрыто ботом-модератором+/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #45

52. Сообщение от Аноним (1), 30-Май-26, 01:58    Скрыто ботом-модератором–1 +/
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #38

53. Сообщение от Аноним (59), 30-Май-26, 02:07   +/
А при чём тут синтаксис? Он сейчас вообще во всех языках, и новых, и старых, одинаковый, кроме питона. А выразительность в основном из стандартной библиотеки идёт, например чтобы вместо

```c
bool found = false;
for (size_t i = 0; i < sizeof(haystack); i++) {
    if (strcmp(haystack[i].field, needle) == 0) {
        found = true;
        break;
    }
}
if (found) {}
```

писать

```rust
if haystack.iter().any(|elt| elt.field == needle) {}
``

ну и интересно посмотреть на "современные" языки значимо выразительнее rust.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

54. Сообщение от Аноним (59), 30-Май-26, 02:07   +/
Здесь вообще ничего особенного, но сделай это на C/C++.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26 Ответы: #62

55. Сообщение от Аноним (59), 30-Май-26, 02:08   +/
Я читал пейпер, нет - не сказано.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #25

56. Сообщение от Аноним (59), 30-Май-26, 02:10   –1 +/
> Авторы исследования забыли указать

Как раз не забыли, там сказано что была команда C имела большой опыт в C, а команда Rust опыта в Rust имела сильно меньше, и, тем не менее, справилась на отлично.

> сишники в эмбедовке разбираются в шинах данных, iommu, dma

Нет, не сишники, а эмбеддовщики. Знания о том как работает железо от языка не зависят и применяются одинаково в любом языке.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39

57. Сообщение от Аноним (57), 30-Май-26, 02:11   +/
С сишниками в эмбеддовке и везде проблема в том, что они в Си не разбираются. Не могут написать код без UB, а чаще и не хотят.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39

58. Сообщение от Аноним (59), 30-Май-26, 02:21   +/
> Столько буков и ни слова о конечном результате

О конечном результате сказано - в 3 раза меньше кода, он гораздо более понятен и застрахован от нескольких классов распространённых ошибок.

> только какие то бесполезные языковые абстракции.

Выше есть пример кода с сишным циклом против `Iterator::any`. Не, я прекрасно понимаю что вы не программируете и для вас все эти слова это просто буквы, только зачем вы в обсуждение ЯП влезаете?

> Потому что видимо на С не пробовали даже делать плагины и абстракции, как оно сделано в том же линухе/бсд в дровах для всего того же самого.

О да, vtable руками, миксины на макросах и обработку ошибок на goto, а также плагины для дров FreeBSD мы действительно не писали.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #28

59. Сообщение от Аноним (59), 30-Май-26, 02:26   +/
Лол, для await не нужны прерывания, это просто сахар для построения конечного автомата из понятного линейного кода. Никакой магии там нет, равно как и никаких "rust захочет", можно всё то же что и в C, только это делается одной строкой, а не kloc'ами лапшеобразного бойлерплейта.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47

60. Сообщение от 12yoexpert (ok), 30-Май-26, 02:42   +/
во все
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9

61. Сообщение от 12yoexpert (ok), 30-Май-26, 02:43   +/
я за интрегальность
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #49

62. Сообщение от 12yoexpert (ok), 30-Май-26, 02:46   +/
написать бессмысленный комментарий?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #54

63. Сообщение от 12yoexpert (ok), 30-Май-26, 02:48   –1 +/
первое предложение - ложь, дальше не читал

ты даже примерно не представляешь, какую чушь несёшь, и ты никогда не писал под микроконтроллеры

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #46

64. Сообщение от Nameh (?), 30-Май-26, 03:22   +/
Сахар и выразительность будет в приоритете обьема байт.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2026 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру