Szkolenie: Zaawansowane programowanie w języku Rust
Szkolenie Zaawansowane programowanie w języku Rust to praktyczny kurs, który uczy wykorzystania typów generycznych, traits, smart pointers, makr, programowania wielowątkowego i asynchronicznego oraz integracji z kodem zewnętrznym, rozwijając kompetencje w zakresie wydajnych i bezpiecznych aplikacji systemowych
- Trenerzy praktycy
- Kameralne grupy
Czas trwania szkolenia:2 dni (16h)
Kod kursu:RUST/PROGADV
Zaawansowane programowanie w języku Rust
Cele szkolenia
Szkolenie przygotowuje do samodzielnego projektowania i implementowania zaawansowanych rozwiązań w języku Rust, z wykorzystaniem typów generycznych, traits oraz smart pointers
Szkolenie uczy stosowania makr oraz metaprogramowania w celu automatyzacji i optymalizacji kodu w projektach Rust
Szkolenie pokazuje, jak efektywnie realizować programowanie wielowątkowe i asynchroniczne, zapewniając bezpieczeństwo i wydajność aplikacji
Szkolenie omawia zasady zarządzania pamięcią oraz wykorzystania unsafe Rust i FFI, przygotowując do integracji z kodem zewnętrznym
Dla kogo?
Programistów posiadających podstawową znajomość języka Rust, chcących rozwinąć umiejętności w zakresie zaawansowanych technik programistycznych
Osób realizujących projekty wymagające wysokiej wydajności, bezpieczeństwa pamięci i integracji z kodem zewnętrznym
Specjalistów IT zainteresowanych programowaniem systemowym, wielowątkowością i asynchronicznością w Rust
Efekty kształcenia
Uczestnik projektuje zaawansowane struktury danych z użyciem generyków i traits
Uczestnik implementuje i testuje makra deklaratywne oraz proceduralne
Uczestnik analizuje i stosuje wzorce programowania wielowątkowego i asynchronicznego
Uczestnik integruje aplikacje Rust z kodem C i Python przez FFI
Uczestnik kontroluje zarządzanie pamięcią i wykorzystuje smart pointers
Wymagania
Podstawowa umiejętność programowania w języku Rust, znajomość koncepcji Ownership i modelu zarządzania pamięcią
W cenie otrzymasz:
Materiały szkoleniowe
Certyfikat ukończenia szkolenia
W przypadku szkolenia w trybie stacjonarnym zapewnimy Ci również lunch oraz sprzęt niezbędny do nauki
Program szkolenia
Zaawansowane elementy języka i wzorce
const generics – parametryzowanie typów wartościami znanymi w czasie kompilacji
Cechy nadrzędne (super traits), cechy rozszerzające (extension traits) oraz implementacje obejmujące wiele typów (blanket implementations)
Cechy znacznikowe Send, Sync, Sized, Unpin oraz struktury opakowujące
Typy fantomowe PhantomData i struktury znacznikowe
Etykietowanie struktur dodatkowymi informacjami
Inteligentne wskaźniki zarządzające własnością i mutowalność wewnętrzna: Box, Rc, Arc, Cell, RefCell, OnceCell oraz OnceLock
Metaprogramowanie przy pomocy makr
Czym jest metaprogramowanie i po co się je stosuje
Jak działają makra w języku Rust i kiedy warto po nie sięgnąć
Porównanie makr deklaratywnych i proceduralnych
Makra deklaratywne (macro_rules!): dopasowanie wzorców, elementy składni, powtórzenia, higiena identyfikatorów, najczęstsze pułapki
Makra proceduralne: trzy rodzaje – tryb funkcyjny, automatyczne wyprowadzanie cech (derive) oraz atrybuty
Praca z drzewem składniowym przy pomocy bibliotek syn i quote, generowanie kodu, raportowanie błędów
Atrybuty pomocnicze i przyjmowanie argumentów konfigurujących zachowanie makra
Higiena, zasięg nazw oraz odwołania do typów spoza miejsca rozwinięcia makra
Testowanie makr
Diagnostyka i rozwijanie makr przy pomocy cargo-expand
Programowanie wielowątkowe
Model wątków w Rust: wątki systemu operacyjnego, koszt ich tworzenia i czym różnią się od zadań asynchronicznych
Uruchamianie wątków przez std::thread::spawn, oczekiwanie na zakończenie przez join oraz przekazywanie wartości zwracanych
Wątki z zasięgiem (std::thread::scope) – bezpieczne pożyczanie danych ze stosu funkcji nadrzędnej
Przekazywanie własności do wątku, rola domknięć move oraz wymagania cech Send i Sync
Współdzielenie danych tylko do odczytu poprzez Arc, łączenie Arc z mechanizmami synchronizacji do współdzielenia danych do zapisu
Muteksy: std::sync::Mutex, problem zatrutego muteksa po panice, typowe pułapki przy zagnieżdżonych blokadach
Blokady do odczytu i zapisu (RwLock): kiedy dają realny zysk, a kiedy sprowadzają się do droższego muteksa
Typy atomowe (AtomicBool, AtomicUsize i pozostałe) oraz porządki pamięci: Relaxed, Acquire, Release, AcqRel, SeqCst – co naprawdę gwarantują
Synchronizacja punktowa: bariery (Barrier), jednorazowa inicjalizacja (Once, OnceLock, LazyLock), zmienne warunkowe (Condvar)
Kanały do komunikacji między wątkami: std::sync::mpsc, biblioteka crossbeam-channel, kanały ograniczone i nieograniczone, wybór między różnymi odbiorcami (select)
Pule wątków na bazie rayon i przetwarzanie równoległe kolekcji
Zakleszczenia, sytuacje braku postępu i zagłodzenie wątków – jak je rozpoznać i jak im zapobiegać
Lokalne dane wątku (thread_local!) – zastosowania i ograniczenia
Programowanie asynchroniczne
Kod asynchroniczny z użyciem async i await – idea oraz powody, dla których powstał
Model asynchroniczny w Rust: słowa kluczowe async i await, typ Future, mechanizm Pin
Wprowadzenie do biblioteki Tokio: uruchamianie zadań i konfiguracja środowiska wykonawczego
Wymiana danych między zadaniami: kanały oraz mechanizmy synchronizacji
Wzorce współbieżności: aktorzy, pule wątków, ograniczanie tempa pracy oraz limitowanie liczby żądań
Współpraca z kodem zewnętrznym (Foreign Function Interface)
Deklarowanie zewnętrznych funkcji i zmiennych
Budowanie kontraktów łączących kod w językach Rust i C
Budowanie kontraktów łączących kod w językach Rust i Python
Wybrane opinie
Przeczytaj pozytywne opinie pochodzące z ankiet satysfakcji z naszych szkoleń wypełnianych wyłącznie przez ich uczestników po realizacji usługi

