Język Rust


Materiały w języku polskim🔗

Bezpłatne on-line (niektóre też w formie papierowej)🔗

Wideo, bezpłatne on-line🔗

Książki (w formie papierowej)🔗

Materiały w języku angielskim🔗

Bezpłatne on-line (niektóre też w formie papierowej)🔗

Wideo, bezpłatne on-line🔗

Zbiory materiałów🔗

Narzędzia🔗

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🔗

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🔗

Generowanie liczb (pseudo-)losowych:🔗

Graficzny Interfejs Użytkownika (GUI)🔗

Można też zbudować interfejs webowy za pomocą bibliotek z sekcji dotyczącej WebAssembly.

Wiersz poleceń, konsola🔗

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:

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.

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.