Systèmes & Embarqué10 min de lecture

Rust pour le firmware embarqué : pourquoi on a quitté le C++

Après 8 ans de C++ embarqué, on a migré nos projets firmware vers Rust. Les raisons, les difficultés, et ce qu'on ne regrette pas.

C++ embarqué : 8 ans de prod, 8 ans de valgrind

Le C++ est un excellent langage. C'est aussi une source inépuisable de bugs mémoire en production. Sur un système embarqué critique — contrôleur industriel, IoT médical — un undefined behavior peut coûter très cher.

Ce qui nous a convaincus d'essayer Rust

La promesse du compilateur Rust : si ça compile, pas de data races, pas de dangling pointers. On était sceptiques — jusqu'au premier projet de test sur un microcontrôleur STM32.

Les vraies difficultés de la migration

Le borrow checker est déroutant les premières semaines. Pas parce qu'il a tort — mais parce qu'il force à repenser des patterns C++ qu'on utilisait depuis des années sans questionner. La courbe d'apprentissage est réelle.

L'écosystème embedded-hal et embassy est encore jeune comparé au C++. Certains drivers HAL manquent, certains crates sont en alpha.

Ce qu'on ne regrette pas

Les segfaults ont disparu. Le code est plus lisible. Et l'async embarqué avec Embassy est une révélation — écrire du code concurrent sur microcontrôleur sans RTOS, c'est une rupture majeure par rapport au C++ classique.