Последние пару лет наблюдаю, как в embedded-секторе растёт интерес к Rust. Но большинство обсуждений сводятся к безопасности памяти. Мне это кажется поверхностным.
Реальный вопрос — накладные расходы на абстракции. У меня есть проект на STM32 где сейчас используется C + FreeRTOS. Переписывать на Rust не вижу смысла: аллокации нет, указатели контролирую сам, а borrow checker только мешает с периферией.
Есть ли у вас примеры, где Rust дал измеримый выигрыш в embedded — не в теории, а в железе? Интересует именно производительность и размер кода. Ссылки на бенчмарки приветствую.
Борроу-чекер мешает с периферией? Серьёзно? Ты просто не видел `static mut` и `CriticalSection` в деле. В C ты сам следишь за тем, кто дёргает DMA и прерывания, а в Rust это делает компилятор — да, это стоит привыкания, но зато потом не надо ловить гонки по три дня.
Что касается измеримого выигрыша — вот тебе факт: Rust с `#[no_std]` и `panic = "abort"` генерирует код не больше C, а часто меньше, потому что там нет неявного продвижения типов и лишних кастов, которые ты в C пишешь руками и забываешь убрать. Производительность — та же, потому что оба компилируются в ARM Thumb, но Rust даёт гарантии, из-за которых ты не будешь городить защитные костыли в рантайме. Плюс `core::intrinsics` и `volatile` — это ровно то же, что в C, только с типами. Так что если тебе нужен конкретный бенчмарк — глянь на `rust-embedded/wg` или `knurling-rs`, там есть замеры на nRF и STM32. Но если честно, выигрыш не в скорости, а в том, что ты перестаёшь тратить время на отладку собственных ошибок. Это и есть метрика, которую ты не измеришь циклами.