Programowanie w j - Helion
Tytuł oryginału: The Rust Programming Language, 2nd Edition
TÅ‚umaczenie: Lech Lachowski
ISBN: 978-83-289-1010-2
stron: 584, Format: 165x228, okładka: mi
Data wydania: 2024-09-03
Księgarnia: Helion
Cena książki: 103,20 zł (poprzednio: 129,00 zł)
Oszczędzasz: 20% (-25,80 zł)
Osoby które kupowały "Programowanie w j", wybierały także:
- Superinteligencja. Scenariusze, strategie, zagro 66,67 zł, (14,00 zł -79%)
- Poradnik design thinking - czyli jak wykorzysta 48,28 zł, (14,00 zł -71%)
- Kosymulacja. Elastyczne projektowanie i symulacja wielodomenowa 38,39 zł, (11,90 zł -69%)
- F# 4.0 dla zaawansowanych. Wydanie IV 96,45 zł, (29,90 zł -69%)
- Systemy reaktywne. Wzorce projektowe i ich stosowanie 65,31 zł, (20,90 zł -68%)
Spis treści
Programowanie w języku Rust. Oficjalny podręcznik. Wydanie II -- spis treści
Przedmowa
Wstęp
Podziękowania
Wprowadzenie
1. Pierwsze kroki
- Instalacja
- Instalowanie narzędzia rustup w systemie Linux lub macOS
- Instalowanie narzędzia rustup w systemie Windows
- RozwiÄ…zywanie problemów
- Aktualizowanie i odinstalowywanie
- Lokalna dokumentacja
- Witaj, świecie!
- Tworzenie katalogu projektu
- Pisanie i uruchamianie programu Rusta
- Anatomia programu Rusta
- Kompilowanie i uruchamianie to oddzielne kroki
- Witaj, Cargo!
- Tworzenie projektu za pomocÄ… Cargo
- Kompilowanie i uruchamianie projektu Cargo
- Kompilowanie w celu wydania projektu
- Cargo jako konwencja
- Podsumowanie
2. Programowanie gry w zgadywanie
- Konfigurowanie nowego projektu
- Przetwarzanie zgadywania
- Przechowywanie wartości za pomocą zmiennych
- Odbieranie danych wprowadzanych przez użytkownika
- Obsługa ewentualnego niepowodzenia za pomocą typu Result
- Wypisywanie wartości za pomocą symboli zastępczych println!
- Testowanie pierwszej części
- Generowanie sekretnej liczby
- Korzystanie ze skrzynki w celu uzyskania większej funkcjonalności
- Generowanie liczby losowej
- Porównywanie próby odgadniÄ™cia z sekretnÄ… liczbÄ…
- Umożliwianie wielokrotnego zgadywania dzięki zastosowaniu pętli
- Zakończenie gry po odgadnięciu prawidłowej liczby
- Obsługa nieprawidłowych danych wejściowych
- Podsumowanie
3. Powszechne koncepcje programowania
- Zmienne i mutowalność
- Stałe
- Przysłanianie
- Typy danych
- Typy skalarne
- Typy złożone
- Funkcje
- Parametry
- Instrukcje i wyrażenia
- Funkcje z wartościami zwracanymi
- Komentarze
- Przepływ sterowania
- Wyrażenia if
- Powtarzanie za pomocą pętli
- Podsumowanie
4. Własność
- Czym jest własność?
- Reguły własności
- Zakres zmiennych
- Typ String
- Pamięć i alokacja
- Własność i funkcje
- Wartości zwracane i zakres
- Referencje i pożyczanie
- Referencje mutowalne
- Referencje wiszÄ…ce
- Reguły referencji
- Typ wycinka
- Wycinki Å‚aÅ„cucha znaków
- Inne wycinki
- Podsumowanie
5. Wykorzystanie struktur do organizowania powiÄ…zanych ze sobÄ… danych
- Definiowanie struktur i tworzenie ich instancji
- Użycie skrótu inicjowania pól
- Tworzenie instancji z innych instancji za pomocą składni aktualizacji struktury
- Tworzenie różnych typów za pomocÄ… struktur krotkowych bez nazwanych pól
- Struktury jednostkowe bez żadnych pól
- Przykładowy program wykorzystujący struktury
- Refaktoryzacja z wykorzystaniem krotek
- Refaktoryzacja z wykorzystaniem struktur: dodanie znaczenia
- Dodanie użytecznej funkcjonalności za pomocą cech pochodnych
- Składnia metod
- Definiowanie metod
- Metody z wiÄ™kszÄ… liczbÄ… parametrów
- Funkcje powiÄ…zane
- Wiele bloków impl
- Podsumowanie
6. Typy wyliczeniowe i dopasowywanie wzorców
- Definiowanie typu wyliczeniowego
- Wartości wyliczenia
- Enumeracja Option i jej zalety w porównaniu z wartoÅ›ciami zerowymi
- Konstrukcja match przepływu sterowania
- Wzorce, które powodujÄ… powiÄ…zanie z wartoÅ›ciami
- Dopasowywania za pomocÄ… Option<T>
- Dopasowywania sÄ… wyczerpujÄ…ce
- Wzorce catch-all i symbol zastępczy _
- Zwięzły przepływ sterowania z wykorzystaniem składni if let
- Podsumowanie
7. ZarzÄ…dzanie rozwijajÄ…cymi siÄ™ projektami za pomocÄ… pakietów, skrzynek i moduÅ‚ów
- Pakiety i skrzynki
- Definiowanie moduÅ‚ów w celu kontrolowania zakresu i prywatnoÅ›ci
- Åšcieżki odwoÅ‚ywania siÄ™ do elementów w drzewie moduÅ‚ów
- Udostępnianie ścieżek za pomocą słowa kluczowego pub
- Rozpoczynanie ścieżek względnych od słowa kluczowego super
- Upublicznianie struktur i wyliczeń
- Wprowadzanie ścieżek do zakresu za pomocą słowa kluczowego use
- Tworzenie idiomatycznych ścieżek use
- Wprowadzanie nowych nazw za pomocą słowa kluczowego as
- Ponowne eksportowanie nazw za pomocÄ… pub use
- Korzystanie z pakietów zewnÄ™trznych
- Skracanie długich list instrukcji use za pomocą zagnieżdżonych ścieżek
- Operator glob
- Rozdzielanie moduÅ‚ów na różne pliki
- Podsumowanie
8. Powszechnie używane kolekcje
- Przechowywanie list wartoÅ›ci za pomocÄ… wektorów
- Tworzenie nowego wektora
- Aktualizowanie wektora
- Odczytywanie elementów wektorów
- Iterowanie przez wartości w wektorze
- Przechowywanie wielu typów za pomocÄ… wyliczenia
- Porzucenie wektora powoduje porzucenie jego elementów
- Wykorzystywanie typu String do przechowywania tekstu zakodowanego w UTF-8
- Czym jest String?
- Tworzenie nowej instancji String
- Aktualizowanie instancji String
- Indeksowanie wartości String
- Tworzenie wycinków wartoÅ›ci String
- Metody iterowania przez wartości String
- Typy String nie sÄ… takie proste
- Przechowywanie kluczy z powiązanymi wartościami w mapach mieszających
- Tworzenie nowej instancji HashMap
- Uzyskiwanie dostępu do wartości z mapy mieszającej
- Mapy mieszające i własność
- Aktualizowanie instancji HashMap
- Funkcje mieszajÄ…ce
- Podsumowanie
9. ObsÅ‚uga bÅ‚Ä™dów
- ObsÅ‚uga bÅ‚Ä™dów nieodwracalnych za pomocÄ… wywoÅ‚ania panic!
- ObsÅ‚uga bÅ‚Ä™dów odwracalnych z wykorzystaniem typu Result
- Dopasowywanie na podstawie różnych bÅ‚Ä™dów
- Propagacja bÅ‚Ä™dów
- Panikować czy nie panikować?
- PrzykÅ‚ady, kod prototypów i testy
- Przypadki, w których mamy wiÄ™cej informacji niż kompilator
- Wskazówki dotyczÄ…ce obsÅ‚ugi bÅ‚Ä™dów
- Tworzenie typów niestandardowych do celów walidacji
- Podsumowanie
10. Typy sparametryzowane, cechy i czasy życia
- Redukowanie duplikacji przez wyodrębnianie funkcji
- Sparametryzowane typy danych
- Typy sparametryzowane w definicjach funkcji
- Typy sparametryzowane w definicjach struktur
- Typy sparametryzowane w definicjach wyliczeń
- Typy sparametryzowane w definicjach metod
- Wydajność kodu wykorzystującego typy sparametryzowane
- Cechy - definiowanie wspóÅ‚dzielonego zachowania
- Definiowanie cechy
- Implementowanie cechy w typie
- Implementacje domyślne
- Cechy jako parametry
- Zwracanie typów, które implementujÄ… cechy
- Używanie wiązań cech do warunkowego implementowania metod
- Walidacja referencji za pomocÄ… czasów życia
- Używanie czasów życia do zapobiegania powstawaniu wiszÄ…cych referencji
- Kontrola pożyczania
- Sparametryzowane czasy życia w funkcjach
- SkÅ‚adnia adnotacji czasów życia
- Adnotacje czasów życia w sygnaturach funkcji
- MyÅ›lenie w kategoriach czasów życia
- Adnotacje czasów życia w definicjach struktur
- Elizja czasów życia
- Adnotacje czasów życia w definicjach metod
- Statyczny czas życia
- Parametry typów sparametryzowanych, wiÄ…zania cech i czasy życia razem wziÄ™te
- Podsumowanie
11. Pisanie zautomatyzowanych testów
- Jak pisać testy?
- Anatomia funkcji testowej
- Sprawdzenie wyników za pomocÄ… makra assert!
- Testowanie równoÅ›ci za pomocÄ… makr assert_eq! i assert_ne!
- Dodawanie niestandardowych komunikatów o bÅ‚Ä™dach
- Sprawdzanie paniki za pomocÄ… atrybutu should_panic
- Wykorzystanie w testach typu Result<T, E>
- Kontrolowanie sposobu uruchamiania testów
- Uruchamianie testów równolegle lub po kolei
- Wyświetlanie danych wyjściowych funkcji
- Uruchamianie podzbioru testów wedÅ‚ug nazwy
- Ignorowanie niektórych testów i uruchamianie ich na specjalne żądanie
- Organizowanie testów
- Testy jednostkowe
- Testy integracyjne
- Podsumowanie
12. Projekt z wykorzystaniem operacji we-wy - budowanie programu wiersza poleceń
- Przyjmowanie argumentów wiersza poleceÅ„
- Odczytywanie wartoÅ›ci argumentów
- Zapisywanie wartoÅ›ci argumentów w zmiennych
- Odczyt pliku
- Refaktoryzacja w celu poprawy moduÅ‚owoÅ›ci i obsÅ‚ugi bÅ‚Ä™dów
- Separacja zagadnieÅ„ projektów binarnych
- Naprawianie obsÅ‚ugi bÅ‚Ä™dów
- Wyodrębnianie logiki z funkcji main
- Wydzielanie kodu do skrzynki biblioteki
- Rozwijanie funkcjonalności biblioteki za pomocą programowania opartego na testach
- Pisanie testu kończącego się niepowodzeniem
- Pisanie kodu w celu zapewnienia pozytywnego wyniku testu
- Praca ze zmiennymi środowiskowymi
- Pisanie niepomyślnego testu dla funkcji search nieuwzględniającej wielkości liter
- Implementacja funkcji search_case_insensitive
- Wypisywanie komunikatów o bÅ‚Ä™dach do standardowego strumienia bÅ‚Ä™dów, a nie do standardowego strumienia wyjÅ›ciowego
- Sprawdzanie, gdzie są zapisywane błędy
- Wypisywanie bÅ‚Ä™dów do standardowego strumienia bÅ‚Ä™dów
- Podsumowanie
13. Cechy języka funkcyjnego - iteratory i domknięcia
- DomkniÄ™cia - funkcje anonimowe, które przechwytujÄ… swoje Å›rodowisko
- Przechwytywanie środowiska za pomocą domknięć
- Inferowanie i adnotowanie typu domknięcia
- Przechwytywanie referencji lub przenoszenie własności
- Przenoszenie przechwyconych wartości z domknięć i cechy Fn
- Przetwarzanie serii elementów za pomocÄ… iteratorów
- Cecha Iterator i metoda next
- Metody, które konsumujÄ… iterator
- Metody, które wytwarzajÄ… inne iteratory
- Używanie domknięć, które przechwytujÄ… swoje Å›rodowisko
- Ulepszenie projektu operacji we-wy
- Usuwanie clone przy użyciu iteratora
- Zwiększanie czytelności kodu dzięki adapterom iteratora
- Wybór pomiÄ™dzy pÄ™tlami i iteratorami
- Porównanie wydajnoÅ›ci pÄ™tli i iteratorów
- Podsumowanie
14. Narzędzie Cargo i rejestr crates.io
- Dostosowywanie kompilacji za pomocÄ… profili wydania
- Publikowanie skrzynki w rejestrze Crates.io
- Tworzenie przydatnych komentarzy dokumentujÄ…cych
- Eksportowanie wygodnego publicznego API za pomocÄ… pub use
- Zakładanie konta w rejestrze Crates.io
- Dodawanie metadanych do nowej skrzynki
- Publikowanie w rejestrze Crates.io
- Publikowanie nowej wersji istniejÄ…cej skrzynki
- Dezaktualizowanie wersji z Crates.io za pomocÄ… polecenia cargo yank
- Obszary robocze Cargo
- Tworzenie obszaru roboczego
- Tworzenie drugiego pakietu w obszarze roboczym
- Instalowanie plików binarnych za pomocÄ… polecenia cargo install
- Rozszerzanie Cargo przy użyciu niestandardowych poleceń
- Podsumowanie
15. Inteligentne wskaźniki
- Używanie Box<T> do wskazywania danych na stercie
- Używanie Box<T> do przechowywania danych na stercie
- Zastosowanie boksów do używania typów rekurencyjnych
- Wykorzystanie cechy Deref do traktowania inteligentnych wskaźników jak regularnych referencji
- Podążanie za wskaźnikiem do wartości
- Używanie Box<T> jak referencji
- Definiowanie własnego inteligentnego wskaźnika
- Implementacja cechy Deref
- Domyślne wymuszenie wyłuskania w funkcjach i metodach
- Jak wymuszenie wyÅ‚uskania wspóÅ‚dziaÅ‚a z mutowalnoÅ›ciÄ…?
- Wykorzystanie cechy Drop do uruchamiania określonego kodu przy czyszczeniu
- Rc<T> - inteligentny wskaźnik zliczania referencji
- Używanie Rc<T> do udostępniania danych
- Klonowanie Rc<T> zwiększa liczbę referencji
- RefCell<T> i wzorzec mutowalności wewnętrznej
- Egzekwowanie reguł pożyczania w czasie wykonywania za pomocą RefCell<T>
- Mutowalność wewnętrzna - mutowalne pożyczanie niemutowalnej wartości
- Wykorzystanie typów Rc<T> i RefCell<T>, aby mutowalne dane mogÅ‚y mieć wielu wÅ‚aÅ›cicieli
- Cykle referencji mogą powodować wycieki pamięci
- Tworzenie cyklu referencji
- Zapobieganie cyklom referencji za pomocÄ… typu Weak<T>
- Podsumowanie
16. Nieustraszona wspóÅ‚bieżność
- Używanie wÄ…tków do jednoczesnego uruchomienia kodu
- Tworzenie nowego wÄ…tku za pomocÄ… funkcji spawn
- Wykorzystanie uchwytów metody join w celu zaczekania na zakoÅ„czenie wszystkich wÄ…tków
- Używanie domknięć move z wątkami
- Używanie przekazywania komunikatów do przesyÅ‚ania danych miÄ™dzy wÄ…tkami
- Kanały i przeniesienie własności
- Wysyłanie wielu wartości i obserwowanie czekającego odbiornika
- Tworzenie wielu producentów przez klonowanie nadajnika
- WspóÅ‚bieżność stanu wspóÅ‚dzielonego
- Używanie muteksów w celu umożliwienia dostÄ™pu do danych z jednego wÄ…tku na raz
- Podobieństwa między typami RefCell<T> i Rc<T> a Mutex<T> i Arc<T>
- Rozszerzanie funkcjonalnoÅ›ci wspóÅ‚bieżnoÅ›ci za pomocÄ… cech Send i Sync
- Umożliwienie przenoszenia własności między wątkami za pomocą cechy Send
- Umożliwianie dostÄ™pu z wielu wÄ…tków za pomocÄ… cechy Sync
- Ręczne implementowanie cech Send i Sync jest niezabezpieczone
- Podsumowanie
17. Funkcjonalności programowania obiektowego
- Cechy jÄ™zyków obiektowych
- Obiekty zawierajÄ… dane i zachowania
- Hermetyzacja, która ukrywa szczegóÅ‚y implementacji
- Dziedziczenie jako system typów i wspóÅ‚dzielenie kodu
- Używanie obiektów cech, które umożliwiajÄ… stosowanie wartoÅ›ci różnych typów
- Definiowanie cech typowego zachowania
- Implementowanie cechy
- Obiekty cech wykonujÄ… dynamicznÄ… dyspozycjÄ™
- Implementacja obiektowego wzorca projektowego
- Definiowanie struktury Post i tworzenie nowej instancji w stanie Draft
- Przechowywanie tekstu treści wpisu
- Upewnianie się, że treść wersji roboczej wpisu jest pusta
- Żądanie korekty zmienia stan wpisu
- Dodanie metody approve w celu zmiany zachowania metody content
- Kompromisy wzorca stanu
- Podsumowanie
18. Wzorce i dopasowywanie
- Wszystkie miejsca, w których można używać wzorców
- Ramiona wyrażenia match
- Wyrażenia warunkowe if let
- Pętle warunkowe while let
- Pętle for
- Instrukcje let
- Parametry funkcji
- Odrzucalność - czy dopasowywanie wzorca może się nie powieść?
- SkÅ‚adnia wzorców
- Dopasowywanie literaÅ‚ów
- Dopasowywanie zmiennych nazwanych
- Wiele wzorców
- Dopasowywanie przedziaÅ‚ów wartoÅ›ci za pomocÄ… ..=
- Destrukturyzacja w celu rozkÅ‚adania wartoÅ›ci na poszczególne elementy
- Ignorowanie wartości we wzorcu
- Dodatkowe wyrażenia warunkowe ze strażnikami dopasowywania
- WiÄ…zanie za pomocÄ… operatora @
- Podsumowanie
19. Funkcjonalności zaawansowane
- Niezabezpieczony Rust
- Niezabezpieczone supermoce
- Wyłuskiwanie surowego wskaźnika
- Wywoływanie niezabezpieczonej funkcji lub metody
- Uzyskiwanie dostępu do mutowalnej zmiennej statycznej lub modyfikowanie jej
- Implementowanie niezabezpieczonej cechy
- Uzyskiwanie dostÄ™pu do pól typu unii
- Kiedy korzystać z niezabezpieczonego kodu?
- Cechy zaawansowane
- Typy powiÄ…zane
- Domyślne parametry typu sparametryzowanego i przeciążanie operatora
- Rozróżnianie metod o tej samej nazwie
- Korzystanie z supercech
- Używanie wzorca newtype do implementowania cech zewnętrznych
- Typy zaawansowane
- Używanie wzorca newtype dla zapewnienia bezpieczeÅ„stwa typów i warstwy abstrakcji
- Tworzenie synonimów typów za pomocÄ… aliasów typów
- Typ never, który nigdy nie zwraca wartoÅ›ci
- Typy o dynamicznie ustalanych rozmiarach i cecha Sized
- Zaawansowane funkcje i domknięcia
- Wskaźniki funkcji
- Zwracanie domknięć
- Makra
- Różnica miÄ™dzy makrami i funkcjami
- Makra deklaratywne z konstrukcjÄ… macro_rules! dla metaprogramowania ogólnego
- Makra proceduralne do generowania kodu z atrybutów
- Jak napisać niestandardowe makro derive?
- Makra atrybutowe
- Makra funkcyjne
- Podsumowanie
20. Projekt końcowy - budowa wielowątkowego serwera WWW
- Tworzenie jednowÄ…tkowego serwera WWW
- Nasłuchiwanie połączenia TCP
- Odczytywanie żądania
- Analiza żądania HTTP
- Pisanie odpowiedzi
- Zwracanie prawdziwego HTML-a
- Walidacja żądania i selektywne odpowiadanie
- Odrobina refaktoryzacji
- Przekształcenie serwera jednowątkowego w wielowątkowy
- Symulowanie powolnego żądania
- ZwiÄ™kszenie przepustowoÅ›ci przy użyciu puli wÄ…tków
- Eleganckie zamykanie i czyszczenie
- Implementacja cechy Drop w typie ThreadPool
- Sygnalizowanie wątkom, aby przestały nasłuchiwać zadań
- Podsumowanie
A. SÅ‚owa kluczowe
- Obecnie używane słowa kluczowe
- Słowa kluczowe zarezerwowane do wykorzystania w przyszłości
- Surowe identyfikatory
B. Operatory i symbole
- Operatory
- Symbole niezwiÄ…zane z operatorami
C. Cechy pochodne (zapożyczone)
- Cecha Debug do uzyskiwania programistycznych danych wyjściowych
- Cechy PartialEq i Eq do porównania równoÅ›ci
- Cechy PartialOrd i Ord do porównywania kolejnoÅ›ci
- Cechy Clone i Copy do duplikowania wartości
- Cecha Hash do mapowania wartości na wartość o stałym rozmiarze
- Cecha Default dla wartości domyślnych
D. Przydatne narzędzia programistyczne
- Automatyczne formatowanie za pomocą narzędzia rustfmt
- Naprawianie kodu za pomocą narzędzia rustfix
- Lintery narzędzia Clippy
- Integracja z IDE przy użyciu narzędzia rust-analyzer
E. Edycje