W jaką stronę zmierza Rust?

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

samoloth
  • Rejestracja:ponad 5 lat
  • Ostatnio:7 miesięcy
  • Postów:63
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 :)

purrll
  • Rejestracja:około 5 lat
  • Ostatnio:ponad 4 lata
  • Lokalizacja:Kuala Lumpur
  • Postów:241
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).


edytowany 2x, ostatnio: purrll
samoloth
Dzięki za wyczerpującą wypowiedź. Myślę że poświęcę mu choć odrobinę uwagi :)
MP
  • Rejestracja:prawie 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:1
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.

KR
Moderator
  • Rejestracja:prawie 21 lat
  • Ostatnio:2 miesiące
  • Postów:2964
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.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)