Spis Treści
Materiały w języku polskim🔗
Bezpłatne on-line (niektóre też w formie papierowej)🔗
- 
Steve Klabnik, Carol Nichols i społeczność Rusta Język Programowania Rust – tłumaczenie świetnej książki The Rust Programming Language.
To tłumaczenie tworzone jest przez społeczność i nie jest jeszcze kompletne. Zachęcam do pomocy w jego uzupełnieniu – zobacz stronę i repozytorium tłumaczenia.
Niezależne, kompletne tłumaczenie tej książki wydano w tradycyjnej formie nakładem PWN.
 - 
Przewodnik po Języku Rust – przewodnik krok po kroku pisany przez społeczność, w wielu językach.
 - 
Bartłomiej Michalski DevEnv > Rust – zbiór artykułów:
 
Wideo, bezpłatne on-line🔗
- Arkadiusz Sas Rust – kurs od podstaw – seria filmów.
 - WEB3Dev – Devs in Chains – kanał z filmami, m.in. na temat Rusta:
 - Programowanie w Rust – program wyszukujący duplikaty – seria filmów ukazująca proces pisania programu wyszukującego zduplikowane pliki.
 - Order of Devs Tutoring – kanał z filmami i transmisjami na żywo, m.in. na temat Rusta:
 - Paweł Walus (Order of Devs) Rust – projekt od podstaw – seria filmów poruszająca zaawansowane tematy, jak aplikacje webowe czy bazy danych.
 - Mateusz Matejuk Jak wystartować z Rustem? – nagranie webinaru zorganizowanego przez ALTEN Polska.
 - NetCanv – seria filmów ukazująca proces pisania “painta multiplayer”.
 
Książki (w formie papierowej)🔗
- Jim Blandy, Jason Orendorff, Leonora F. S. Tindall Programowanie w języku Rust / Wydajność i bezpieczeństwo, Helion
 
Materiały w języku angielskim🔗
Bezpłatne on-line (niektóre też w formie papierowej)🔗
- Steve Klabnik, Carol Nichols i społeczność Rusta The Rust Programming Language – dobra, kompletna książka.
 - Tour of Rust – przewodnik krok po kroku pisany przez społeczność.
 - Mara Bos Rust Atomics and Locks / Low-Level Concurrency in Practice – dobra książka o współbieżności w Ruście.
 - Rust Language Cheat Sheet – zwięzła ściąga z ładnymi rysunkami i odnośnikami.
 - Rust by Example – Rust w przykładach. Zawiera przykłady, które można wykonać on-line.
 - rustlings – zestaw ćwiczeń polegających na poprawianiu błędów w programach, zawiera wskazówki.
 - Rust Design Patterns – zbiór dobrych praktyk z przykładami.
 
Wideo, bezpłatne on-line🔗
- Rust Tutorial Full Course – długi, jednoodcinkowy, popularny tutorial wideo.
 
Zbiory materiałów🔗
- Learn Rust – zbiór materiałów polecanych na oficjalnej stronie Rusta.
 - The Little Book of Rust Books – głównie książki dostępne bezpłatnie on-line.
 - Learning Rust – zbiór wybranych materiałów.
 - rust-learning – obszerny zbiór materiałów.
 
Narzędzia🔗
- 
Kompilator i podstawowe narzędzia – zestaw niezbędny; oprócz niego polecam zainstalowanie jednego z niżej wymienionych IDE.
Uwaga: by uniknąć instalowania pełnego Visual Studio pod Windows, można, przed uruchomieniem instalatora Rusta, zainstalować Build Tools for Visual Studio (do pobrania z sekcji Wszystkie materiały do pobrania > Narzędzia dla programu Visual Studio tej strony).
 - 
Visual Studio Code VSCode lub VSCodium, z wtyczkami: rust-analyzer, CodeLLDB, Tombi i Dependi.
 - 
Zed - nowocześniejsza alternatywa dla Visual Studio Code.
 - 
CLion z wtyczkami zawartymi w Rust bundle oraz, opcjonalnie, z wtyczką EduTools zawierającą interaktywne samouczki.
Wersja community CLiona jest bezpłatna, ale nie umożliwia debugowania. Polecam więc wersję pełną, która jest bezpłatna dla studentów i pracowników uczelni.
CLion działa nieco wolniej niż Visual Studio Code, ale wydaje się być bardziej przyjazny dla początkujących. Oba IDE oferują podobną, bogatą funkcjonalność.
 - 
lapce – obiecujące, lekkie IDE, ale o mniejszej funkcjonalności (m.in. brak możliwości debugowania).
 - 
Are we (I)DE yet? – wykaz i porównanie dostępnych edytorów i IDE.
 - 
The Rust Playground – pozwala na kompilowanie i uruchamianie programów Rusta on-line.
 - 
Aquascope Playground – narzędzie on-line wizualizujące zachowanie programu napisanego w Ruście w kontekście działania nadzorcy pożyczania (borrow checker).
 
Przykładowe programy🔗
Biblioteki (skrzynie)🔗
Rejestr dostępnych skrzyń można przeszukiwać na crates.io lub lib.rs. Zaś listę polecanych bibliotek można znaleźć na blessed.rs.
Silniki gier i obsługa multimediów🔗
- Macroquad – prosty silnik gier, minimalistyczny i przenośny
 - Bavy – zaawansowany i bardzo popularny silnik gier
 - Fyrox – silnik gier + edytor
 - Nannou – przenośny zbiór bibliotek do kreatywnego kodowania
 - Comfy – produktywny i łatwy w użyciu silnik gier
 - Notan – przenośny zbiór bibliotek do tworzenia aplikacji multimedialnych, w tym gier
 - Ggez – biblioteka do tworzenia gier
 - Are we game yet? – lista silników gier i innych bibliotek związanych z grami
 
Wymienione silniki są wieloplatformowe, zaś większość wspiera też WebAssembly. Jednakże pisząc prostą grę działającą w przeglądarce, można też rozważyć użycie jednej z bibliotek wymienionych w sekcji dotyczącej WebAssembly.
WebAssembly🔗
Programy Rusta można skompilować do WebAssembly i, podobnie jak programy napisane w JavaScript, wykonać je bezpośrednio w przeglądarce WWW.
Pisząc tego typu programy można wykorzystać niskopoziomową bibliotekę web-sys (zapewniającej dostęp do API przeglądarki) lub jeden z licznych frameworków, np. Dioxus, leptos, Yaw, Sycamore, MoonZoon, tauri (dla osób znającym JavaScript i jego frameworki), …
WebAssembly jest też wspierane przez wiele Rustowych silników gier.
Serwery WWW, REST, websockets, frameworki webowe🔗
- axum – aktualnie najczęściej rekomendowany framework webowy
 - actix – szybki i pragmatyczny framework
 - rocket – kompletny i łatwy w użyciu framework
 - Are we web yet? / Web Frameworks – lista bibliotek webowych / frameworków
 
Generowanie liczb (pseudo-)losowych:🔗
- rand – potężna i popularna biblioteka,
 - fastrand – lekka alternatywa, łatwiejsza, ale o mniejszych możliwościach.
 
Graficzny Interfejs Użytkownika (GUI)🔗
- Iced – prosta biblioteka zainspirowana językiem Elm.
 - Dioxus, tauri – biblioteki oparte o technologie webowe
 - egui – biblioteka GUI “trybu natychmiastowego”, współpracująca z większością silników gier
 - GTK i relm4 – interfejs do biblioteki GTK napisanej w C oraz jego wysoko-poziomowe opakowanie
 - fltk – interfejs do lekkiej biblioteki FLTK (Fast Light Toolkit) napisanej w C++
 - slint – komercyjna biblioteka, ale oferowana też na bezpłatnych licencjach, np. GPL
 - Are we GUI Yet? – lista bibliotek
 
Można też zbudować interfejs webowy za pomocą bibliotek z sekcji dotyczącej WebAssembly.
Wiersz poleceń, konsola🔗
- clap – parser parametrów wiersza poleceń, wygodny i o dużych możliwościach
 - bpaf, argh, gumdrop – inne parsery, lżejsze, ale o mniejszych możliwościach
 - lexopt, pico-args – minimalistyczne parsery
 - termcolor – biblioteka do wypisywanie w terminalu w kolorze
 - crossterm – biblioteka do zaawansowanej obsługi terminala, obsługująca m.in. przenoszenie kursora, kolor, przewijanie, zdarzenia
 - indicatif – biblioteka rysująca w konsoli paski postępu
 
Projekty – propozycje, inspiracje🔗
Ocenianie projektów🔗
Ocena za projekt zależy od jego stopnia zaawansowania i ilości włożonej pracy. Pozytywnie mogą być ocenione nawet niedokończone projekty, jeśli są wystarczające ambitne. Oceniane są przede wszystkim umiejętności programistyczne i kod. Dodatkowego plusa można otrzymać za rozwijanie projektu w repozytorium np. na githubie, co dokumentuje proces tworzenia.
Gra komputerowa🔗
Korzystając z silników gier lub bibliotek multimedialnych, można zaimplementować grę opracowaną samodzielnie, albo reimplementować jedną z istniejących, np. Tetris, Breakout, Wąż (Snake), 2048, Pac-Man, Pong, Space Invaders, Asteroids, Sokoban, Saper, Digger, Pipe Mania, Tower Defense, ….
Przydatne zasoby:
- Code the Classics – książka o pisaniu klasycznych gier, dostępna wraz z dobrze udokumentowanym kodem (w pythonie), grafiką, itd.
 - OpenGameArt, itch.io, GDM, Reddit /r/GameAssets, Game Art 2d, CraftPix, Kenney, Glitch, dumbmanex, Reiner’s Tilesets – strony z bezpłatną (niektóre także z płatną) grafiką do gier
 
Grafika w grze może być bardzo prosta lub schematyczna. Ma ona mały wpływ na ocenę. Można też użyć interfejsu tekstowego jeśli specyfika gry na to pozwala.
Demo, interaktywna ilustracja🔗
Korzystając z bibliotek multimedialnych lub silników gier, można też zaimplementować, interaktywne lub nie, demo, które np.
- pokazuje działanie automatu komórkowego takiego jak Gra w życie,
 - rysuje wybrane fraktale,
 - ilustruje działanie wybranego algorytmu (podobnie jak robi to strona visualgo), np. operacje na kopcu binarnym.
 
Gra planszowa wspomagana komputerowo🔗
Najprostszy przykład komputerowego wspomagania gier planszowych stanowi program (wirtualnie) rzucający kośćmi. Taki program powinien pozwolić na podanie iloma i jakimi kośćmi ma rzucić, tj. ile liczb i z jakiego zakresu ma wylosować. Program powinien też wyświetlić sumę wylosowanych liczb.
Inny przykład stanowi wirtualny zegar szachowy. Ten powinien pozwolić na skonfigurowanie czasu gry i dodatkowego czasu doliczanego po wykonanym posunięciu.
Interfejs każdego z tych programów może być tekstowy lub graficzny (być może warto użyć jakiś silnik gier), ale, dla łatwej dostępności, najlepiej gdyby działał w przeglądarce, po stronie serwera (co raczej niemożliwe w przypadku zegara szachowego), lub, lepiej, po stronie klienta. Z praktycznego punktu widzenia pożądane jest, by program mógł działać na smartfonie.
Można też pokusić się o opracowanie własnej gry planszowej. Przykład takiej gry stanowi Hydraulik, całkowicie napisany w Ruście. Jego główną część stanowi wielo-platformowy program (skompilowano wersje dla Windows, Linux, Android, WebAssembly) napisany przy użyciu silnika gier macroquad, biblioteki tiny-skia do renderowania grafik wektorowych, oraz fastrand do losowania liczb (generator zawarty w macroquad jest niskiej jakości). Program losujący i udostępniający plansze wykorzystuje axum w roli serwera WWW i printpdf do tworzenia PDFów.
Generator labiryntów🔗
Program powinien generować labirynt o zadanych parametrach (wielkości i ewentualnie typie), ale ulosowiony. Może to być zarówno programu wiersza poleceń (tekstowy), jak i serwis WWW działający po stronie serwera lub klienta. Przykładowy generator labiryntów (w formacie rastrowym i PDF) w formie serwisu WWW można znaleźć pod adresem mazegenerator.net.
W przypadku programu tekstowego, labirynt można zaprezentować zarówno w postaci ascii-art, jak i zapisać do pliku SVG lub PDF. Dwa ostatnie formaty można też wyświetlić w przeglądarce. Warto więc ich użyć w przypadku serwisu WWW (uwaga: nie warto wtedy zapisywać plików, ale wysłać ich zawartość do przeglądarki).
SVG to XML-owy format kodujący grafikę wektorową, który można otworzyć przeglądarką internetową. Pliki SVG można wygenerować za pomocą bibliotek, np. svg. Jednakże, można też się wygodnie obejść bez nich, bo w przypadku labiryntu wystarczy wiedza na temat umieszczenia w pliku linii.
Do wygenerowania pliku PDF można użyć biblioteki printpdf.
Kalkulator🔗
Kalkulator może mieć tekstowy lub graficzny interfejs użytkownika i powinien obliczać wartości podanych wyrażeń arytmetycznych.
Jako interpretera wyrażeń arytmetycznych można użyć gotowej biblioteki, np. evalexpr, rsc, fasteval2, meval, eval, cpc, mexprp. Można też napisać własny parser, wykorzystując jedną z bibliotek: nom, pest, combine, lalrpop, peg, lub ręcznie (np. korzystając z tego tutoriala - bardzo dobrego, ale z przykładami w JavaScript).
Obliczenia można wykonywać używając standardowego typu f64 lub z większą precyzją, używając służących do tego bibliotek, takich jak astro-float, num-bigfloat, dashu, rug.
Zadania ze SPOJa, LeetCode lub innych🔗
To propozycja dla osób, które nie chcą tworzyć jednego dużego projektu, a wolałby napisać kilka mniejszych programów. Ocena zależy od liczby i stopnia trudności zadań.
SPOJ (SPhere Online Judge) i LeetCode to serwisy z problemami programistycznymi, który automatycznie sprawdzają rozwiązania, mierzą ich szybkość i tworzą rankingi.
By uzyskać szybkie rozwiązania, warto zapoznać się ze wskazówkami zawartymi w książce The Rust Performance Book autorstwa Nicholasa Nethercote i innych, w szczególności z rozdziałem I/O.