Programowanie w języku Rust
Ten wykład i cały przedmiot jest przygotowany dla osób, które chcą - co oczywiste - nauczyć się języka Rust. Jest to język TRUDNY (moim zdaniem trudniejszy od C++) - ale to zależy od poziomu, który ktoś chce osiągnąć. Krzywa uczenia się tego języka jest stroma, i są w niej dość strome fragmenty, zwłaszcza, gdy dochodzi do praw własności, czasów życia i mechanizmów ochrony pamięci.
Idealnie, kandydat do tego przedmiotu powinien znać język taki jak C++ (najlepiej) lub jakiś inny silnie typowany język kompilowany, w którym widoczne dla programisty są rozterki związane z zarządzaniem pamięcią. Dlatego znajomość języka Java, Go lub języków wysokopoziomowych takich jak Ruby, Python, Perl, Lua lub innych będzie mniej przydatna. Znajomość C++ jest bardzo pomocna ponieważ poprzez znane już analogie i pewne rozwiazania łatwo wykazać jakim językiem jest Rust, w których miejscach jest lepszy a w których - no cóż - trudniejszy jest niż właśnie C++. Bo z tym językiem wydaje się konkurować w pewien sposób.
Program przedmiotu
Kurs programowania w Rust jest podzielony na następujące etapy:
- Wprowadzenie do środowiska języka, historia, metody instalacji, makra, zarządca cargo i analiza prostego przykładu kodu. To pierwsze zderzenie z językiem jest najlepsze dla tych, którzy już znają język C, Java, C++ lub Go, ponieważ składnia jest dość podobna, i można szybko pokonać pierwsze etapy niewiedzy.
- Proste i złożone typy danych, tablice, funkcje tablicowe, wycinki, funkcje wycinkowe, struktury, enumy, oraz dwa najważniejsze typy z biblioteki standardowej: Option oraz Result.
- Zastosowania Option i Result, konwersje pomiędzy nimi, propagacja błędów, własne typy błędów, unikanie NULL (którego w zasadzie nie ma w tym języku).
- Przesłanianie, aliasing, freezing, rzutowanie, generyczność i metody skojarzone (oraz bloki impl, wyświetlanie danych
- Ownership, Borrowing, stos, steta, reguły Rusta dotyczące pożyczania i współdzielenia własności, traity kopiowalne, typ Box, &[], i inne. Tutaj na ostro wchodzimy w zarządzanie pamięcią i różnego typu alokacje.
- Czasy życia, praca z referencjami, widoczność, zakres, reguły odczytu i zapisu pamięci, podstawianie czasów życia. Jest to chyba jednen z najbardziej unikalnych elementów języka i na tym etapie - po zrozumieniu zasad działania Borrow Checkera wszystko to staje się znacznie prostsze (do czasu, aż zaczniemy pisać większe programy...).
- Powtórzenie oraz wyjaśnianie wątpliwości i problemów. Ćwiczenia z programowania w Rust.
W ramach powyższego curriculum studenci nabierają wprawy i rośnie ich znajomość języka. Programy, które piszą na zaliczenie są dość zaawansowane - często są to proste gry lub aplikacje graficzne działające z GUI, rzadziej jakieś algorytmiczne rozwiązania TUI lub CLI.