Wpis z mikrobloga

O #rustlang na #embedded powstało już nieco artykułów, więc nabiera nieco popularności. Mam wrażenie że póki co jeszcze jedna rzecz nie była poruszana. Język i ekosystem ma swoje plusy i minusy, natomiast z racji bycia względnie młodym i dynamicznym - sporo rzeczy mu brakuje (testowanie, wsparcie różnych mikroprocków, stabilność), sporo rzeczy też dostaje dość szybko - z racji że grupie ludzi się generalnie język podoba, jeszcze nie są wypaleni, więc sporo rzeczy się zmienia, dość dynamicznie.

To może być jednak czasem problemem. Mam przed sobą dość ciekawy przykład, kod sprzed dwóch lat, który wymaga kilku drobnych poprawek. Przez ten czas rust przeszedł z 1.70 na 1.85, używane crates (nie wiem, tłumaczy to ktokolwiek na "pudła" czy coś w tym stylu? ;)) niektóre poszły do przodu niektóre nie.
Niestety, w przypadku kodu w C/C++ przeważnie 2-3 lata to nie jest problem. Owszem, zmienia się wersja libc, co powoduje że można się wpakować na minę, ale podobnie w przypadku Rusta, jeśli zależy od jakichś -sys natywnych crates.

Do rzeczy; problem który widzę jest podobny do NPM-izacji środowiska. Jeśli zależności zaciąga się zdalnie, zyskuje się większą dynamikę, kosztem potencjalnych większych problemów przy "ożywianiu trupa" i rozwiązywaniu jego starych zależności. No właśnie, starych. Jeśli mamy kod w C/C++ to z racji w zasadzie niewielkich zmian - zwykle buduje się nawet i starszy. W przypadku Rusta, praktycznie zawsze trzeba coś pozmieniać (zwłaszcza jeśli kod używał sobie nightly dwa lata temu, zależał od paczek natywnych i używał dockera do kompilacj krzyżowej (cross-compilation jakby ktoś nigdy nie słyszał polskiej wersji tego sformułowania ;))

Ogólnie, dać się da, ale potencjalnie to może być problem. github i crates.io są już zas...iane rozmaitymi placeholderami, pojawia się i umiera sporo paczek, które potem ktoś porzuca. Kod napisany "niedawno" w Ruście też zaczyna się starzeć; zobaczymy jak sobie poradzi z próbą czasu.

#programowanie
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Oo-oO: No cóż każdy kod nabiera z czasem długu technologicznego i wymaga z czasem refaktoryzacji.
Szczególnie jak się korzysta z nightly, to oznacza że taka refaktoryzacja będzie konieczna, jako że funkcje czasami trafiają do stabilnej wersji w zmienionej formie.
Co do paczek to jest cargo.lock które każda wersja wydania powinna zawierać. Dzięki temu można ustrzec się przed zmianami w paczkach ( a może faktycznie by należało mówić o Rustowych skrzynkach).
Ja
  • Odpowiedz
  • 0
@lionbest: wersje wycofane się zdarzają, rzadko ale bywa. Niemniej, nawet to że wersja jest sobie w Cargo.lock nie gwarantuje że będzie się poprawnie budować bez interwencji - mówimy o przestrzeni czasu 2-3 lata, zmiana libc, toolchaina itd, często dość frywolne wersjonowanie nieszczególnie zgodne z semver, no i budowanie krzyżowe, potrafią ugryzc. Z drugiej strony, podobnie dzieje się w starych językach - tyle że rzadziej/w dłuszym okresie.

No cóż każdy kod
  • Odpowiedz
crate, wg statystyk GH używane przez 56k ludzi. Tak to się żyje w światku rusta, nie ma nudy ;)


@Oo-oO: @lionbest to jest tylko jeden z powodów dla których nienawidzę Rusta.

Mam nadzieję, że do Embedded nigdy nie zagości na poważnie.
  • Odpowiedz
  • 1
@sorek: no, może zaciekawi cię w takim razie to, pamiętam że lubisz ziga: https://zackoverflow.dev/writing/unsafe-rust-vs-zig
Z tego wynika że gość (i spółka) piszący Roc (swoją drogą paskudnie wyglądający język, rzuciłem okiem i mnie odrzuciło) przepisują kompilator 300k LOC z Rusta na Ziga :D

Będę musiał poświęcić zigowi nieco więcej czasu, może im się uda, trzymam kciuki bardziej niż za zardzewiałego. Głównie przez jego political-correctness, ekosystem, nawiedzonych apostołów. Technicznie ujdzie, choć jak się widzi
  • Odpowiedz
@Oo-oO: w Embedded chwale sobie C++ za zero cost abstractions i bardzo fajne rzeczy które można zrobić.

Np. taka single header biblioteka half (16 bit float) która odchudziła mój program znacząco za pomocą jednego typedef. Nie sądze że w innych językach (nawet C) byłoby to możliwe bez przepisywania połowy kodu i tego jak danych rzeczy trzeba używać ;)
  • Odpowiedz