Wpis z mikrobloga

zastanawiam się nad wejściem w #rustlang najpierw hobbistycznie, a potem może kto wie zawodowo. jakie macie wrażenia z używania tego języka, wsparcia community, bibliotek i ich dodawania do projektu, wsparcia cross-compile?

do tej pory zawodowo robiłem w C++, dość mnie to zaczęło męczyć pisanie w nim, sporo rzeczy trzeba od zera robić. trochę w pythonie robiłem, ale brak typowania zmiennych czy nawet czasami brak bindingów do bibliotek jest dla mnie nie do przejęcia, ale zdecydowanie na plus jest łatwość instalacji bibliotek i wieloplatformowość. robię też w Javie, bardzo przyjemnie się mi w tym piszę ale potrzebuje języka bardziej pod embedded

#programowanie
  • 41
@mapache: piszę w tym zawodowo od pewnego czasu. Na początku trochę zajmuje przyzwyczajenie się do borrow checkera i nauczenie się pewnych charakterystycznych idiomów. Potem idzie już bardzo gładko. Ogólnie na plus: dobry tooling (cargo), całkiem szybki kompilator przyrostowy, chyba najlepsze komunikaty o błędach jakie kiedykolwiek widziałem, bardzo wysoka wydajność generowanych programów, język na tyle wysokopoziomowy, że pisze mi się w nim szybciej i. wygodniej niż w Javie, zwłaszcza biorąc pod uwagę
@Krolik: a jak z łatwością implementacji popularnych wzorców? w Javie jest to świetnie rozwiązane, mówię o popularnych wzorcach typu Observer czy Singleton. z ciekawości, na czym polega twój projekt zawodowy gdzie używasz Rust?
@mapache: Rust nie jest OOP w sensie Javy, więc wzorce Javowe / GoF radzę odstawić na półkę. Generalnie kodowanie w Rust w stylu jakby to była Java to proszenie się o bęcki od kompilatora. Projekt nad którym pracuje, to proxy o ultra niskich opóźnieniach na potrzeby rozproszonego systemu baz danych w chmurze, umożliwiające mirroring ruchu.
Rust nie jest OOP w sensie Javy, więc wzorce Javowcy radzę odstawić na półkę. Generalnie kodowanie w Rust w stylu jakby to była Java to proszenie się o bęcki od kompilatora.


@Krolik: mógłbyś rozwinąć? nie jestem jakimś wymiataczem Javowym, i piszę w nim po prostu jak w języku obiektowym
@mapache: 1. Rust nie ma dziedziczenia implementacji 2. Robienie struktur danych w których masz wiele elementów powiązanych referencjami (a jeszcze gorzej - cyklicznymi referencjami) wepchnie Cie w objęcia tzw lifetime annotations albo Arc/Rc, a w przypadku cykli szykuj się na ostrą walkę z kompilatorem 3. W safe Rust generalnie nie ma mutowalnych globali / static. 4. Rust preferuje polimorfizm statyczny; dynamiczny istnieje (dyn) ale ma dużo ograniczeń - dlatego tak gdzie
@mapache: a i jest jeszcze jedna rzecz która mocno wpłynęła na to jak programuje i ułatwiła wiele rzeczy - musisz sobie zdać sprawę że w Rust bardzo wiele wartości / obiektów przekazuje się przez wartość przez tzw move. Przekazywanie nawet dużych kolekcji przez wartość jest bardzo tanie i zajmuje raptem kilka cykli CPU, niezależnie od tego ile faktycznie danych np. masz w takim wektorze. Jak to sobie człowiek uświadomi to przechodzi
jakie macie wrażenia z używania tego języka,

@mapache: dla mnie Rust jest językiem, w którym po prostu przyjemnie mi się pisze, można się pobawić funkcyjnymi rzeczami, a samo to jak język jest zaprojektowany sprawia, że większość bugów które powoduję jest wykrywane w czasie kompilacji

wsparcia community,

z doświadczenia community jest bardzo oddane i żywe

bibliotek i ich dodawania do projektu

z bibliotekami jest różnie, niestety Rust to nadal dosyć młody język
, jedyny problem jaki widzę to że ilość bibliotek bardzo mocno wpływa na czas kompilacji, który i tak krótki nie jest (ale z doświadczenia lepszy od


@Sachees: Rust kompiluje wszystkie zależności ze źródeł. Np. dodanie jako zależności samego GTK4 to ponad 250 tys linii do skompilowania. I jestem pod wrażeniem że zajmuje to mniej niż minutę. Natomiast pocieszające jest to że to wystarczy zrobić raz, a potem kompiluje przyrostowo. Przyrostowy czasy
@Sachees: rozwiązalismy ten problem przez layered image. Generujemy najpierw osobną warstwę tylko z samymi zależnościami, bez naszego kodu, obraz z zależnościami trafia do cache dockera i dopiero nad tym jest właściwy obraz z kodem projektu. Zależności przekompilowuja się tylko jak zmienimy Cargo.toml. Obczaj sobie cargo-chef.
@bajcik: nie każdy ficzer można łączyć z każdym innym. Np. async nie działa w traitach, impl Trait można zwracać tylko w niektórych sytuacjach (np. nie działa w sekcji where albo w innych traitach), const generics działają tylko z wybranymi typami prostymi, nie wszystkie traity można używać z dyn, partial borrowing nie przechodzi przez granice wywołań funkcji (więc czasem extract function nie jest możliwe) itp. Duża część z tych ograniczeń będzie usunięta
via Wykop Mobilny (Android)
  • 0
@mapache: Problem z rustem jest taki, ze komercyjnie używa się go w określonym raczej wąskim zakresie - t gdzie wydajność jest kluczowa i nie da rady np golang. Wiec wybór projektów jest raczej niewielki i raczej na jedno kopyto
@yhbgrobdoivbvwamsv: Rust jest uniwersalny i są firmy, które używają go nawet do CRUDów, aplikacji GUI / mobilnych czy nawet frontendów za sprawą WebAssembly. Oczywiście najbardziej jest używany do pisania komponentów systemów operacyjnych (Google Android), przeglądarek (Firefox, Chrome), systemów baz danych (np. ScyllaDB, DataStax Astra), narzędzi CLI, infrastruktury chmurowej (pokaźna część AWS jest napisana w Rust, między innymi S3), w kryptowalutach, w systemach embedded. Jest oczywiście młodym językiem i wiadomo że łączna
@devopsiarz: chwali się na swoim blogu oraz w wywiadach z pracownikami. Wg jednego z nich na ZDNet: "AWS services built on Rust include Firecracker, the technology behind its Lamba serverless platform for containerized apps, Amazon Simple Storage Service (S3), Elastic Compute Cloud (EC2), its CloudFront content delivery network, and Bottlerocket, a Linux-based container OS." Poza tym zatrudniają wiel kluczowych deweloperów zaangażowanych w ekosystem Rust, m.in. programistów kompilatora oraz programistów Tokio.
Jeśli chodzi o to infrastrukturę, to jeszcze bardzo dużym użytkownikiem Rusta jest Cloudflare. Cloudflare twierdzi na swoim blogu że obsługuje bilion (ang trillion) zapytań HTTP dziennie i że zastąpili Nginx własnym rozwiązaniem w Rust.
Chwali się na swoim blogu oraz w wywiadach z pracownikami. Wg jednego z nich na ZDNet: "AWS services built on Rust include Firecracker, the technology behind its Lamba serverless platform for containerized apps, Amazon Simple Storage Service (S3), Elastic Compute Cloud (EC2), its CloudFront content delivery network, and Bottlerocket, a Linux-based container OS."


Wiem, że mają projekty w Rust, ale swojego talka o S3 dawno nie aktualizowali, więc nie wiem, czy uprawnione
ale pisali, że to nie jest szybsze od nginksa ( dlatego jest w Ruście), tylko coś zrobili jeszcze z architekturą.


@devopsiarz: tak jak pisałem wyżej, wydajność nie zawsze jest powodem używania Rust. Często jest to bezpieczeństwo, poprawność, łatwość utrzymania kodu przy zachowaniu wydajności nie gorszej niż C lub C++. Nie miałbym obiekcji wrzucić na projekt w Rust juniora bo wiem że nie narobi szkód (zabronię mi używać unsafe, a wszelkie miejsca