Book description
Twórcy aplikacji często zapominają o kodzie systemowym, a to dzięki niemu funkcjonują system operacyjny, sterowniki, system plików czy zarządzanie pamięcią. Żadna aplikacja nie będzie działać bez poprawnego kodu systemowego. Język Rust jest dla programistów systemowych wyjątkowym narzędziem, rozwiązującym wiele znanych od dziesięcioleci problemów. Pozwala uniknąć mnóstwa powszechnie popełnianych błędów i tworzyć należytej jakości kod systemowy.
Dzięki tej książce zaczniesz kodować w języku Rust. Zrozumiesz też istotę programowania systemowego. Dowiesz się, w jaki sposób zapewnić bezpieczeństwo pamięci i wątków, a także jak sprawić, aby program był wykonywany szybko i bez błędów. Nauczysz się bezpiecznego stosowania operacji współbieżnych i poznasz zasady obsługi błędów. Przekonasz się, w jaki sposób Rust umożliwia kontrolę nad zużyciem pamięci i procesora, dodatkowo otrzymasz mnóstwo wskazówek ułatwiających tworzenie wydajnego i bezpiecznego kodu. Przewodnik jest przeznaczony głównie dla programistów systemowych, na lekturze jednak skorzystają również twórcy aplikacji, którzy dowiedzą się, jak mogą pisać lepszy, efektywniejszy i łatwiejszy w utrzymaniu kod.
W książce między innymi:
solidne wprowadzenie do języka Rust
podstawowe typy danych, a także pojęcia związane z własnością i pożyczaniem
obsługa błędów, paczki i moduły
zestawy metod i typy generyczne
domknięcia, iteratory i programowanie asynchroniczne
zaawansowane mechanizmy języka Rust
Rust: zadbasz o najwyższą jakość oprogramowania systemowego!
Table of contents
- Wstęp
- Rozdział 1. Programiści systemowi mogą mieć fajne zabawki
- Rozdział 2. Pierwsze spotkanie z Rustem
- Rozdział 3. Typy proste
- Rozdział 4. Reguła własności i przenoszenie własności
- Rozdział 5. Referencje
-
Rozdział 6. Wyrażenia
- Język wyrażeń
- Priorytety i łączność operatorów
- Bloki kodu i średniki
- Deklaracje
- if i match
- if let
- Pętle
- Sterowanie przepływem w pętlach
- Wyrażenie return
- Analiza przepływu sterowania
- Wywołania funkcji i metod
- Pola i elementy
- Operatory referencji
- Operatory arytmetyczne, bitowe, porównania i logiczne
- Przypisanie
- Rzutowanie typów
- Domknięcia
- Co dalej?
- Rozdział 7. Obsługa błędów
- Rozdział 8. Paczki i moduły
- Rozdział 9. Struktury
- Rozdział 10. Typy wyliczeniowe i wzorce
- Rozdział 11. Zestawy metod i typy generyczne
- Rozdział 12. Przeciążanie operatorów
- Rozdział 13. Interfejsy narzędziowe
- Rozdział 14. Domknięcia
-
Rozdział 15. Iteratory
- Iterator i IntoIterator
- Tworzenie iteratorów
- Adaptery iteratorów
-
Konsumowanie iteratorów
- Proste agregaty: count, sum i product
- max i min
- max_by i min_by
- max_by_key i min_by_key
- Porównywanie sekwencji elementów
- any i all
- position, rposition oraz ExactSizeIterator
- fold i rfold
- try_fold i try_rfold
- nth i nth_back
- last
- find, rfind i find_map
- Tworzenie kolekcji: collect i FromIterator
- Zestaw metod Extend
- partition
- for_each i try_for_each
- Implementacja własnych iteratorów
- Rozdział 16. Kolekcje
-
Rozdział 17. Tekst i łańcuchy znaków
- Podstawy Unicode
- Znaki (typ char)
-
Typy String i str
- Tworzenie łańcuchów znaków
- Prosta inspekcja
- Dołączanie i wstawianie tekstu
- Usuwanie i zastępowanie tekstu
- Konwencje nazewnicze dotyczące wyszukiwania i iterowania
- Wyszukiwanie tekstu i wzorce
- Wyszukiwanie i zamiana
- Iterowanie tekstu
- Obcinanie
- Zmiana wielkości liter w łańcuchach
- Konwersja tekstu do wartości innego typu
- Konwersja wartości innego typu do tekstu
- Tworzenie referencji innego typu
- Tekst jako UTF-8
- Tworzenie tekstu na podstawie danych UTF-8
- Alokacja warunkowa
- Łańcuchy znaków jako kolekcje generyczne
-
Formatowanie wartości
- Formatowanie tekstu
- Formatowanie liczb
- Formatowanie innych typów
- Formatowanie wartości z myślą o debugowaniu
- Formatowanie i debugowanie wskaźników
- Wiązanie argumentów za pomocą indeksu i nazwy
- Dynamiczne definiowanie długości i precyzji
- Formatowanie własnych typów
- Użycie języka formatowania we własnym kodzie
- Wyrażenia regularne
- Normalizacja
- Rozdział 18. Operacje wejścia – wyjścia
- Rozdział 19. Programowanie współbieżne
-
Rozdział 20. Programowanie asynchroniczne
-
Od kodu synchronicznego do asynchronicznego
- Interfejs Future
- Funkcje asynchroniczne i wyrażenia await
- Wywoływanie funkcji asynchronicznych z kodu synchronicznego: block_on
- Uruchamianie asynchronicznych zadań
- Asynchroniczne instrukcje blokowe
- Tworzenie funkcji asynchronicznych z wykorzystaniem asynchronicznych instrukcji blokowych
- Uruchamianie zadań asynchronicznych w pulach wątków
- Czy operacje asynchroniczne implementują Send?
- Wykonywanie długotrwałych obliczeń: yield_now i spawn_local
- Porównanie różnych rozwiązań asynchronicznych
- Rzeczywisty asynchroniczny klient HTTP
-
Asynchroniczny klient i serwer
- Typy błędów i wyników
- Protokół
- Pobieranie danych od użytkownika: strumienie asynchroniczne
- Wysyłanie pakietów
- Pobieranie pakietów: więcej strumieni asynchronicznych
- Funkcja main klienta
- Funkcja main serwera
- Obsługa połączeń z klientami: asynchroniczne muteksy
- Tablica grup: muteksy synchroniczne
- Grupy: kanały rozgłoszeniowe paczki tokio
- Podstawowe wartości future i wykonawcy: kiedy warto ponownie sprawdzać wartość future?
- Typ Pin i jego stosowanie
- Kiedy warto stosować kod asynchroniczny?
-
Od kodu synchronicznego do asynchronicznego
- Rozdział 21. Makra
-
Rozdział 22. Kod niebezpieczny
- Dlaczego niebezpieczny?
- Bloki unsafe
- Przykład: wydajny typ łańcucha znaków ASCII
- Funkcje unsafe
- Kod niebezpieczny czy funkcja niebezpieczna?
- Działanie niezdefiniowane
- Zestawy metod unsafe
-
Wskaźniki niechronione
- Bezpieczne tworzenie dereferencji wskaźników niechronionych
- Przykład: RefWithFlag
- Wskaźniki dopuszczające wartość pustą
- Rozmiary i rozmieszczanie typów
- Operacje arytmetyczne na wskaźnikach
- Wchodzenie do pamięci i wychodzenie z pamięci
- Przykład: GapBuffer
- Bezpieczeństwo błędów paniki w kodzie niebezpiecznym
- Ponowna interpretacja pamięci z użyciem unii
- Dopasowywanie unii
- Pożyczanie unii
- Rozdział 23. Funkcje obce
Product information
- Title: Programowanie w języku Rust
- Author(s):
- Release date: November 2022
- Publisher(s): Helion
- ISBN: 9788328395268
You might also like
book
Encyklopedia elementów elektronicznych
lektronik, zwłaszcza gdy pracuje nad trudniejszymi projektami, musi mieć dostęp do rzetelnych i sprawdzonych informacji. Oczywiście, …
book
Język C dla małych urządzeń
Wydawałoby się, że język C najlepsze lata ma już za sobą. Opracowano w końcu mnóstwo łatwych …
book
Algorytmy. Almanach
Książka Algorytmy. Almanach to cała wiedza o algorytmach, potrzebna ambitnemu programiście, zebrana w jeden kompletny podręcznik. …
book
Przetwarzanie danych w dużej skali
Przetwarzanie i bezpieczne przechowywanie danych absorbuje uwagę inżynierów oprogramowania w coraz większym stopniu. W ostatnich latach …