reklama - zainteresowany?

Programowanie w języku Rust - Helion

Programowanie w języku Rust
ebook
Autor: Steve Klabnik, Carol Nichols
Tłumaczenie: Witold Sikorski, Małgorzata Dąbkowska-Kowalik
ISBN: 9788301206390
stron: 608, Format: ebook
Data wydania: 2019-06-14
Księgarnia: Helion

Cena książki: 95,20 zł (poprzednio: 119,00 zł)
Oszczędzasz: 20% (-23,80 zł)

Dodaj do koszyka Programowanie w języku Rust

Tagi: Inne - Programowanie

Programowanie w języku Rust to oficjalna książka na temat Rusta: języka programowania na licencji open source, który pozwala nam szybciej pisać niezawodne oprogramowanie. Rust daje możliwość kontrolowania szczegółów niskiego poziomu (jak wykorzystanie pamięci) w połączeniu z ergonomią wysokiego poziomu, eliminując kłopoty tradycyjnie związane z językami niskiego poziomu. W książce Programowanie w języku Rust dwaj członkowie Rust Core Team pokazują, jak w pełni korzystać z właściwości Rusta od instalacji po tworzenie własnych niezawodnych i skalowalnych programów. Zaczynamy od podstaw, takich jak tworzenie funkcji, wybieranie typów danych i wiązanie zmiennych i przechodzimy następnie do bardziej zaawansowanych pojęć takich jak: posiadanie i pożyczanie, czasy życia i cechy bezpieczeństwo pamięci Rusta, które gwarantuje budowanie szybkich, bezpiecznych programów testowanie, obsługa błędów i efektywna refaktoryzacja typy generyczne, inteligentne wskaźniki, wielowątkowość, obiekty cech oraz zaawansowane dopasowywanie wzorców użycie Cargo - wbudowanego w Rust menedżera pakietów, służącego do budowania, testowania i dokumentowania swojego kodu i zarządzania zależnościami używanie zaawansowanego kompilatora Rusta wraz z technikami programowania opartymi na kompilatorze Książka zawiera dużo przykładów kodu, a także trzy rozdziały poświęcone budowaniu gotowych projektów przeznaczonych do sprawdzenia swojej wiedzy: gra w zgadywanie, implementacja narzędzia wiersza poleceń w języku Rust oraz wielowątkowy serwer.

Dodaj do koszyka Programowanie w języku Rust

 

Osoby które kupowały "Programowanie w języku Rust", wybierały także:

  • DevOps w praktyce. Kurs video. Jenkins, Ansible, Terraform i Docker
  • Wyrażenia regularne od podstaw
  • Projektowanie systemów rozproszonych. Wzorce i paradygmaty dla skalowalnych, niezawodnych usług
  • Zrozum struktury danych. Algorytmy i praca na danych w Javie
  • Kosymulacja. Elastyczne projektowanie i symulacja wielodomenowa

Dodaj do koszyka Programowanie w języku Rust

Spis treści

Programowanie w języku Rust eBook -- spis treści

  • Okładka
  • Strona tytułowa
  • Strona redakcyjna
  • O autorach
  • Spis treści
  • Wstęp
  • Podziękowania
  • Wprowadzenie
    • Dla kogo jest Rust
      • Zespoły deweloperskie
      • Studenci
      • Firmy
      • Deweloperzy open source
      • Ludzie ceniący szybkość i stabilność
    • Dla kogo jest ta książka
    • Jak korzystać z tej książki
    • Źródła i jak uczestniczyć w tworzeniu tej książki
  • 1. Rozpoczynamy
    • Instalacja
      • Instalacja rustup w systemach Linux i macOS
      • Instalacja rustup w systemie Windows
      • Aktualizacja i odinstalowywanie
      • Usuwanie błędów
      • Lokalna dokumentacja
    • Hello, world!
      • Tworzenie katalogu projektu
      • Pisanie i uruchamianie programu w języku Rust
      • Anatomia programu w języku Rust
      • Kompilacja i uruchomienie to oddzielne kroki
    • Witaj Cargo!
      • Tworzenie projektu za pomocą Cargo
      • Tworzenie i uruchamianie projektu w Cargo
      • Tworzenie gotowej wersji
      • Cargo jako konwencja
    • Podsumowanie
  • 2. Programowanie zgadywanki
    • Tworzenie nowego projektu
    • Przetwarzanie odpowiedzi
      • Zapisywanie wartości w zmiennych
      • Obsługa potencjalnych błędów za pomocą typu Result
      • Wyświetlanie wartości za pomocą symboli zastępczych w println!
      • Testowanie pierwszej części
    • Generowanie tajnej liczby
      • Korzystanie ze skrzynki, aby rozszerzyć funkcjonalność
      • Generowanie liczby losowej
    • Porównanie liczby odgadniętej z tajną
    • Dopuszczenie wielu prób za pomocą pętli
      • Kończenie programu po poprawnej odpowiedzi
      • Obsługa niepoprawnych danych na wejściu
    • Podsumowanie
  • 3. Typowe pojęcia z zakresu programowania
    • Zmienne i mutowalność
      • Różnice między zmiennymi a stałymi
      • Zasłanianie
    • Typy danych
      • Typy skalarne
      • Typy złożone
    • Funkcje
      • Parametry funkcji
      • Instrukcje i wyrażenia w treści funkcji
      • Funkcje z wartościami zwrotnymi
    • Komentarze
    • Sterowanie przepływem
      • Wyrażenie if
      • Powtarzanie w pętlach
    • Podsumowanie
  • 4. Pojęcie posiadania
    • Czym jest posiadanie?
      • Reguły posiadania
      • Zakres zmiennej
      • Typ String
      • Pamięć i jej przydział
      • Posiadanie i funkcje
      • Zwracane wartości i zakres
    • Odwołania i pożyczki
      • Odwołania mutowalne
      • Wiszące odwołania
      • Reguły odwołań
    • Typ wycinek
      • Wycinki łańcucha
      • Inne wycinki
    • Podsumowanie
  • 5. Używanie struktur do konstruowania powiązanych danych
    • Definiowanie struktur i tworzenie ich instancji
      • Używanie skrótu do inicjacji pola, gdy zmienne i pola mają takie same nazwy
      • Tworzenie instancji z innych instancji za pomocą składni aktualizacji struktury
      • Użycie struktur krotki bez nazywanych pól do tworzenia różnych typów
      • Struktury jako jednostki bez żadnych pól
    • Przykład programu z użyciem struktury
      • Refaktoryzacja za pomocą krotek
      • Refaktoryzacja za pomocą struktur
      • Dodawanie użytecznej funkcjonalności za pomocą wyprowadzonych cech
    • Składnia metody
      • Definiowanie metod
      • Metody z większą liczbą parametrów
      • Funkcje powiązane
      • Wiele bloków impl
    • Podsumowanie
  • 6. Typ wyliczeniowy i dopasowanie wzorca
    • Definiowanie wyliczenia
      • Wartości wyliczeń
      • Wyliczenie Option i jego zalety w porównaniu z wartościami null
    • Operator sterowania przepływem match
      • Wzorce, które są związane z wartościami
      • Dopasowywanie za pomocą Option
      • Dopasowania wyczerpują wszystkie przypadki
      • Symbol zastępczy _
    • Sterowanie przepływem za pomocą if let
    • Podsumowanie
  • 7. Wykorzystanie modułów do porządkowania kodu i jego ponownego wykorzystywania
    • mod i Filesystem
      • Definicje modułów
      • Przenoszenie modułów do innych plików
      • Reguły systemów plików modułów
    • Sterowanie widocznością za pomocą pub
      • Ustawienie funkcji jako publicznej
      • Reguły prywatności
      • Przykłady prywatności
    • Odwoływanie się do nazw w różnych modułach
      • Wprowadzanie nazw do zakresu za pomocą słowa kluczowego use
      • Wprowadzanie wszystkich nazw do zakresu za pomocą glob
      • Użycie super do uzyskiwania dostępu do modułu nadrzędnego
    • Podsumowanie
  • 8. Typowe kolekcje
    • Przechowywanie list wartości za pomocą wektorów
      • Tworzenie nowego wektora
      • Uaktualnianie wektora
      • Usunięcie wektora usuwa jego elementy
      • Czytanie elementów wektora
      • Iterowanie po wartościach w wektorze
      • Użycie wyliczania do przechowywania wielu typów
    • Przechowywanie w łańcuchach tekstu zakodowanego za pomocą UTF-8
      • Czym jest łańcuch?
      • Tworzenie nowego łańcucha
      • Aktualizacja łańcucha
      • Indeksowanie łańcuchów
      • Dzielenie łańcuchów na wycinki
      • Metody iterowania po łańcuchach
      • Łańcuchy nie są takie proste
    • Przechowywanie kluczy z powiązanymi wartościami w mapach skrótów
      • Tworzenie nowej mapy skrótów
      • Mapy skrótów a posiadanie
      • Dostęp do wartości w mapie skrótów
      • Aktualizacja mapy skrótów
      • Funkcje skrótu
    • Podsumowanie
  • 9. Obsługa błędów
    • Błędy nienaprawialne z makrem panic!
      • Użycie śladu panic!
    • Błędy do naprawienia za pomocą Result
      • Dopasowywanie przy różnych błędach
      • Skróty do paniki przy błędzie: unwrap i expect
      • Propagowanie błędów
    • Panikować czy nie panikować
      • Przykłady, prototypowy kod i testy
      • Przypadki, w których mamy więcej informacji niż kompilator
      • Wskazówki dotyczące obsługi błędów
      • Tworzenie niestandardowych typów do celów sprawdzania
    • Podsumowanie
  • 10. Typy generyczne, cechy i czasy życia
    • Usuwanie duplikacji przez wyodrębnienie funkcji
    • Generyczne typy danych
      • W definicjach funkcji
      • Definicje w strukturze
      • W definicjach wyliczeń
      • W definicjach metod
      • Wydajność kodu z użyciem typów generycznych
    • Cechy definiowanie wspólnego zachowania
      • Definiowanie cechy
      • Implementowanie cechy na typie
      • Implementacje domyślne
      • Granice cech
      • Naprawa funkcji largest za pomocą granic cech
      • Używanie granic cech do metod implementowanych warunkowo
    • Sprawdzanie odwołań za pomocą czasów życia
      • Zapobieganie wiszącym odwołaniom za pomocą czasów życia
      • Kontroler pożyczek
      • Generyczne czasy życia w funkcjach
      • Składnia adnotacji dla czasu życia
      • Adnotacje o czasie życia w sygnaturach funkcji
      • Myślenie w kategoriach czasów życia
      • Adnotacje o czasie życia w definicjach struktur
      • Pominięcie czasu życia
      • Adnotacje o czasie życia w definicjach metod
      • Statyczny czas życia
    • Parametry generycznego typu, granice cech i czas życia w połączeniu
    • Podsumowanie
  • 11. Pisanie automatycznych testów
    • Jak pisać testy
      • Anatomia funkcji testowania
      • Sprawdzanie wyników za pomocą makra assert!
      • Testowanie równości za pomocą makr assert_eq! i assert_ne!
      • Dodawanie niestandardowych komunikatów
      • Testowanie kodu pod kątem paniki za pomocą should_panic
    • Sterowanie sposobem uruchamiania testów
      • Uruchamianie testów równolegle lub po kolei
      • Pokazywanie wyników funkcji
      • Uruchomienie podzbioru testów według nazwy
      • Pomijanie niektórych testów, jeśli nie zostaną konkretnie wymienione
    • Organizacja testów
      • Testy jednostkowe
      • Testy integracyjne
    • Podsumowanie
  • 12. Projekt we/wy budowa programu wiersza poleceń
    • Akceptowanie argumentów wiersza poleceń
      • Czytanie wartości argumentów
      • Zapisywanie wartości argumentów w zmiennych
    • Czytanie pliku
    • Refaktoryzacja w celu poprawienia modułowości i obsługi błędów
      • Oddzielanie problemów w projektach binarnych
      • Naprawa obsługi błędów
      • Wyodrębnianie kodu z main
      • Podział kodu do skrzynki bibliotecznej
    • Tworzenie funkcjonalności biblioteki przy użyciu TDD
      • Pisanie testu zakończonego niepowodzeniem
      • Pisanie testu, który przejdzie
    • Praca ze zmiennymi środowiskowymi
      • Pisanie testu zakończonego niepowodzeniem dla funkcji nierozróżniających wielkości liter
      • Implementacja funkcji search_case_insensitive
    • Pisanie komunikatów o błędach do standardowego błędu zamiast standardowego wyjścia
      • Sprawdzanie, gdzie są zapisywane błędy
      • Zapisywanie błędów do standardowego błędu
    • Podsumowanie
  • 13. Funkcje języka funkcyjnego: iteratory i zamknięcia
    • Zamknięcia anonimowe funkcje, które mogą przechwycić swoje środowisko
      • Tworzenie abstrakcji zachowania za pomocą zamknięć
      • Wnioskowanie o typie zamknięcia i adnotacje
      • Zapisywanie zamknięć z użyciem parametrów generycznych i cech Fn
      • Ograniczenia implementacji Cacher
      • Przechwytywanie środowiska za pomocą zamknięć
    • Przetwarzanie ciągów elementów za pomocą iteratorów
      • Cecha Iterator i metoda next
      • Metody, które zużywają iterator
      • Metody tworzące inne iteratory
      • Wykorzystanie zamknięć, które przechwytują swoje środowisko
      • Tworzenie własnych iteratorów za pomocą cechy Iterator
    • Ulepszanie naszego projektu we/wy
      • Usuwanie klonu za pomocą iteratora
      • Bardziej przejrzysty kod dzięki adapterom iteratora
    • Porównywanie wydajności pętle a iteratory
    • Podsumowanie
  • 14. Więcej informacji o Cargo i Crates.io
    • Wersje niestandardowe z profilami wydania
    • Publikacja skrzynki w Crates.io
      • Dokonywanie użytecznych komentarzy dokumentujących
      • Eksport wygodnego publicznego API za pomocą pub use
      • Tworzenie konta Crates.io
      • Dodawanie metadanych do nowej skrzynki
      • Publikowanie w Crates.io
      • Publikowanie nowej wersji istniejącej skrzynki
      • Usuwanie wersji z Crates.io za pomocą cargo yank
    • Przestrzenie robocze Cargo
      • Tworzenie przestrzeni roboczej
      • Tworzenie drugiej skrzynki w przestrzeni roboczej
    • Instalowanie wersji binarnych z Crates.io za pomocą cargo install
    • Rozszerzanie Cargo za pomocą niestandardowych poleceń
    • Podsumowanie
  • 15. Inteligentne wskaźniki
    • Używanie Box do wskazywania danych na kopcu
      • Używanie Box do zapisu danych na kopcu
      • Włączenie typów rekurencyjnych z pudełkami
    • Traktowanie inteligentnych wskaźników jak zwykłych odwołań z cechą Deref
      • Podążanie za wskaźnikiem do wartości z użyciem operatora wyłuskiwania
      • Używanie Box jak odwołania
      • Definiowanie własnego inteligentnego wskaźnika
      • Traktowanie typu jak odwołania dzięki implementacji cechy Deref
      • Niejawne wymuszanie Deref z funkcjami i metodami
      • Jak wymuszanie Deref współdziała z mutowalnością
    • Uruchamianie kodu czyszczącego z cechą Drop
      • Wczesne odrzucanie wartości z zastosowaniem std::mem::drop
    • Rc inteligentny wskaźnik ze zliczaniem odwołań
      • Używanie Rc do współdzielenia danych
      • Klonowanie Rc zwiększa licznik odwołań
    • RefCell oraz wzorzec wewnętrznej mutowalności
      • Wymuszanie reguł pożyczania podczas wykonania za pomocą RefCell
      • Mutowalność wewnętrzna mutowalne pożyczanie niemutowalnej wartości
      • Wielu posiadaczy zmiennych danych dzięki połączeniu Rc i RefCell
    • Odwołania cykliczne mogą prowadzić do wycieku pamięci
      • Tworzenie odwołań cyklicznych
      • Zapobieganie odwołaniom cyklicznym zmiana Rc na Weak
    • Podsumowanie
  • 16. Współbieżność bez obaw
    • Użycie wątków do równoległego uruchamiania kodu
      • Tworzenie nowego wątku za pomocą spawn
      • Oczekiwanie, aż wszystkie wątki się zakończą, z użyciem JoinHandle
      • Korzystanie z zamknięcia move z wątkami
    • Używanie przekazywania komunikatów do transferu danych między wątkami
      • Kanały i przeniesienie własności
      • Wysyłanie wielu wartości i oczekujący nadajnik
      • Tworzenie wielu producentów przez klonowanie nadajnika
    • Współbieżność ze współdzieleniem zasobów
      • Wykorzystanie muteksów w celu zezwolenia na dostęp do danych z jednego wątku naraz
      • Podobieństwa między RefCell/Rc a Mutex/Arc
    • Elastyczna współbieżność z cechami Sync i Send
      • Pozwolenie na przenoszenie posiadania między wątkami za pomocą Send
      • Pozwolenie na dostęp z wielu wątków za pomocą Sync
      • Ręczne implementowanie Send i Sync nie jest bezpieczne
    • Podsumowanie
  • 17. Własności programowania obiektowego w języku Rust
    • Charakterystyka języków obiektowych
      • Obiekty zawierają dane i działanie
      • Enkapsulacja, która ukrywa szczegóły implementacji
      • Dziedziczenie jako system typów i jako współdzielenie kodu
    • Wykorzystywanie obiektów cech, które dopuszczają wartości różnych typów
      • Definiowanie cechy dla jednolitego zachowania
      • Implementowanie cechy
      • Obiekty cech wykonują dynamiczne wysyłki
      • Bezpieczeństwo obiektowe jest wymagane dla obiektów cech
    • Implementowanie wzorca projektu obiektowego
      • Definiowanie postu i tworzenie nowej instancji w stanie Draft
      • Przechowywanie tekstu treści postu
      • Gwarantowanie, że treść projektu postu jest pusta
      • Żądanie oceny postu zmienia jego stan
      • Dodawanie metody approve, która zmienia zachowanie treści
      • Kompromisy wzorca stanu
    • Podsumowanie
  • 18. Wzorce i dopasowywanie
    • Wszystkie miejsca, w których można korzystać ze wzorców
      • Gałęzie match
      • Wyrażenia warunkowe if let
      • Warunkowe pętle while let
      • Pętle for
      • Instrukcja let
      • Parametry funkcji
    • Podważalność czy dopasowanie do wzorca może się nie udać
    • Składnia wzorca
      • Dopasowywanie literałów
      • Dopasowywanie nazwanych zmiennych
      • Wiele wzorców
      • Dopasowywanie zakresów wartości za pomocą składni ...
      • Destrukturyzacja w celu rozdzielenia wartości
      • Pomijanie wartości we wzorcu
      • Tworzenie odwołań we wzorcach za pomocą ref i ref mut
      • Dodatkowe instrukcje warunkowe ze strażnikami dopasowania
      • Wiązania @
    • Podsumowanie
  • 19. Funkcje zaawansowane
    • Niebezpieczny Rust
      • Niebezpieczne super możliwości
      • Wyłuskiwanie pierwotnego wskaźnika
      • Wywoływanie niebezpiecznej funkcji lub metody
      • Uzyskiwanie dostępu do modyfikowalnej zmiennej statycznej lub jej modyfikowanie
      • Implementacja niebezpiecznej cechy
      • Kiedy korzystać z kodu, który nie jest bezpieczny
    • Zaawansowane czasy życia
      • Podtypy czasów życia jako gwarancja, że jeden czas życia jest dłuższy od innego
      • Granice czasu życia w odwołaniach do typów generycznych
      • Wnioskowanie o czasach życia obiektów cech
    • Zaawansowane cechy
      • Określanie typów symboli zastępczych w definicjach cech z powiązanymi typami
      • Domyślne parametry typów generycznych i przeciążenie operatora
      • Składnia w pełni kwalifikowana dla jednoznaczności wywoływanie metod z taką samą nazwą
      • Użycie super cech, aby wymagać funkcjonalności jednej cechy wewnątrz innej cechy
      • Użycie wzorca newtype do implementacji zewnętrznych cech na zewnętrznych typach
    • Typy zaawansowane
      • Użycie wzorca newtype dla bezpieczeństwa typów i abstrakcji
      • Tworzenie synonimów typu z aliasami typów
      • Typ nigdy, który nigdy niczego nie zwraca
      • Typy o dynamicznie określanych rozmiarach i cecha Sized
    • Zaawansowane funkcje i zamknięcia
      • Wskaźniki funkcji
      • Zwracanie zamknięć
    • Podsumowanie
  • 20. Ostatni projekt budowanie wielowątkowego serwera WWW
    • Budowanie jednowątkowego serwera WWW
      • Nasłuchiwanie połączeń TCP
      • Czytanie żądania
      • Bliższe spojrzenie na żądanie HTTP
      • Pisanie odpowiedzi
      • Zwracanie rzeczywistego HTML
      • Sprawdzanie poprawności żądania i selektywne odpowiadanie
      • Nieco refaktoryzacji
    • Zamiana serwera jednowątkowego na wielowątkowy
      • Symulowanie powolnego żądania w bieżącej implementacji serwera
      • Poprawienie przepustowości za pomocą puli wątków
    • Płynne zakończenie i czyszczenie
      • Implementacja cechy Drop na ThreadPool
      • Sygnalizowanie wątkom, aby przestały nasłuchiwać zadań
    • Podsumowanie
  • A. Słowa kluczowe
    • Słowa kluczowe obecnie stosowane
    • Słowa kluczowe zarezerwowane do użycia w przyszości
  • B. Operatory i symbole
    • Operatory
    • Symbole inne niż operatory
  • C. Cechy wyprowadzone
    • Debugowanie wyjścia dla programisty
    • PartialEq i Eq do porównań równościowych
    • PartialOrd i Ord do porównywania kolejności
    • Klonowanie i kopiowanie zduplikowanych wartości
    • Cecha Hash do odwzorowania wartości na wartość o ustalonym rozmiarze
    • Cecha Default dla wartości domyślnych
  • D. Makra
    • Różnica między makrami a funkcjami
    • Makra deklaratywne z macro_rules! do celów ogólnego metaprogramowania
    • Makra proceduralne do celów niestandardowych wyprowadzeń
    • Przyszłość makr
  • Przypisy

Dodaj do koszyka Programowanie w języku Rust

Code, Publish & WebDesing by CATALIST.com.pl



(c) 2005-2024 CATALIST agencja interaktywna, znaki firmowe należą do wydawnictwa Helion S.A.