Programowanie w języku Rust Wydajność i bezpieczeństwo

58.16

Description

Programowanie systemowe zwykle nie interesuje twórców aplikacji. Niemniej warunkiem jej poprawnego działania jest właśnie kod systemowy. Programowanie systemowe zapewnia między innymi działanie systemu operacyjnego, sterowników, systemu plików, kodeków, a także zarządzanie pamięcią czy obsługę sieci. Jako że dotyczy wykorzystania zasobów, każdy szczegół, każdy bajt pamięci operacyjnej i każdy cykl procesora ma znaczenie. Rust – wyjątkowe narzędzie, cenione za szybkość, współbieżność i bezpieczeństwo – sprawi, że tworzenie kodu systemowego będzie łatwiejsze. Jednak tym, którzy dotychczas używali C#, Javy czy Pythona, język ten może się wydawać dość trudny do zrozumienia.Ta książka jest znakomitym wprowadzeniem do języka Rust, pozwala też rozeznać się w zasadach programowania systemowego. Pokazuje, w jaki sposób zapewnić w kodzie bezpieczeństwo pamięci i wątków oraz sprawić, aby program był wykonywany szybko i bez błędów. Poszczególne zagadnienia zostały przedstawione jasno i przystępnie, a prezentowane koncepcje – zilustrowane licznymi przykładami kodu. Nie zabrakło również wskazówek ułatwiających bezproblemowe tworzenie wydajnego i bezpiecznego kodu. Książka jest przeznaczona przede wszystkim dla programistów systemowych, jednak przyda się także twórcom aplikacji, którym pozwoli zrozumieć zasady rządzące językiem Rust, a w efekcie tworzyć lepszy i łatwiejszy w utrzymaniu kod.W tej książce między innymi:solidne wprowadzenie do języka Rustpodstawowe typy danych, własności i referencjeobsługa błędów w języku Rustobsługa wejścia-wyjścia, makra i współbieżnośćobsługa niebezpiecznego koduRust. Programowanie systemowe. Najlepiej zacząć od podstaw!Spis treści:Wstęp 151. Dlaczego Rust? 19Bezpieczeństwo typów 212. Pierwsze spotkanie z Rustem 25Pobranie i instalacja Rusta 25Prosta funkcja 28Pisanie i uruchamianie testów 29Obsługa argumentów wiersza poleceń 30Prosty serwer web 34Programowanie współbieżne 41Czym jest zbiór Mandelbrota? 42Parsowanie argumentów wiersza poleceń 46Odwzorowanie pikseli na liczby zespolone 48Rysowanie zbioru 50Zapis obrazu do pliku 51Program Mandelbrota działający współbieżnie 53Uruchomienie programu 57Przezroczyste bezpieczeństwo 573. Typy proste 59Typy maszynowe 62Typy całkowite 62Typy zmiennoprzecinkowe 65Typ logiczny 67Typ znakowy 67Krotki 69Typy wskaźnikowe 71Referencje 71Pudełka 72Wskaźniki niechronione 72Tablice, wektory i podzbiory 72Tablice 73Wektory 74Dodawanie pojedynczych elementów do wektora 77Podzbiory 77Typ String 79Literały łańcuchowe 79Łańcuchy bajtów 80Łańcuchy znaków w pamięci 80Typ String 82Podstawowe cechy typu String 83Inne typy znakowe 83Co dalej? 844. Reguła własności 85Reguła własności 87Przeniesienie własności 91Więcej operacji związanych z przeniesieniem własności 96Przeniesienie własności a przepływ sterowania 97Przeniesienie własności a struktury indeksowane 98Typy kopiowalne 100Rc i Arc: własność współdzielona 1035. Referencje 107Referencje jako wartości 111Referencje Rusta kontra referencje C++ 111Referencje a operacja przypisania 112Referencje do referencji 112Porównywanie referencji 113Referencje nigdy nie są puste 114Referencje do wyrażeń 114Referencje do podzbiorów i zestawów metod 115Bezpieczeństwo referencji 115Referencja do zmiennej lokalnej 115Parametry w postaci referencji 118Referencje jako argumenty 120Referencja jako wartość zwracana 121Struktura zawierająca referencje 122Odrębny cykl życia 124Pomijanie parametrów cyklu życia 125Referencje współdzielone kontra mutowalne 127Walka ze sztormem na morzu obiektów 1346. Wyrażenia 137Język wyrażeń 137Bloki kodu i średniki 138Deklaracje 140if i match 141if let 143Pętle 144Wyrażenie return 146Analiza przepływu sterowania 146Wywołania funkcji i metod 148Pola i elementy 149Operatory referencji 150Operatory arytmetyczne, bitowe, porównania i logiczne 150Przypisanie 151Rzutowanie typów 152Domknięcia 153Priorytety operatorów 153Co dalej? 1567. Obsługa błędów 157Błąd panic 157Odwinięcie stosu 158Przerywanie procesu 159Typ Result 160Przechwytywanie błędów 160Alias typu Result 161Wyświetlanie informacji o błędach 162Propagacja błędów 163Jednoczesna obsługa błędów różnych typów 164Błędy, które nie powinny się zdarzyć 166Ignorowanie błędów 167Obsługa błędów w funkcji main() 167Definiowanie własnego typu błędu 168Co daje nam typ Result? 1698. Paczki i moduły 171Paczki 171Profile budowania 174Moduły 174Umieszczanie modułów w oddzielnych plikach 175Ścieżki i importy 177Standardowe preludium 179Podstawowe składniki modułów 179Zmiana programu w bibliotekę 181Katalog src/bin 183Atrybuty 184Testy i dokumentacja 186Testy integracyjne 188Dokumentacja 189Doc-testy 191Definiowanie zależności 193Wersje 194Cargo.lock 195Publikowanie paczek na stronie crates.io 196Obszary robocze 198Więcej fajnych rzeczy 1999. Struktury 201Struktury z polami nazywanymi 201Struktury z polami numerowanymi 204Struktury puste 204Reprezentacja struktur w pamięci 205Definiowanie metod w bloku impl 206Struktury generyczne 209Struktury z parametrem cyklu życia 210Dziedziczenie standardowych zestawów metod 211Zmienność wewnętrzna 21210. Typy wyliczeniowe i wzorce 217Typy wyliczeniowe 218Typy wyliczeniowe zawierające dane 220Typ wyliczeniowy w pamięci 221Większe struktury danych stosujące typy wyliczeniowe 222Generyczne typy wyliczeniowe 223Wzorce 226Literały, zmienne i symbole wieloznaczne 228Wzorce w postaci krotki lub struktury 230Wzorce z referencjami 231Dopasowanie do wielu wartości 233Warunki dodatkowe 234Wzorce @ 235Gdzie używamy wzorców 235Wypełnianie drzewa binarnego 236Podsumowanie 23811. Zestawy metod (interfejsy) i typy generyczne 239Stosowanie zestawów metod 241Obiekt implementujący zestaw metod 242Struktura obiektu implementującego 243Funkcje generyczne 244Na co się zdecydować? 247Definiowanie i implementacja zestawów metod 249Metody domyślne 250Implementacja zestawów metod dla istniejących już typów 251Zestaw metod a słowo kluczowe Self 252Rozszerzanie zestawu metod (dziedziczenie) 254Metody statyczne 254W pełni kwalifikowana nazwa metody 255Zestawy metod definiujące relacje między typami 257Typy powiązane 257Generyczny zestaw metod (czyli jak działa przeciążanie operatorów) 260Zaprzyjaźnione zestawy metod (czyli jak działa generator liczb pseudolosowych) 261Inżynieria wsteczna ograniczeń 263Wnioski 26612. Przeciążanie operatorów 267Operatory arytmetyczne i bitowe 268Operatory jednoargumentowe 270Operatory dwuargumentowe 271Operatory przypisania złożonego 272Test równości 273Porównania szeregujące 276Interfejsy Index i IndexMut 278Inne operatory 28113. Interfejsy narzędziowe 283Drop 284Sized 287Clone 289Copy 290Deref i DerefMut 291Default 294AsRef i AsMut 296Borrow i BorrowMut 297From i Into 299ToOwned 301Borrow i ToOwned w działaniu 30214. Domknięcia 305Przechwytywanie zmiennych 306Domknięcia, które pożyczają wartość 307Domknięcia, które przejmują własność 308Typy funkcji i domknięć 309Domknięcia a wydajność 311Domknięcia a bezpieczeństwo 313Domknięcia, które zabijają 313FnOnce 314FnMut 315Funkcje zwrotne 317Skuteczne korzystanie z domknięć 32015. Iteratory 323Iterator i IntoIterator 324Tworzenie iteratorów 326Metody iter i iter_mut 326Implementacje interfejsu IntoIterator 326Metoda drain 328Inne źródła iteratorów 329Adaptery 330map i filter 330filter_map i flat_map 333scan 335take i take_while 335skip i skip_while 336peekable 337fuse 338Iteratory obustronne i rev 339inspect 340chain 341enumerate 341zip 342by_ref 342cloned 344cycle 344Konsumowanie iteratorów 345Proste agregaty: count, sum i product 345max i min 345max_by i min_by 346max_by_key i min_by_key 346Porównywanie sekwencji elementów 347any i all 348position, rposition oraz ExactSizeIterator 348fold 349nth 349last 350find 350Tworzenie kolekcji: collect i FromIterator 350Zestaw metod Extend 352partition 353Implementacja własnych iteratorów 35416. Kolekcje 359Przegląd kolekcji 360Vec361Dostęp do elementów 362Iteracja 363Zwiększanie i zmniejszanie wielkości wektora 364Łączenie 367Podział 367Zamiana 369Sortowanie i wyszukiwanie 370Porównywanie podzbiorów 371Elementy losowe 372Reguły zapobiegające konfliktom w czasie iteracji 372VecDeque373LinkedList375BinaryHeap376HashMapi BTreeMap377Entry 380Iterowanie map 381HashSeti BTreeSet382Iteracja zbioru 383Kiedy równe wartości są różne 383Operacje dotyczące całego zbioru 383Haszowanie 385Niestandardowe algorytmy haszujące 386Kolekcje standardowe i co dalej? 38717. Tekst i łańcuchy znaków 389Podstawy Unicode389ASCII, Latin-1 i Unicode390UTF-8390Kierunek tekstu392Znaki (typ char)392Klasyfikacja znaków392Obsługa cyfr393Zmiana wielkości liter394Konwersja znaku do i z liczby całkowitej394Typy String i str395Tworzenie łańcuchów znaków396Prosta inspekcja396Dołączanie i wstawianie tekstu397Usuwanie tekstu398Konwencje nazewnicze dotyczące wyszukiwania i iterowania399Wyszukiwanie tekstu i wzorce399Wyszukiwanie i zamiana400Iterowanie tekstu401Obcinanie403Zmiana wielkości liter w łańcuchach403Konwersja tekstu do wartości innego typu404Konwersja wartości innego typu do tekstu404Tworzenie referencji innego typu405Tekst jako UTF-8406Tworzenie tekstu na podstawie danych UTF-8406Alokacja warunkowa407Łańcuchy znaków jako kolekcje generyczne409Formatowanie wartości410Formatowanie tekstu411Formatowanie liczb412Formatowanie innych typów414Formatowanie wartości z myślą o debugowaniu415Formatowanie i debugowanie wskaźników416Wiązanie argumentów za pomocą indeksu i nazwy416Dynamiczne definiowanie długości i precyzji417Formatowanie własnych typów417Użycie języka formatowania we własnym kodzie419Wyrażenia regularne421Podstawowe użycie wyrażeń regularnych421Wyrażenia regularne w trybie leniwym422Normalizacja423Rodzaje normalizacji424Biblioteka unicode-normalization42518. Operacje wejścia/wyjścia 427Obiekty typu reader i writer 428Obiekty typu reader 429Buforowany obiekt typu reader 431Przeglądanie tekstu 432Pobieranie tekstu 434Obiekty typu writer 435Pliki 436Wyszukiwanie 437Inne rodzaje obiektów reader i writer 437Dane binarne, kompresja i serializacja 439Pliki i katalogi 440OsStr i Path 440Metody typów Path i PathBuf 442Funkcje dostępu do systemu plików 443Odczyt zawartości katalogu 444Funkcje bezpośrednio związane z platformą 446Obsługa sieci 44719. Programowanie współbieżne 451Podział i łączenie wątków 453spawn i join 454Obsługa błędów w różnych wątkach 456Współdzielenie niemutowalnych danych przez różne wątki 457Rayon 459Zbiór Mandelbrota raz jeszcze 461Kanały 463Wysyłanie wartości 464Odczyt wartości 467Uruchomienie potoku 468Cechy kanałów i ich wydajność 470Bezpieczeństwo wątków: Send i Sync 472Współpraca iteratora i kanału 474Potoki i co dalej? 475Stan współdzielony mutowalny 476Czym jest muteks? 476Mutex478mut i Mutex 480Dlaczego Mutex to nie zawsze dobry pomysł? 480Zakleszczenie (deadlock) 481Zatruty muteks 482Kanały z wieloma nadawcami stosujące muteksy 482Blokady odczytu/zapisu (RwLock) 483Zmienne warunkowe (Condvar) 485Typy atomowe 485Zmienne globalne 487Rust i pisanie programów wielowątkowych 48920. Makra 491Podstawy 492Rozwijanie makra 493Niezamierzone skutki 495Powtórzenia 496Makra wbudowane 498Debugowanie makr 499Makro json! 500Typy składników 501Makra a rekurencja 504Makra i zestawy metod 505Zakres i higiena 507Import i eksport makr 509Unikanie błędów składniowych w procesie dopasowywania 511macro_rules! i co dalej? 51221. Kod niebezpieczny 513Dlaczego niebezpieczny? 514Bloki unsafe 515Przykład: skuteczny typ łańcucha znaków ASCII 516Funkcje unsafe 518Kod niebezpieczny czy funkcja niebezpieczna? 520Niezdefiniowane zachowanie 521Zestawy metod unsafe 523Wskaźniki niechronione 525Bezpieczne tworzenie dereferencji wskaźników niechronionych 528Przykład: RefWithFlag 529Wskaźniki dopuszczające wartość pustą 531Rozmiary i rozmieszczanie typów 531Operacje arytmetyczne na wskaźnikach 532Wchodzenie do pamięci i wychodzenie z pamięci 534Przykład: GapBuffer 537Bezpieczeństwo błędów paniki w kodzie niebezpiecznym 543Funkcje obce: wywoływanie kodu C i C++ w środowisku Rusta 544Wyszukiwanie wspólnych reprezentacji danych 544Deklarowanie obcych funkcji i zmiennych 547Korzystanie z funkcji i bibliotek 549Interfejs niechroniony dla biblioteki libgit2 552Interfejs bezpieczny dla biblioteki libgit2 558Podsumowanie 568Skorowidz 569

Podręczniki szkolne

flaga hiszpanii, bieguni tokarczuk, dywan pepco, książki fantasy dla młodzieży ranking, nerka damska sportowa, wigilia z nieznajomym, trzy życzenia, lampki biale, ranczo ksiazka, hulajnoga raven, tomasz jedrowski, zły czas haner pdf, hejka tu lenka kredki, cukry do waty cukrowej, zyciowe metamorfozy, magical capsules harry potter, pocałunek zdrajcy, książki ukraińskie, hannibal smoke niewidzialne miasto

yyyyy