TIL: Rust 0 - Moje wprowadzenie do Rusta

No dobra, to zaczynamy serię TIL (Today I learned) odnośnie języka Rust. W tym poście nie będzie żadnego kodu, żadnych poleceń terminala. W kolejnych postach z tej serii pojawią się notatki, przemyślenia, problemy, rozwiązania i sam nie wiem co jeszcze… Być może trochę frustracji.
Dlaczego Rust
Jeżeli w ogóle otworzyłeś/otworzyłaś tego posta, to jestem przekonany, że nie muszę przedstawiać tego języka, bo podejrzewam, że już go znasz.
Dla porządku, kilka ogólników (kolejność bez znaczenia):
- Rust to statycznie typowany, kompilowany język programowania.
- Jest powszechnie znany w środowisku IT ze swojej wydajności (porównywanej do C), bezpieczeństwa i trudności w nauce.
- Można za jego pomocą tworzyć systemy operacyjne (np. RedoxOS)
- Nie posiada garbage collectora
- Odbiłem się od niego chyba pięć albo sześć razy
- Nie podoba mi się jego dokumentacja
Ale dlaczego wybór padł na niego? Jest wiele innych, prostszych języków, które są szeroko stosowane zwłaszcza w środowisku chmurowym (z którym jestem związany), np. Golang - napisano w nim Terraforma, Kubernetesa, Dockera…
Potrzebowałem czegoś kompilowanego, i wydajnego, a do tego względnie prostego. Golang spełnia te kryteria, a do tego jest szeroko stosowany w środowisku chmurowym, więc dlaczego nie? Do tego kompilacja jest szybka, tworzy jeden plik wykonywalny, bez dynamicznych bibliotek - to wszystko brzmi świetnie, prawda?
No cóż - próbowałem przez jakiś czas. Coś tam napisałem, ale nie podobało mi się. Mam swoje przekonania odnośnie programowania, które totalnie kłócą się z codzienną praktyką w Golangu. Nie mam ochoty na siłę dostosowywać się do składni, która nieszczególnie mi odpowiada. W każdym razie takie było moje wytłumaczenie kiedy powiedizałem sobie “stop” i po raz kolejny spróbowałm kodowania w Ruscie.
I o dziwo - poszło o wiele lepiej (oczywiście do czasu).
Nie oszukujmy się - prostota zdecydowanie nie jest mocną stroną Rusta, więc w teorii jeden z głównych argumentów odpada w przedbiegach. Ale mam wrażenie, że Rust okazał się jednak bardizej przyjazny dla mojego sposobu myślenia. Jak się póxniej okazało, czas pojedynczej kompilacji też jest dłuższy (dobiłem do 20min jak dotąd).
Dodatkowo, niektóre rozwiązania architekturalne w bilbiotekach, których miałęm już okazje używać (np. serde lub clap) wydały mi się bardziej intuicyjne i wygodniejsze w stosowaniu niż ich odpowiedniki w Golangu.
Aktualny projekt
Przepisanie moich shellscriptów, tak by mieć jednego, statycznego execa.
Swoją drogą, nie spodziewałem się około 300 linijek shellscriptów potrafi się zwielokrotnić aż tak mocno w trakcie przepisywania na Rusta - ale o tym może innym razem.
Zależało mi, żeby to było coś użytecznego. Robienie przykładów z kategorii “sztuka dla sztuki” brzmi dla mnie jak strata czasu, a to nie wpływa pozytywnie na motywację. Więc dlaczego shellscripty? Mam ich sporo, używam na codzień, a do tego nie są przesadnie skomplikowane, więc wydawały się idealnym kandydatem do przepisywania.
Czy jest zrobione dobrze? Nie wiem.
Czy będzie lepsze? Z każdą iteracją - tak.
Czy to się opłaci? Zobaczymy.
A jeżeli chciałbyś podejrzeć jak to wygląda, to zapraszam na GitHuba
Aczkolwiek z góry ostrzegam - kompilowanie trwa bardzo długo. Wręcz strasznie długo jak na tak mały projekcik.