Jestem programistą embedded i miałem 3 podejścia do Rusta (1 hobbystycznie i 2 w firmie). Wszystkie nieudane. Rust ma bardzo ciekawe założenia, które podnoszą niezawodność kodu, bardzo dobrą dokumentację i w bogaty sposób tłumaczy błędy kompilatora. Za te rzeczy programiści go kochają. Ale zdecydowanie brakuje mu początkowej niszy i specjalizacji zastosowania.
Embedded to bardzo szeroka dziedzina. Podzielmy ją więc na mniejsze części:
-
bare metal na niewielkich rdzeniach pokroju ARM M0. Tutaj 30-70% kodu do pisanie po rejestrach MCU, a Rust wymaga by bypassować jego mechanizmy bezpieczeństwa i pożyczania zmiennych. Kod jest dużo bardziej skomplikowany niż w C i nie oferuje dużo więcej. Próg wejścia dla początkujących jest znacznie wyższy niż w C (trzeba rozumieć zaawansowane koncepcje języka Rust tylko po to by je obejść by wpisać pod adres pamięci wartość bez nadzoru...)
-
małe procki z RTOSami (jak ARM M0-M7). W projektach zorientowanych na prędkość developmentu FW używa się gotowych sterowników i RTOSów kosztem zasobów/ceny hardware. Dla Rusta nie istnieją póki co tak rozbudowane i stabilne biblioteki, które pozwoliłyby w pełni wykorzystać tę ścieżkę. Programista który zna FreeRTOSa i dany ekosystem musi poświęcić bardzo dużo by przełączyć się na Rusta. Nikogo na to nie stać.
-
aplikacje z Linuxem... Jeżeli robisz w Kernel Space jesteś skazany na C. Jeżeli robisz w User Space... To tak naprawdę możesz stworzyć oprogramowanie w dowolnym języku programowania. Poza ograniczonymi zasobami pisanie nie różni się mocno od pisania na PC z Linuxem. A więc Rust musi tutaj konkurować z C++, Java, Python, JS Node itd.
Czego potrzebuje Rust? Tak jak już pisałem początkowej specjalizacji. Gdyby Rust posiadał wyjątkowo dobre narzędzia do np. tworzenia backendów www (jak Node / Python), tworzenia aplikacji GUI (jak Node + Electron), pozwalał w łatwy sposób automatyzować rzeczy (jak Python), pozwalał w łatwy sposób pisać AI / robić modele matematyczne (jak Python) to miałby szanse mocno rozwinąć się w swojej niszy, zdobyć popularność i eskalować na inne dziedziny. Obecnie musi konkurować z C/C++ którego zaletą jest "naucz się tego języka, a zrobisz w nim wszystko od serwera, przez grę po stację kosmiczną".
To co osobiście obserwuję to stopniowe wprowadzanie C++ do low level embedded. Biblioteki standardowe są tam tak przerobione by alokować pamięć statycznie i poza zaleceniami by unikać funkcji wirtualnych można korzystać z wielu dobrodziejstw tego języka.
Ps. Wiem że mówi się o wprowadzeniu Rusta do Kernela Linuxa ale moim zdaniem to błąd. Już teraz pisanie w Kernel Space ma bardzo wysoki próg wejścia m.in. przez dług technologiczny i brak dobrej dokumentacji (kiedyś nazywało się to open firmware a teraz device tree? wymieszaliśmy nazwy z obu podejść? chcesz się dowiedzieć jak to działa? wal się, w dokumentacji dt damy 2 niezrozumiałe przykłady i starczy). Rust sprawi, że pisanie driverów na linuxa będzie jeszcze trudniejsze.