POIT #156: Rust

Witam w sto pięćdziesiątym szóstym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy jest język programowania Rust.

Dziś moimi gośćmi są:

Paweł Dulęba –  Senior software engineer w CodiLime. Programista embedded od ponad dekady, pracował w technologiach obecnych w urządzeniach codziennego użytku po wielkie serwery. Jest zdania, że najlepszy język programowania to ten, który daje największe możliwości w rozwiązywaniu aktualnego problemu.

Michał Krasnoborski – Senior software engineer w CodiLime. Programista odnajdujący się wszędzie tam, gdzie wydajność ma znaczenie – programowanie GPU, przetwarzanie ruchu sieciowego na żywo. Lubi łączyć wysokopoziomowe abstrakcje z analizą kodu na poziomie asemblera. W sukces Rusta wierzył już przed wydaniem wersji 1.0.

W tym odcinku o Rust rozmawiamy w następujących kontekstach:

  • jaka jest historia powstania tego języka? Kto go stworzył?
  • dlaczego powstał? Jaki bolączki adresuje?
  • czy nowy język był potrzebny?
  • jak Rust wypada na tle innych języków?
  • jakie są jego mocne i słabe strony?
  • jakie są zastosowania języka Rust?
  • w jakich projektach sprawdza się najlepiej?
  • jak wygląda ekosystem Rusta?
  • jak ten język programowania się obecnie rozwija?
  • czy to jest dobry język na start przygody z programowaniem?
  • jaka przyszłość może czekać Rusta?

🎁 Orange Flex dla Firm

Specjalny rabat tylko dla słuchaczy podcastu „Porozmawiajmy o IT”. Dowolny Plan Flex dla Firm (nawet ten najwyższy) w promocji 50% taniej przez trzy miesiące. Wystarczy wpisać kod FLEXIT podczas aktywacji numeru Flex dla Firm.
Orange Flex dla Firm – https://flexapp.pl/dlafirm_1

Subskrypcja podcastu:

Linki:

Wsparcie na Patronite:

Wierzę, że dobro wraca i że zawsze znajdą się osoby w bliższym lub dalszym gronie, którym przydaje się to co robię i które zechcą mnie wesprzeć w misji poszerzania horyzontów ludzi z branży IT.

Patronite to tak platforma, na której możesz wspierać twórców internetowych w ich działalności. Mnie możesz wesprzeć kwotą już od 5 zł miesięcznie. Chciałbym oddelegować kilka rzeczy, które wykonuję przy każdym podcaście a zaoszczędzony czas wykorzystać na przygotowanie jeszcze lepszych treści dla Ciebie. Sam jestem patronem kilku twórców internetowych i widzę, że taka pomoc daje dużą satysfakcję obu stronom.

👉Mój profil znajdziesz pod adresem: patronite.pl/porozmawiajmyoit

Pozostańmy w kontakcie:

 

Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner (posłuchaj)

Transkrypcja podcastu

To jest 156. odcinek podcastu Porozmawiajmy o IT, w którym z moimi gośćmi rozmawiam o języku programowania Rust. Przypominam, że w poprzednim odcinku rozmawiałem o tym, jak z głową zmienić pracę i branżę na IT. Wszystkie linki oraz transkrypcję dzisiejszej rozmowy znajdziesz pod adresem porozmawiajmyoit.pl/156 

Ocena lub recenzja podcastu w Twojej aplikacji jest bardzo cenna, więc nie zapomnij poświęcić na to kilku minut. Od niedawna można wystawiać oceny podcastom w Spotify. Będzie mi bardzo miło, jeśli w ten sposób odwdzięczysz się za treści, które dla Ciebie tworzę. Dziękuję.

Sponsorem dzisiejszego odcinka jest Orange, dostawca usługi Orange Flex – sieć komórkowa w aplikacji z elastyczną ofertą. Jedną z jej opcji jest Flex dla Firm – oferta przeznaczona dla Jednoosobowych działalności gospodarczych, z e-fakturą za każdą płatność. Wiele osób w IT to freelancerzy lub osoby prowadzące jednoosobową działalność. W zależności od zmian w swoim biznesie możesz dostosowywać ofertę Flex dla Firm – jak chcesz i kiedy chcesz.

Dodatkowo tylko dla słuchaczy podcastu „Porozmawiajmy o IT” mam specjalny rabat. Dowolny Plan Flex dla Firm (nawet ten najwyższy) w promocji 50% taniej przez trzy miesiące. Wystarczy wpisać kod FLEXIT podczas aktywacji numeru Flex dla Firm.

Sponsorem dzisiejszego odcinka jest platforma rekrutacyjna SOLID.Jobs. Jeśli szukasz pracy w IT, koniecznie odwiedź adres solid.jobs. Znajdziesz tam tylko oferty pracy z widełkami wynagrodzeń. Jeśli aktualnie nie myślisz o znalezieniu nowej pracy to koniecznie zapisz się na Job Alert. Nie częściej niż raz w tygodniu otrzymasz wiadomość e-mail z zestawieniem ofert, które mogą Cię zainteresować. Jeśli w swojej pracy dalej korzystasz z SVN-a, to koniecznie odwiedź SOLID.Jobs. 

Ja się nazywam Krzysztof Kempiński, a moją misją jest poszerzanie horyzontów ludzi z branży IT. Środkiem do tego jest między innymi ten podcast. Zostając patronem na platformie Patronite, możesz mi w tym pomóc już dziś. Wejdź na porozmawiajmyoit.pl/wspieram i sprawdź szczegóły. Jednocześnie bardzo dziękuję moim obecnym patronom. A teraz życzę Ci już miłego słuchania!

 

Odpalamy!

 

Cześć! Dzisiaj moimi gośćmi są Paweł Dulęba, Senior Software Engineer w CodiLime, programista Embedded od ponad dekady, pracował w technologiach obecnych w urządzeniach codziennego użytku po wielkie serwery. Jest zdania, że najlepszy język programowania to ten, który daje największe możliwości w rozwiązywaniu aktualnego problemu. 

Oraz Michał Krasnoborski, Senior Software Engineer w CodiLime, programista odnajdujący się wszędzie tam, gdzie wydajność ma znaczenie. Od programowania GPU po przetwarzanie ruchu sieciowego na żywo. Lubi łączyć wysokopoziomowe abstrakcje z analizą kodu na poziomie Asemblera. W sukces Rusta wierzył już przed wydaniem wersji 1.0.

Panowie, bardzo miło mi gościć Was w podcaście.

 

P.D.: Nam jest miło, że tu jesteśmy z Tobą.

 

M.K.: I mnie również.

 

Cieszę się bardzo, a dzisiaj będziemy rozmawiać właśnie o Rust jako o języku. Co jakiś czas w ramach mojego podcastu staram się omawiać języki programowania, żeby nieco przybliżyć ich historię, ale również to, gdzie najlepiej się odnajdują. Dzisiaj mam dwóch gości, więc myślę, że temat Rusta rozwałkujemy i pokażemy jego możliwości.

Ale zanim do tego przejdziemy, to chciałbym Was zapytać o to, o co pytam standardowo na wejściu do mojego podcastu, czyli: czy słuchacie podcastów? Jeśli tak, to może macie jakieś swoje ulubione audycje, o których chcecie powiedzieć?

 

M.K.: Ja słucham, ale niestety żadnych polskojęzycznych. Słucham podcastu Lexa Freedmana i w zasadzie w moim życiu mam czas na słuchanie pół podcastu i jest to ten podcast. Wchodzi na ciekawe tematy filozoficzne, tak że malutka odskocznia od programowania.

 

P.D.: Szczerze powiedziawszy, ja nie mam czasu na nic i naprawdę zastanawiałem się, jaki tytuł tutaj wybrać i czy kojarzę jakikolwiek, natomiast niestety nie. Tak że bardzo mi przykro.

 

Jasne, nie ma problemu. To tym bardziej cieszę się, Paweł, że znalazłeś czas na nagrywanie podcastu, skoro z tym czasem faktycznie jest tak trudno.

Na początku chciałbym Was zapytać, jaka jest historia powstania Rusta, kto go stworzył i skąd ta rdzawa nazwa.

 

M.K. To zacznę od końca, bo rdzawa nazwa wynika z tego, że jest to język, który jakby odgrzebuje rzeczy, które zostały już dawno wymyślone, gdzieś w obszarze researchowych takich języków programowania, ale nigdy nie zostały mainstreamowo użyte, więc tak naprawdę to jest nowe połączenie starych rzeczy, chociaż dla przeciętnego programisty mogą to być nowe rzeczy. I ten język powstał jako prywatny projekt niejakiego pana Graydona, który później został przyjęty pod skrzydła Mozilli i w 2015 roku została wypuszczona w świat wersja 1.0.

 

Jasne. Ja rozgraniczam języki programowania, pod względem historycznym przynajmniej, na takie, które powstają z powodów hobbistycznych – po prostu ktoś chciał stworzyć nowy język programowania – ale pewnie większość adresuje jakieś problemy, albo powstają, ponieważ brakowało czegoś takiego na rynku. Jak to jest z Rustem? Czy to jest projekt hobbistyczny, czy może powstał dlatego, że miał być panaceum na jakieś problemy? Jeśli tak, to jakie bolączki właśnie adresuje?

 

M.K. W Mozilli Rust był używany na początku jako takie eksperymentalne pole, jak wyglądałby język, w którym przyjemnie pisałoby się przeglądarkę na miarę obecnej czy poprzedniej dekady, gdyż Firefox jako dosyć stary codebase napisany w C++, były próby „zrównaleglania” go, ale często kończyły się porażką. Więc Rust miał być tym językiem, w którym przyjemnie i bezpiecznie rozwiązuje się problemy concurrency i „zrównoleglania” przy oczywiście zachowaniu wydajności, bo to jest kod w przeglądarce. Ale to były tylko początki i w zasadzie zaraz, jak zostało to wypuszczone, community zaczęło ciągnąć temat i Rust stał się językiem, w którym bezpiecznie można rozwiązywać trudne problemy, z naciskiem na wielowątkowość.

 

Okej, czyli powiedziałeś tutaj o takich dwóch rzeczach, przynajmniej ja usłyszałem dwie rzeczy: wielowątkowość wykonana lepiej, niż to miało miejsce do tej pory oraz bezpieczeństwo. Zastanawiam się tylko, czy to są takie cechy tego języka, które zostały niejako dorobione, albo stały się marketingowym przekazem już później, czy też faktycznie były powodem, dla którego sam język powstał. Czy twórca miał od samego początku zamiar stworzenia języka, w którym tworzenie systemów, programów „zrównoleglonych” będzie przynosiło jakąś tam frajdę, a nie tylko problemy, jak to występowało wcześniej? Czy też raczej sam rozwój języka pokazał, że to jest właśnie ten kierunek? Czy wiecie coś na ten temat?

 

M.K. Ja myślę, że to dwie rzeczy. W sensie obie te rzeczy są prawdziwe, bo zarówno Rust powstawał z taką myślą, ale też w czasie rozwoju Rusta za każdym razem, jak padała jakaś decyzja zmian w języku, to tych założeń nie chciano zepsuć. W sensie, że w tym języku zawsze miało się łatwo pisać aplikacje wielowątkowe i zawsze ten język miał być językiem bezpiecznym i przyjemnym w użyciu. Więc rozwój tego języka jakby tylko zakorzeniał te wartości. 

Jedyna rzecz, która zmieniła się od momentu powstania tego języka i gdzieś jako takiego projektu na boku do mniej więcej wydania wersji 1.0 było to, że Rust się stawał coraz bardziej niskopoziomowy w taki sposób, żeby nadawał się do programowania kerneli czy Embedded i żeby był jak najbliżej systemu. Bo jednak na początku on był troszeczkę bardziej wysokopoziomowy i dużo bardziej podobny do Golanga tak naprawdę. I troszeczkę jakby rozszerzył tutaj swoją niszę, że jest nie tylko bezpieczny i przyjemny, ale także niskopoziomowy.

 

Jasne, rozumiem. Te cechy, o których tutaj powiedziałeś, czyli właśnie tworzenie „zrównoleglonych” programów czy też bezpieczeństwo, to jest coś, o co zabiega pewnie wiele innych języków również, prawda? Bo mogą być one ważne dla innych języków. Czy musiał powstać nowy język, żeby poradzić sobie z tymi problemami, czy też może dałoby się wykorzystać już istniejące rozwiązania, żeby nieco poprawić ten model współbieżności, bezpieczeństwo? Jakie macie opinie na ten temat?

 

P.D.: Wiesz co, to jest tak, że tak naprawdę każdą funkcjonalność jesteś w stanie napisać w każdym języku. Ja jestem ze świata Embedded i miałem kiedyś takie podejście do życia, że po co mi C++ na małym klocuszku, jeżeli wszystko jestem w stanie napisać w E-Samplerze i będzie znakomicie działać. I oczywiście, że będzie działać, natomiast trzeba wziąć pod uwagę to, że aktualnie oprogramowanie rozwija się tak szybko i dynamicznie oraz w takich różnych i nieprzewidywanych kierunkach, że dobrze jest mieć standard. I to, co w wielu językach jesteś w stanie osiągnąć, czy to pisząc odpowiednie moduły, czy „poprawiając język przez różne biblioteki” oraz design patterny, wreszcie dostajesz jako standard. Po prostu tak się tutaj pisze.

 

Dopytam może jeszcze: czy to jest taki standard, który jest pilnowany przez język, przez ekosystem? Czy też raczej jest pewnym standardem wypracowanym po prostu przez programistów?

 

P.D.: No właśnie to pierwsze. To jest bardzo problematyczne na początku, przy początkowych fazach współpracy z językiem, ponieważ kompilator przekreślił wszystko. Tak naprawdę cokolwiek nie zrobisz z rzeczy, do których jesteś przyzwyczajony w innych językach, Rust powie, że mogłoby być lepiej, i on Ci tego nie weźmie. On tego nie skompiluje i koniec. To nie jest tak, że rzuci warningiem. Nie.

 

Domyślam się, że to wpływa właśnie na bezpieczeństwo. Albo również może wpływać na bezpieczeństwo tych rozwiązań, jeśli nie mamy różnych możliwości osiągnięcia tego samego, tylko jest pewien standard, pewnie dopracowany, który jest wręcz wymuszany przez kompilator, prawda?

 

P.D.: Jak najbardziej. To, co powiedziałeś wcześniej, że programiści mogą sobie wypracować pewien sposób działania i rozwijania oprogramowania w danym języku. Tylko że mimo wszystko tak, jesteśmy dorośli i dążymy do tego samego celu, tzn. do znakomitego oprogramowania, które będzie bez błędów, ale zawsze jest zmęczenie, zawsze są pomyłki, zawsze jest coś, co powstrzyma nas od tego idealnego oprogramowania. A tutaj nie ma wyjścia, tutaj na pewno będzie bezpiecznie, ponieważ jest grupa ludzi, która czuwa nad tym, żeby dodawać różne checkery do kompilatora, które w tym pomogą.

Bo tak, oczywiście, w C++ jest dużo linterów, jest dużo tooli do statycznej analizy i oczywiście są ludzie, którzy tego używają, są projekty, które bez tego by się nieobeszły, ale to wszystko jest wbudowane w Rusta i to jest takie wielkie WOW, przynajmniej dla mnie to był taki olbrzymi przeskok jakościowy.

 

M.K.: Ja bym pociągnął ten temat też, bo w innych językach jest tak, że te lintery jakby powstały później i one są na boku i po pierwsze, ludzie nie zawsze z tego korzystają, a po drugie, nawet jak się z tego korzysta, to są jakieś false positive, są jakieś false negative. Natomiast w Rust lintery i compilarry to jest to samo. Więc to, że te wszystkie checki się rozwijają jednocześnie z językiem, a wręcz są tym językiem, sprawia, że to jest niby coś, co było kiedyś, ale jest to jednak swego rodzaju nowa jakość. 

No tak, nie jest to takie oczywiste podejście i nie jest spotykane zbyt często, bo okej, możemy faktycznie, tak jak powiedzieliście, stosować różnego rodzaju lintery czy też zbiory dobrych praktyk, ale tak naprawdę bardzo szybko okazuje się, że i tak powstają obozy, które preferują takie podejście, takie rozwiązania itd. i nie ma takiego jednego standardu. Tymczasem jeśli kompilator nam po prostu nie przepuszcza przypadku Rusta pewnych rozwiązań, to nie mamy wyjścia i jesteśmy jakby trochę przymuszeni do tego, żeby stosować takie, a nie inne rozwiązania.

Czy to była jedna z rzeczy, która Was przyciągnęła, zainteresowała, jeśli chodzi o Rusta? Co Was skłoniło do tego, żeby się nad tym językiem pochylić?

 

M.K.: Myślę, że tak, że to dla mnie ta jedna rzecz to było jak bardzo spójny był ten język i jak wszystko się tak ładnie składało do kupy. Ja w czasie, kiedy odkrywałem Rusta, eksperymentowałem z wieloma językami programowania, akurat wtedy miałem fazę na Haskella, ale byłem też programistą C++ i po prostu pewnego razu zobaczyłem, że ten Rust jest linkowany, więc postanowiłem przejść sobie przez tutorial i moje wrażenie było takie, że WOW, tu jest dużo rzeczy, które właśnie w C++ są dobrymi praktykami, w Rust są po prostu wbudowane i wymagają wpisania dosłownie jednego znaku i wszystko działa. I to wydało mi się taką elegancką ewolucją lub wręcz ewolucją z C++.

 

P.D.: A u mnie było troszkę inaczej, znaczy tak, to też były eksperymenty, bo staram się być cały czas na czasie i wiedzieć, co w trawie piszczy, natomiast po tym, jak poznałem Golanga i w przeciągu jednego popołudnia byłem w stanie napisać coś konkretnego, co działało i miało ręce i nogi, stwierdziłem, że drugie popołudnie Rust to jest kolejny język, na którego jest taki hype, więc jest kolejnym wspaniałym kandydatem do zrobienia tego samego: siądnięcia na jedno popołudnie i zrobienia czegoś fajnego i wtedy to wszystko, co powiedzieliśmy przed chwilą, tak strasznie mnie uderzyło w tył głowy. Bo tego się nie dało zrobić. To jest dosyć skomplikowany na początku język, który daje wspaniałe możliwości, ale trzeba chwilę poświęcić.

 

Czyli ten taki challenge tutaj w Twoim przypadku, mam wrażenie, Paweł, tak? Takie zainteresowanie jakieś tym językiem wynikające być może nie z prostoty, tylko właśnie z zaawansowania. Ciekawe.

 

P.D.: Tak, z zaawansowania, przy czym szukałem czegoś, co zastąpi mi C i Asemblera na Embedded. Ponieważ ja mam background głównie Embedded i nigdy to C++ na małych mikrokontrolerach i troszkę większych mi nie pasowało, a Rust w swojej dokumentacji obiecuje, że on tyle rzeczy zrobi za mnie, za darmo i w ogóle ja tego nie będę widział w kodzie maszynowym, że musiałem spróbować. Troszkę się odbiłem, ale jestem bardzo zadowolony z tego, że mnie to nie odstraszyło aż tak bardzo.

 

Jasne.

 

M.K.: À propos nieodstraszenia, to chciałem dodać, że Rust był pierwszym językiem, w którym w zasadzie nie widziałem żadnej jakiejś takiej większej luki, i to był w zasadzie taki pierwszy język, w którym powiedziałem, że WOW, to faktycznie może być język taki uniwersalny.

 

Brzmi całkiem dobrze. To spróbujmy może osadzić ten język na firmamencie innych języków programowania, jakoś go porównać. Gdybyście mogli powiedzieć, czym on się wyróżnia, już trochę padło tutaj na ten temat, co może być taką specyfiką tego języka, ale gdybyście mogli tutaj właśnie podsumować, co go odróżnia od innych języków, a jakie też może z kolei inspiracje z innych języków tutaj widzicie przeniesione do Rusta?

 

M.K.: Wydaje mi się, że na pewno go wyróżnia to, jakie ma połączenie ficzerów niekoniecznie konkretne ficzery, lecz połączenie. Bo osobiście nie znam żadnego języka, który jest tak wydajny, tak niskopoziomowy, a jednocześnie bez użycia słowa kluczowego unsave. Kompilator nam gwarantuje, że ten kod będzie wolny od wszystkich brzydkich rzeczy, typu jakieś losowe mazanie po pamięci. Rust jest świadomy tego, że to jest coś trudnego do osiągnięcia, więc w ogóle autorzy mówią o czymś takim, jak weirdness budget, czyli że Rust ma określony budżet na wszelkie swoje dziwactwa i żeby osiągnąć ten cel, że mamy ten język bezpieczny, który jednocześnie jest szybki i niskopoziomowy, Rust ma w zasadzie takie dwie unikalne cechy, bo ma concept of ownership, czyli w zasadzie każdy obiekt ma dokładnie jednego posiadacza, i cały concept pożyczania i concept referencji. 

To są takie dwie unikalne rzeczy. Natomiast autorzy starają się, żeby wszystkie rzeczy, które nie są kluczowe do osiągnięcia tego celu, czyli oprócz tego ownership i borrowing raczej ficzery są pożyczone z innych języków, np. Pattern Matching jest, powiedzmy, pożyczony z OCamla i innych języków tego typu, trejty są wzięte z Haskella i składnia generalnie jest C++, mimo że nie musiała być taka itd.

 

P.D.: Ja może odpowiem tak bardzo przyziemnie. Całe cargo i ten cały tooling, który wokół Rusta tak naprawdę jest, bo on jest dodawany w komplecie. Instalujesz Rusta, który ma po prostu skrypt rust.app, uruchamiamy na platformie, którą Rust wspiera i nagle masz Rusta. To nie jest paczka, którą ścągasz chociażby ze strony Golanga, ropakowujesz, uruchamiasz instalator i on coś tam ściąga. Tutaj uruchamiasz jeden mały skrypt, który ściągasz ze strony i cały tooling jest już u Ciebie. I jak jest już u Ciebie, to odkrywasz, że z tym toolczeniem przyszło bardzo dużo standardowych dla Rusta narzędzi i to wszystko jest takie skondensowane. Ty nie musisz szukać w paczkach swojej dystrybucji czy exe-ków na inne systemy, to wszystko jest. No i jest takie cargo, które jest menedżerem paczek w Rust i oczywiście, to menedżery paczek w innych językach programowania są, od pewnego momentu zaczęły się pojawiać, jest sobie w Pythonie MPM dla Java Scriptu, natomiast cargo jest, po pierwsze, od samego początku w Rust, no prawie od samego początku, ale dla zwykłych śmiertelników, którzy nie są Michałem: od samego początku. I po prostu działa, robi wszystko, czego potrzebujesz. „Menedżuje” paczkami, rozwiązuje zależności. 

A właśnie, Rust ma taką wspaniałą rzecz, której inne języki nie mają, tzn. jedno centralne repozytorium paczek. Jeżeli jest jakaś paczka, która nie jest Twoją prywatną paczką, którą chcesz sobie gdzieś tam trzymać na boku, ponieważ jest firmowa i tajna, to te wszystkie paczki lądują w jednym miejscu, w jednym repozytorium stamtąd są ściągane. 

Więc to jest taki kolejny sposób Rusta na to, żeby wszystko było ładnie skondensowane, opakowane i dostarczone Ci prosto pod nos. I cargo jest w stanie również wysyłać te paczki na ten serwer, tzn. jesteś sobie w stanie wyleopować swoją paczuszkę, swojego crate’a, bo tak to się w Rust nazywa, który będzie coś robił, nie wiem, wrapował jakąś bibliotekę albo dostarczał jakąś funkcjonalność i przy pomocy tego samego cargo, które zainicjował Ci projekt, wysłać go do repozytorium. I to wszystko dzieje się w jednym miejscu. Rusta można debugować w GDB, tak jak wiele programów w C i w C++. I również z dystrybucją przychodzą skrypty pythonowe, które w tym GDB pozwalają ładnie wyświetlać te wszystkie dodatki Rusta, takie dodatki programistyczne, żeby się łatwiej debugowało. I tak, to jest takie wielkie WOW dla mnie, który jest niby bardzo podobne do innych języków, ale jest bardzo unikalny w swoich rozwiązaniach.

 

Okej. Muszę powiedzieć, że bardzo ładną laurkę tutaj wystawiacie temu językowi. I teraz właśnie chciałbym Was zapytać o Wasze wrażenia z drugiej strony. Bo na koniec dnia, jak by nie było, Rust, jak każdy inny język programowania jest językiem, w którym wyrażają się programiści, którzy mają różne opinie na temat języka. Pewne elementy się im podobają, na pewne narzekają.

Sporo już powiedzieliście o tym, co Wam się podoba w tym języku, jeśli jeszcze o czymś nie wspomnieliście, to też poproszę Was, żeby jeszcze dopowiedzieć ewentualnie, co zdecydowanie jest na plus tego języka, a może też, żeby powiedzieć, co Was razi, czego Wam brakuje może w tym języku w takiej codziennej pracy.

 

P.D.: Mnie najbardziej razi składnia oraz learning curve, ponieważ wejście w ten język nie jest takie proste. To nie jest tak, że posadzisz pierwszą osobę z brzegu, która nigdy nie miała nic wspólnego z programowaniem, i powiesz „programuj w Rust”. Ja jestem w stanie to zrobić przykładowo z Pythonem, ponieważ to jest język prosty. Jestem w stanie zrobić to z Java Scriptem przy odpowiednim przygotowaniu, nie jestem w stanie zrobić z Rustem. Hello Word jest proste. Po Hello Word zaczynają się schody. I mimo wszystko, nawet jeżeli jesteś doświadczonym programistą, przynajmniej tak mi się wydaje, może po prostu ja nie jestem wystarczająco doświadczony, ale chwilę czasu musisz spędzić nad poznaniem języka, a nie po prostu rzucić się na głęboką wodę i stwierdzić: projekt w jedno popołudnie to jest to, co zrobię. 

Jest jeszcze kwestia bibliotek, jak w każdym języku. To jest tak, że aktualnie w Rust są biblioteki tak naprawdę „do wszystkiego”, ale po pierwsze, rzeczy, które są rzadziej wykonywane, bardzo specyficzne, są oczywiście w o wiele mniejszej części reprezentowane w tym ekosystemie, i oczywiście, jest taki tool, który się nazywa bindgen – on pozwala „tłumaczyć” pliki nagłówkowe z bibliotek C do Rusta tak, żeby stworzyć crate’y, które korzystają z bibliotek z C. I on działa fajnie dla C. Przy C++ już zaczyna się problem. Więc jeżeli mamy bibliotekę w C++, czasami trzeba więcej czasu na zintegrowanie jej z takim projektem, a napisanie jej od nowa w Rust czasami może być po prostu niemożliwe.

 

M.K.: To ja może bardziej z pozytywami tutaj wejdę, bo oczywiście, niestety learning curve jest, jaki jest, ale jakby dzięki temu, że ten kompilar, powiedzmy, sprawdza więcej rzeczy niż przeciętny język, to co prawda, tak jak Paweł mówił, nie można oczekiwać, że interna, który nie zna Rusta, rzuci się do projektu i żeby napisał jakiś ficzer w Rust, ale z drugiej strony, jeśli taki intern w końcu napisze ten ficzer, wystawi full requesta, to ja się nie będę bał, że on zepsuje produkcję. Bo jak by miał zepsuć, to kompilator by go wyłapał bądź, powiedzmy, jakieś bardziej high-levelowe rzeczy by w review wylazły. 

Natomiast jeśli chodzi o takiego np. C++, albo też Golange, który też niby jest językiem, który więcej gwarantuje, ale wydaje mi się, że te języki mają tak dużo tzw. footgun’ów, że poziom wiedzy, który jest wystarczający do tego, żeby napisać coś działającego, nie jest tym samym poziomem, co poziom potrzebny do kontrybuowania do jakiegoś większego projektu, który ma się nie wywalać na produkcji. I też dodam tutaj, że ja już tak naprawdę nie pamiętam, jak to było, kiedy się uczyłem Rusta, bo to było jeszcze przed wydaniem wersji 1.0, ale w tym momencie, jak już piszę w Rust, to ja czuję taką jakby świeżość, że nie muszę z tyłu głowy trzymać jakichś takich drobnostek, typu czy to może być nilem, czy to nie może być nilem, a co jeśli ktoś mój obiekt zacznie wołać z wielu wątków, czy powinienem na coś zrobić asserta, czy nie powinienem. I wszystkie takie rzeczy, które w innych językach są jakby tylko i wyłącznie w dokumentacji, w Rust ja w ogóle nie muszę o tym myśleć. Mogę się skupić na logice.

 

Jasne. To Ty, Michał, wspominałeś o tym, że ten język, powiedzmy, z biegiem czasu, z biegiem rozwoju, staje się coraz bardziej niskopoziomowy, w związku z tym chciałbym Was zapytać, jakie są zastosowania tego języka. Jakie firmy go wykorzystują, gdzie go można najczęściej znaleźć?

 

M.K.: Ja tylko jeszcze się wtrącę do tego pytania, że te rzeczy z tą niskopoziomowością to się jakby wszystko stało jeszcze kilka lat przed wersją 1.0, powiedzmy ten Rust stracił garbage collector i stracił też tzw. lekkie wątki w stylu gollangowym, przez co Rust zaczął bardziej się mapować na coś, co system operacyjny bądź hardware dostarcza. Natomiast od tamtego momentu Rust cały czas jest niskopoziomowy, z tym że nie chcę straszyć tutaj słowem niskopoziomowy, bo nadaje się również do innych rzeczy. Ale może wróćmy do Twojego pytania.

 

P.D.: Ja nie rozumiem, o co chodzi ze straszeniem niskopoziomowością. Niskopoziomowość jest znakomita, ja polecam każdemu. A jeżeli chodzi o zastosowania, to, no cóż, na Rusta jest hype, głównie dlatego, że jest szybki, że jest wydajny, a jednocześnie dostarcza dużo mechanizmów, które są znane z tym języków wysokopoziomowych, dlatego taki DropBox przepisał tak naprawdę bibliotekę Googla, Brotli do kompresji na Rusta i używa jej u siebie. 

Oczywiście Mozilla, która teraz dewelopuje quantum, czyli ten następny silnik renderujący dla swojej przeglądarki, w Rust pisze kawałek, który będzie obsługiwał CSS. Można to znaleźć w nightly, nie jest jeszcze w oficjalnych bildach, natomiast myślę, że to się stanie, ponieważ Rust jest już stabilny, prawda? A, właśnie! Jeżeli chodzi o Embedded, o Embedded, niskopoziomowość… jest taki projekt, który nazywa się SoloKey, nie wiem, czy słyszałeś. To jest tak naprawdę klucz U2F, który powstał na rzecz kickstatera i został stworzony w formie Open Hardware i oni drugą wersję właśnie napisali w Rust, jeżeli chodzi o firmware, właśnie dlatego, że oprócz tego, że jest szybki i wydajny, jest również bezpiecznym językiem. Tak naprawdę wśród sponsorów samego Rusta jest dużo firm, które zajmują się ogólnie rzecz biorąc sieciami. Jest oczywiście Mozilla, spod której skrzydeł ten język wyszedł, ale jest również Amazon ze swoim AWS-em, który niektóre swoje komponenty w Rust pisze. Chociażby do AS2 czy S3. Te oczywiście bardziej potrzebujące wydajności, bo też nie można się spodziewać tego, że wszystkie firmy nagle cały swój kod przerzucą na Rusta, prawda? Bo to nie ma biznesowego sensu.

Również ARM, jako firma produkująca IP do procesorów jest zainteresowana Rustem i jest zainteresowana tym, żeby ten Rust działał na jej procesorach. To oznacza moim zdaniem, że ten język został zauważony i będzie się rozwijał również dlatego, że warto? Nie wiem

 

No jak najbardziej. Myślę, że warto, skoro język się rozwija, zyskuje na popularności, zyskuje trakcje, to tak, to pewnie na koniec dnia się rpzekłada na to, że po prostu warto.

Okej. Czy jest jakaś taka gama albo wielkość projektów, może branż, w których Rust sprawdza się najlepiej?

 

M.K.: Rust w zasadzie nawet na swojej stronie, jak się wejdize na stronę główną Rusta, to pokazuje takie cztery filary, gdzie Rust się dobrze sprawdza. Jest to CLI, czyli tworzenie narzędzi konsolowych, gdzie takie drobne rzeczy, jak chociażby biblioteka do parsowania argumentów jest tak świetnie zrobiona i zintegrowana z językiem. 

Kolejnym takim filarem jest WebAssembly, i wydaje mi się, że Rust jest w tym momencie językiem, który ma najlepsze wsparcie dla WebAssembly i jeśli ktoś cokolwiek robi w WebAssembly, to najprzyjemniej to się robi w Rust. 

Kolejną taką rzeczą jest to, co już Paweł mówił, czyli ogólnie pojęte programowanie sieciowe. I to chodzi zarówno o typowy back-end, jak i o rzeczy leżące u podstaw, typu jakieś proxy, jakieś sterowniki. Bo jeśli chodzi o back-end, to świetnie pasuje do Rusta, bo potrzebujesz tutaj bezpieczeństwa, bo jednak przechodzi przez to milion danych, które pochodzą z zewnątrz i potrzebujesz tutaj też wydajności. Więc jakby naturalnie tutaj Rust pasuje. I kolejną taką rzeczą jest Embedded, gdzie królowało do tej pory C. I może Paweł coś więcej na ten temat powie.

 

P.D.: Dalej króluje C, natomiast myślę, że to bardziej wynika z tego, ze ludzie łatwo się przyzwyczajają. To, co chciałem dodać to to, że w Rust i tak naprawdę pod skrzydłami Rusta jako języka i jako grupy ludzi, która się tym językiem zajmuje, są grupy pracujące nad tymi konkretnymi technologiami, które Michał wymienił. Tzn. Rust jako język wie, że jest dobry do tego, i popycha ludzi, żeby rozwijali oprogramowanie, biblioteki, tooling właśnie w tym kierunku. I jeśli chodzi o Embedded, to Rust oficjalnie wspiera rdzenie Cortex w ARMA oraz MSP430, czyli tak naprawdę bardzo mały rdzeń od Texas Instruments, który można znaleźć tak naprawdę w takich bardzo wbudowanych, prostych urządzeniach. I to jest wspierane przez grupy skupione wokół twórców i propagatorów Rusta.

 

Padło wiele pochlebnych słów na temat toolingu Rusta z Waszych ust. Chciałbym Was zapytać o ten ekosystem wokół Rusta: biblioteki, frameworki, idee, być może inne narzędzia, które są używane na co dzień przez Was w Waszej pracy. Czy te podstawowe takie building blocki, z których budujemy aplikacje w Rust są uzupełnione, pokryte, jest z czego wybierać?

 

P.D. Tzn. może ja zacznę od tego, co wymieniłeś na końcu, tzn. IDE. Tak naprawdę Rusta można edytować wszędzie, można i w notatniku. Natomiast jeżeli chodzi o IDE, każde, które w tym momencie wspiera C i C++, ma jakąś wtyczkę do Rusta. Czy to jest VES code, czy to jest Sublime, czy to jest C-Lion – wszystkie wspierają i działa to tam całkiem fajnie. Osobiście jestem fanem Vima i również nie narzekam, mam wszystko dostępne. Jeżeli chodzi o biblioteki, tak jak już wspomniałem, tak naprawdę w Rust są biblioteki do wszystkiego. 

Mam tutaj kilka takich, które obiecałem sobie wymienić, ponieważ moim zdaniem są świetne do rzeczy, do których zostały stworzone. Jest to Rocket, to jest taki framework back-endowy, gdzie tak naprawdę w trzy sekundy jesteś w stanie postawić swój własny serwer i serwować jakieś dynamiczne strony. Jest troszkę prostszy Word, który już nie dostarcza tylu fajnych ficzerów, natomiast jest i szybki, i prosty. Są oczywiście jakieś biblioteki używane jako silniki gier, jak Amethyst. 

Szczerze powiedziawszy mam je tutaj, ponieważ obiecałem sobie, że będę propagował Rusta. Brzmimy teraz trochę jak psychofani, mam nadzieję, że nie aż tak, jak mi się wydaje. Natomiast, o! Był WebAssembly. Do WebAssembly jest bardzo fajna biblioteka, która nazywa się Ju. Ona jest taka lekko reactowa, więc myślę, że ludzie, którzy Reacta używają, bardzo szybko się w niej odnajdą. I oczywiście Diesel. Diesel reklamuje się jako najprostszy sposób do interakcji z bazami danych w Rust i rzeczywiście można to trochę porównać do sposobu, w jakim Django z bazami współpracuje, nie do końca, ale myślę, że to jest całkiem dobre porównanie. Mówiłem również o tym, że Rust posiada centralny system paczek i tak naprawdę, czegokolwiek byś nie potrzebował, znajdziesz tam albo nie znajdziesz w ogóle. I z naciskiem bardziej na to pierwsze – że znajdziesz tam. 

 

Jasne, a powiedzcie, jak ten język się teraz rozwija? Jak wygląda społeczność wokoło niego, różnego typu wydarzenia? Jak to się kształtuje?

 

M.K.: Ja może zacznę od społeczności, bo wydaje mi się, że Rust ma bardzo fajną społeczność wokół siebie i przede wszystkim bardzo przyjazną. Jeśli przyjdziesz na jakieś forum Rusta bądź jego Discorda z naprawdę głupim pytaniem, to ludzie Cię nie odrzucą, tylko bardzo chętnie w ciągu kilku minut Ci pomogą, jeszcze dodając jakiś elaborat na pytanie, które może dodatkowo chciałbyś zadać, tak że tutaj jest naprawdę bardzo fajna społeczność. Jest też bardzo dużo oficjalnych bądź nieoficjalnych konferencji rustowych. 

Myślę, że tutaj nie będę wymieniał żadnych konkretnych z nazwy, jak ktoś chce, to można sobie znaleźć. Natomiast jeśli chodzi o rozwój samego języka, jakby tutaj, oczywiście rozwijane są cały czas biblioteki i, nawiązując do tego, co padło, mówił, że raczej teraz na Great Sale znajdziemy bibliotekę, niż jej nie znajdziemy, to ja powiem, że kilka lat temu nie było tak różowo, tzn. często okazywało się, że tej biblioteki tam nie było, trzeba było samemu coś napisać, ale teraz naprawdę wydaje mi się, że tworzenie bibliotek przeszło też jakby z pojedynczych ludzi, którzy po prostu piszą taką bibliotekę, bo chcą, do takiej sytuacji, że piszą ją… Dajmy taki przykład: w tym momencie biblioteka do Api AWS-owego jest po prostu tworzona i utrzymywana przez AWS. Więc dochodzimy do takiego momentu, że ludzie chcą, żeby do ich produktów istniała biblioteka, a raczej nie w drugą stronę. 

A jeśli chodzi o sam język, to wydaje mi się, że w tym momencie Rust jest na takim etapie, że takie duże ficzery zostały już dowiezione, ten język jest, powiedzmy, taki kompletny. Z takich ostatnich większych rzeczy, jakie weszły to wsparcie dla Async oraz const generyki i w tym momencie prace nad tym językiem to jest, powiedzmy, polerka, praca nad pięknymi błędami kompilacji i łatanie dziur. I w tym momencie są ficzery, które pod spodem są nowym ficzerem, ale dla użytkownika to jest po prostu usunięcie jakiegoś ograniczenia w języku.

 

Myślę, że na to pytanie już odpowiedzieliście, ale chciałbym jeszcze się upewnić. Czy to jest dobry język na start? Czy warto od niego zacząć naukę programowania? Jeśli tak, to od czego warto zacząć? Może jakieś materiały, które możecie polecić?

 

P.D.: Ja będę się trzymał tego, co powiedziałem wcześniej. TO nie jest dobry język jako pierwszy język. Jako drugi – w momencie kiedy poznasz już arkana programowania i problemy z tym związane – jak najbardziej. Natomiast jako pierwszy Rust czasami ukrywa pewne elementy programowania, które w każdym innym języku byś poznał, a Rust po prostu załatwia to za Ciebie. I to jest moim zdaniem dosyć duża pułapka dla początkujących programistów.

Inna sprawa, że ja tak naprawdę każdego początkującego programistę najpierw przeczołgałbym przez Assemblera, żeby zrozumiał, o co chodzi w tych komputerach, ale Rust to chyba nie na pierwszy język. Nie wiem, czy się zgodzisz, Michale?

 

M.K.: Ja też się zgadzam, że to jest super język, ale jako drugi język. Powiedzmy, po krótkim kursie Phytona, myślę, że można śmiało wskakiwać w Rusta. Wręcz z nielicznych ludzi, którzy uczą się Rusta jako pierwszego języka bądź pierwszego po naprawdę ledwo liźnięciu programowania, zauważyłem, że ci ludzie mają niejako trochę łatwiej, bo jest mniej rzeczy, których muszą się oduczyć. Bo jak pisanie w jakiejś Javie czy C++ sprawia, że wyrabiają się pewne patterny, które są na raz nieprzetłumaczalne. A kiedy uczysz się Rusta dość wcześnie, to się okazuje, że te rzeczy, o których ludzie mówią, że są trudne w Ruscie, okazują się wcale nietrudne, tylko po prostu inne.

 

Myślę, że to jest bardzo sensowne podejście. Czy wobec tego ten język ma szansę zabrać większą część tortu od C, C++? Jaką przyszłość widzicie przed Rustem?

 

P.D.: Wydaje mi się, że tak, ale to będzie taka wyboista droga, bo to jest tak, że ten jeżyk już tutaj z nami jest. On ma te kolce, ale my go już nie wyrzucimy, on będzie dalej z nami mieszkał od dzisiaj, wydaje mi się, że musimy go przyjąć, udomowić i stosować w jak największej ilości projektów, ponieważ tak naprawdę Rust jest językiem do wszystkiego. Jest wystarczająco wydajny, żeby pisać w nim drivery, i wystarczająco wysokopoziomowy, żeby wszelkie abstrakcje szalonych architektów były łatwo implementowany.

 

M.K.: Ja tu jestem bardziej optymistyczny niż Paweł, bo odpowiedź na pytanie, czy ma szansę zabrać trochę tortu od C czy C++, powiedziałbym, że co do tego nie mam akurat żadnej wątpliwości. Oczywiście te języki pozostaną, tak samo, jak pozostał z nami 44:20 Fortran czy Cobol. Ja bym się tutaj zastanawiał, czy Rust ma szansę zabrać trochę tortu od takich języków, jak Golang czy wręcz Phyton i Java Script. Bo wychodząc z tej swojej, powiedzmy, bardziej niskopoziomowej niszy, i tak mimo wszystko to jest język, w którym się po prostu przyjemnie pisze i wg ankiet Stack overflowa jest po prostu uwielbiany przez programistów, więc tak – myślę, że ma szansę.

 

Tak, też miałem właśnie okazję czytać tę ostatnią ankietę i też mnie uderzyło, jak bardzo uwielbiany jest ten język. Paweł, przerwałem, coś chciałeś powiedzieć.

 

P.D.: Tak, bo ja jestem ogólnie z natury malkontentem i chciałbym jeszcze łyżkę dziegciu tutaj do tego konkretnego pytania dorzucić. Jeżeli chodzi o tę działkę, w której Rust moim zdaniem sprawdzałby się znakomicie, tzn. oprogramowanie, które musi być wolne od błędów. W sensie „musi” podkreślone dwa razy, typu autonomiczna jazda samochodem albo jakaś awionika. Wszędzie tam, gdzie bardzo ważne jest to, żeby człowieka nie zabić albo nie spowodować wielkiej katastrofy. Myślę, że tutaj Rust ma trochę do nadrobienia. Dlatego, że mimo że jest językiem, który pozwala na bardzo bezpieczne programowanie, to na samym dole jest kompilator. I ten kompilator w wielu zastosowaniach musi być certyfikowany. Można się domyślić, że nikt nie będzie certyfikował takiego kompilatora Rusta, jaki mamy w tym momencie, ale można pomyśleć o czymś na około, tzn. o kompilowaniu tego kodu do np. C. Jest coś takiego jak mrustc, prawda, Michał, dobrze mówię?

 

M.K.: Tak.

 

Jest coś takiego.

 

P.D.: Jest coś takiego jak mrustc i z tego pośredniego kroku kompilowanie już certyfikowanymi albo udowodnionymi matematycznie kompilatorami na już docelowy sprzęt. Myślę, że to jest droga. Czy tym tropem pójdziemy? – nie wiem. Bardzo bym chciał.

 

Muszę Wam powiedzieć, że bardzo dobrze zareklamowaliście ten język, ale było to takie zdrowe podejście, nieocierające się jeszcze o psychofana, więc myślę, że jak najbardziej wszystko jest w porządku.

 

M.K.: Możemy odetchnąć z ulgą.

 

Tak. Zresztą, jeśli jest faktycznie co polecać, co reklamować i o czym tutaj mówić, to myślę, że same te możliwości świadczą same za siebie, nie trzeba tutaj dorabiać zbędnego marketingu.

Super. Michał Krasnoborski i Paweł Dulęba z firmy CodiLime byli moimi gośćmi. Rozmawialiśmy o języku Rust. Panowie, bardzo Wam dziękuję za poświęcony czas.

Dzięki za rozmowę!

 

P.D.: Dziękujemy.

 

Powiedzcie jeszcze, proszę, gdzie Was można znaleźć w internecie? Może jakieś strony, materiały, do których warto słuchaczy odesłać?

 

P.D.: W sumie mnie nie można znaleźć w internecie, ale można próbować na GitHubie pod moim nazwiskiem albo w sumie na blogu CodiLime. Tam też dużo materiałów na temat Rusta można znaleźć.

 

M.K.: Ja powiem to samo. Raczej w internecie się ukrywam, aczkolwiek jeśli ktoś chce mnie znaleźć na GitHubie, to z pewnością znajdzie. Na blogu CodiLime też jak najbardziej.

 

Świetnie, zatem tam odsyłamy słuchaczy. Z mojej strony jeszcze raz bardzo Wam dziękuję i do usłyszenia.

Cześć!

 

P.D.: Dziękujemy!

 

M.K.: Cześć!

 

I to na tyle z tego, co przygotowałem dla Ciebie na dzisiaj. Rust to bardzo ciekawy język programowania, który zyskuje bardzo na popularności, a swoją główną kartę przetargową upatruje w przetwarzaniu współbieżnym i bezpieczeństwie. Jako że jego adopcja narasta, a cały ekosystem staje się coraz bardziej dojrzały, należy przypuszczać, że coraz więcej firm i programistów będzie po niego sięgać w przyszłości.

Jeśli ten odcinek był dla Ciebie interesujący i przydatny, odwdzięcz się, proszę recenzją, oceną lub komentarzem w social mediach. Jeśli masz jakieś pytania, pisz śmiało na krzysztof@porozmawiajmyoit.pl. Zapraszam też do moich mediów społecznościowych.

Ja się nazywam Krzysztof Kempiński, a to był odcinek podcastu Porozmawiajmy o IT o języku Rust. Zapraszam do kolejnego odcinka już wkrótce, cześć!

 

+ Pokaż całą transkrypcję
– Schowaj transkrypcję
mm
Krzysztof Kempiński
krzysztof@porozmawiajmyoit.pl

Jestem ekspertem w branży IT, w której działam od 2005 roku. Zawodowo zajmuję się web-developmentem i zarządzaniem działami IT. Dodatkowo prowadzę podcast, kanał na YouTube i blog programistyczny. Moją misją jest inspirowanie ludzi do poszerzania swoich horyzontów poprzez publikowanie wywiadów o trendach, technologiach i zjawiskach występujących w IT.