Wątek przeniesiony 2021-08-05 08:07 z Inne języki programowania przez Adam Boduch.

W jaką stronę zmierza Rust?

0

Cześć,

zainspirowany wpisem WeiXiao na mikroblogu dotyczącym nowego kompilatora do developmentu chciałbym poznać waszą opinię na ten temat. Rust kojarzył mi się dotychczas z szybkością i odpornością na wycieki pamięci. Jednak czy nie zaczyna się nadmiernie komplikować? Chciałem go ruszyć dla własnego rozwoju w niedalekiej przyszłości. Chętnie poznam wasze zdanie na ten temat :)

9

Spędziłem z nim ponad pół roku po 1-3h dziennie zaczynając od wersji 1.24. Problemy jakie napotkałem to zmiana myślenia. Jak ktoś będzie siedział w OOP 10 lat to wejdzie do Rusta i zgłupieje. Na pewno odradzam język początkującym. Według mnie straszny tasiemiec jak na start. Najprościej mają koledzy wywodzący się z C++. Najtrudniej ludzie nie mający pojęcia o tym jak to wszystko działa pod spodem - czyli najczęściej Ci bez backgroundu w postaci kierunkowych studiów.

Sam język zmierza cały czas w tym samym kierunku jaki obrano podczas jego tworzenia. Minus jaki dostrzegam to chęć zafascynowanych tym językiem zrobienia z niego złotego środka na wszelkie bolączki. I tak widziałem już firmy trzepiące w tym całą infrastrukturę mikroserwisową. Projekty systemów operacyjnych na Github. Nawet jeden gość regularnie dodaje wpisy na blogu z produkcji systemu i to całkiem ciekawe gdyby ktoś w tym temacie się obracał.

Cytując arewethewebyet:
Can I replace my Rails/Django/Flask already?

Well, probably not yet. While the basics are there, many of the handy utility libs that make working with many popular frameworks so quick and easy are still missing. If your service primarily provides an API to be consumed by other computers, requires little external services and you are happy with writing most SQL yourself, then Yes, You Can! Otherwise, we would not recommend it just yet.

Siedząc na kanałach Discorda czy jakichś grupkach społeczności mnóstwo ludzi (głównie w Javascriptu) przychodzi i chce w tym pisać UI albo "stronki". Zastanawiam się czy jest to spowodowane ignorancją czy też po prostu głupotą?
Osobiście postrzegałbym ten język jako dobre rozwiązanie do jakichś krytycznych elementów systemów. Tam gdzie trzeba osiągnąć wydajność. Dobrym przykładem niech będą np.

Osobiście spróbowałem też frameworka Yew do frontu ale to bardziej na zasadzie prób w stylu "how to". I w zasadzie z tych wszystkich rzeczy poza samym językiem których próbowałem Yew był najmniej problematyczny.

Co do samego języka z mojej perspektywy:

  • Na pewno jest problem z dobrym środowiskiem do Rusta. Wtyczka do VSCode to nie jest najlepsze rozwiązanie. Genialną wtyczkę ma natomiast JetBrains ale nie jestem pewien czy do wersji Community też.
  • O ile sam język ma zadowalające wsparcie wtyczek o tyle gdy chcemy użyć np Rocket, Hyper, Actix czy Gotham możemy zapomnieć o jakimkolwiek wsparciu składniowym. Chociaż tu mogło się coś ostatnio zmienić, a ja nie śledzę od jakiegoś czasu nowości. Natomiast jakiś rok temu żeby zacząć projekt w np. Rocket trzeba było przejść na Nightly, która powodowała czerwone szlaczki w VSCode.
  • Sam język w sobie z perspektywy kogoś kto C/C++ porzucił jeszcze na studiach jest dosyć skomplikowany składniowo. Jest tam sporo lukru, którego jeszcze nie rozumiem, a nawet jeśli rozumiem to nie bardzo wiem jak zastosować go w praktyce.
  • Bardzo dużo nakład pracy aby osiągnąć efekty - oprę swoje obserwacje o Go w którym mogę bardzo szybko coś napisać. Natomiast żeby osiągnąć to samo w Rust potrzeba o wiele większych nakładów pracy.
  • Aby faktycznie zyskać na pisaniu w Rust w porównaniu np. z Go trzeba albo naprawdę dobrze operować językiem i wycisnąć z niego wszystko co oferuje żeby te różnice były faktycznie odczuwalne albo mieć do napisania coś co wymaga bardzo dużych zasobów i mamy podejrzenia, że GC w Go będzie nam utrudniał osiągnięcie oczekiwanego efektu (Discord). W innym wypadku pisanie czegoś dla samego napisania w Rust nie ma sensu ponieważ jak wspomniałem nakład pracy duży, a różnice prawdopodobnie niezauważalne.
  • Podczas czytania Rust Book (albo Rust by example) spotkałem kilka smaczków, które podane w przykładach w mojej wersji Rust były już deprecated. Trzeba było pogrzebać w internetach żeby znaleźć aktualniejsze rozwiązania. Zwykle podobne rzeczy odkopywałem w dokumentacji.
  • Sama dokumentacja to najwyższej próby złoto. Nigdy jeszcze nie widziałem tak dobrze ozdobionej przykładami dokumentacji.
  • Jest naprawdę sporo interesujących projektów jeżeli ktoś potrafi je znaleźć ale poziom wejścia do nich jak i wejścia do samego języka jest bardzo wysoki.

Osobiście mogę polecić jeżeli masz w sobie ciekawość i chęć nauki czegoś nowego. Natomiast jeśli nie zamierzasz pracować w biznesie, który wykorzystuje Rusta to nie trać na niego zbyt dużo czasu, bo później prawdopodobnie zderzysz się z betonem w firmach, który nie będzie w stanie pojąć po co Ci ten Rust.

Z ciekawostek wiem, że GPW pracuje nad nowym systemem transakcyjnym opartym między innymi o C++ oraz właśnie Rust. Co prawda chłopaki chyba będą produkować przerost formy nad treścią, który później zamierzają podobno sprzedawać ale to już nie mój biznesowy interes. Chociaż nie wiadomo czy teraz w aktualnej sytuacji ekonomicznej projektu nie zawieszą (moje gdybanie).

4

Cześć,

pracuję w Rust zawodowo od pół roku. Wcześniej zajmowałem się głównie w C++.

Głównym powodem, dla którego warto zainteresować się Rust, jest właśnie bezpieczeństwo pamięci i wątków - analiza jest dokonywana statycznie, więc dostajemy bezpieczeństwo za darmo. Na pewno na pochwałę zasługuje też cargo wraz z całym ekosystemem crates.io. Odpowiadając na pytanie "w jaką stronę zmierza" - z tego co obserwuję to raczej w stronę wygładzania ostrych krawędzi. Ostatnią dużą funkcjonalnością było wprowadzenie składni async/await (październik 2019).

Jeśli chodzi o wsparcie środowiskowe - raczej odradzałbym używanie domyślnej wtyczki (rls) VSCode. Jakoś od 3 miesięcy testuję rust-analyzer i działa zaskakująco nieźle - w zasadzie dostajemy większość oczekiwanego wsparcia out of the box. Od niedawna rust-analyzer jest dostępny w Marketplace i raz w tygodniu dostajemy aktualizację. Program ten powinien współpracować z każdym edytorem implementującym protokół LSP.

6

Myślę, że Rust zmierza teraz w kierunku uzupełniania braków i wygładzania ostrych krawędzi. Jest wiele takich zaskakujących ograniczeń, gdzie czegoś nie można zrobić tylko dlatego, że nie zostało jeszcze zaimplementowane.

Przykładowo impl Trait nie jest dozwolone w sygnaturach metod w traitach, przez co napisanie abstrakcyjnej fabryki jest trudne i Javowcy po tym doświadczeniu odchodzą pisać w Go. Albo, podobnie, metody traitów nie mogą być async, a obejście przez crate async_trait jest dość karkołomne. Genericsów nie można umieszczać w typach skojarzonych, więc Haskellowcy i Skalowcy też są trochę rozczarowani. Natknąłem się też na parę miejsc gdzie borrowchecker nie puszczał, a mógłby, albo gdzie dawał trudne do zrozumienia komunikaty. Jest też sporo do zrobienia po stronie bibliotek.

Z dużych rzeczy, wiem że pełną parą idą prace nad backendem do GCC, co powinno otworzyć nowe możliwości jak pisanie części kernela czy kompilowanie na niewspierane obecnie procesory np. ESP8266/ESP32 (tak, akurat to da się obejść, ale trzeba forka LLVM sobie zbudować).

Liczę też na rychłe dodanie GATs (generic associated types), co z kolei otwiera możliwości podobne do HKTs Scali/Haskella.

Natomiast tak poza tym, mimo tych drobnych bolączek okresu młodości, to mnie się w Rust pisze generalnie bardzo dobrze i zdecydowanie częściej brakuje mi mechanizmów Rust w Javie niż na odwrót.

No i Rust ma taką niesamowitą własność, że może i trochę więcej się trzeba nauczyć, ale za to jak już się kod skompiluje, to w 99/100 działa poprawnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1