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.
-
Visual Studio Code VSCode lub VSCodium, z wtyczkami: rust-analyzer, CodeLLDB, Even Better TOML i crates.
-
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.