Ekstremalny kod w języku C. Współbieżność i programowanie zorientowane obiektowo

78.67

Opis

Jeśli uważasz, że język C dawno został odłożony do lamusa, jesteś w błędzie. Wielu inżynierów oprogramowania o nim zapomniało, jednak C wciąż cieszy się popularnością. Jest przy tym uważany za dość trudny język programowania, gdyż samo opanowanie jego składni to za mało, aby efektywnie go wykorzystywać. Właśnie dlatego ceni się programistów z wnikliwym i naukowym podejściem do reguł i praktyk. Tylko wtedy można wykorzystać możliwości języka C do tworzenia efektywnych systemów. W tym celu profesjonalny programista C musi tworzyć kod na bardzo wysokim poziomie.To książka przeznaczona dla programistów, którzy chcą stać się ekspertami języka C. Przedstawia zasady pracy z dyrektywami preprocesora, makrami, kompilacją warunkową i ze wskaźnikami. Omawia ważne aspekty projektowania algorytmów, funkcji i struktur. Sporo miejsca poświęcono tu kwestii uzyskiwania maksimum wydajności z aplikacji działających w środowisku o ograniczonych zasobach. Starannie opisano, jak C współpracuje z systemem Unix, w jaki sposób zaimplementowano reguły zorientowane obiektowo w języku C, a także jak wykorzystać wieloprocesowość. To świetny materiał bazowy do samodzielnego badania, zadawania pytań i eksperymentowania z kodem.W książce między innymi:zaawansowane elementy języka Cstruktury pamięci i proces kompilacjiprogramowanie zorientowane obiektowo w proceduralnym kodzie Ctworzenie kodu na niskim poziomiewspółbieżność, wielowątkowość i integracja z innymi językami programowaniatesty jednostkowe i debugowanie oraz komunikacja międzyprocesowaProgramowanie w C: przejdź na najwyższy poziom!Spis treści:O autorze 11O recenzentach technicznych 13Wprowadzenie 15Rozdział 1. Funkcje podstawowe 23Dyrektywy preprocesora 25Makra 26Kompilacja warunkowa 39Wskaźniki zmiennych 42Składnia 43Operacje arytmetyczne na wskaźnikach zmiennych 45Wskaźniki ogólne 48Wielkość wskaźnika 51Zapomniany wskaźnik 51Wybrane informacje szczegółowe dotyczące funkcji 54Anatomia funkcji 54Waga projektu 55Zarządzanie stosem 55Przekazywanie przez wartość kontra przekazywanie przez referencję 56Wskaźniki funkcji 59Struktury 61Dlaczego struktura? 62Dlaczego typ zdefiniowany przez użytkownika? 62Jakie możliwości oferuje struktura? 63Układ pamięci 64Struktury zagnieżdżone 68Wskaźniki struktur 69Podsumowanie 70Rozdział 2. Od kodu źródłowego do pliku binarnego 73Proces kompilacji 74Kompilacja projektu w języku C 76Etap 1. Uruchomienie preprocesora 83Etap 2. Kompilacja 84Etap 3. Uruchomienie asemblera 87Etap 4. Linkowanie 90Preprocesor 93Kompilator 97Drzewo składniowe 98Asembler 100Linker 101Jak działa linker? 102Można oszukać linkera! 110Dekorowanie nazw C++ 114Podsumowanie 116Rozdział 3. Pliki obiektowe 117Interfejs binarny aplikacji 118Formaty plików obiektowych 120Relokowane pliki obiektowe 121Wykonywalne pliki obiektowe 126Biblioteki statyczne 130Biblioteki dynamiczne 138Ręczne wczytywanie bibliotek współdzielonych 143Podsumowanie 145Rozdział 4. Struktura pamięci procesu 147Układ pamięci procesu 148Określanie struktury pamięci 149Analiza statycznego układu pamięci 150Segment BSS 152Segment data 154Segment text 158Analiza dynamicznego układu pamięci 160Mapowanie pamięci 161Segment stack 165Segment sterty 167Podsumowanie 170Rozdział 5. Stos i sterta 173Stos 174Analizowanie stosu 175Kwestie związane z używaniem pamięci stosu 182Sterta 185Alokacja i zwalnianie pamięci na stercie 187Reguły dotyczące pamięci sterty 196Zarządzanie pamięcią w ograniczonym środowisku 199Środowiska o ograniczonej ilości pamięci 200Środowisko charakteryzujące się większą wydajnością działania 202Podsumowanie 208Rozdział 6. Programowanie zorientowane obiektowo i hermetyzacja 211Myślenie w sposób zorientowany obiektowo 214Koncepcje myślowe 215Mapowanie idei w głowie i modele obiektowe 216Obiekty nie znajdują się w kodzie 218Atrybuty obiektu 219Domena 220Relacje między obiektami 221Operacje zorientowane obiektowo 222Obiekt ma zdefiniowane zachowanie 224Dlaczego język C nie jest zorientowany obiektowo? 225Hermetyzacja 226Hermetyzacja atrybutu 226Hermetyzacja zachowania 229Ukrywanie informacji 239Podsumowanie 246Rozdział 7. Kompozycja i agregacja 247Związki między klasami 247Obiekt kontra klasa 248Kompozycja 250Agregacja 256Podsumowanie 263Rozdział 8. Dziedziczenie i polimorfizm 265Dziedziczenie 266Natura dziedziczenia 267Polimorfizm 281Czym jest polimorfizm? 281Do czego jest potrzebny polimorfizm? 284Jak w języku C zaimplementować zachowanie polimorficzne? 285Podsumowanie 292Rozdział 9. Abstrakcja i programowanie zorientowane obiektowo w C++ 293Abstrakcja 294Zorientowane obiektowo konstrukcje w C++ 297Hermetyzacja 298Dziedziczenie 301Polimorfizm 306Klasa abstrakcyjna 309Podsumowanie 311Rozdział 10. UNIX – historia i architektura 313Historia systemu UNIX 314Systemy operacyjne Multics i UNIX 314Języki BCPL i B 316Droga do powstania języka C 317Architektura systemu UNIX 318Filozofia systemu UNIX 319Warstwy systemu UNIX 320Interfejs powłoki dla aplikacji użytkownika 323Interfejs jądra do warstwy powłoki 327Jądro 333Sprzęt 337Podsumowanie 339Rozdział 11. Jądro i wywołania systemowe 341Wywołania systemowe 342Wywołania systemowe pod mikroskopem 342Pominięcie standardu C – bezpośrednie wykonanie wywołania systemowego 344Wewnątrz funkcji wywołania systemowego 346Dodanie nowego wywołania systemowego do systemu Linux 348Jądro systemu UNIX 361Jądro monolityczne kontra mikrojądro 362Linux 364Moduły jądra 364Podsumowanie 370Rozdział 12. Najnowsza wersja C 371C11 372Określenie obsługiwanej wersji standardu języka C 372Usunięcie funkcji gets() 374Zmiany wprowadzone w funkcji fopen() 374Funkcje sprawdzające granice bufora 376Funkcja niekończąca działania 377Makra typu generycznego 378Unicode 378Unie i struktury anonimowe 384Wielowątkowość 386Słowo o standardzie C18 386Podsumowanie 386Rozdział 13. Współbieżność 389Wprowadzenie do współbieżności 390Równoległość 391Współbieżność 392Jednostka zarządcy zadań 393Procesy i wątki 395Ograniczenie typu „zachodzi wcześniej” 396Kiedy należy używać współbieżności 398Stan współdzielony 405Podsumowanie 410Rozdział 14. Synchronizacja 411Problemy związane ze współbieżnością 412Wrodzone problemy ze współbieżnością 413Problemy pojawiające się po synchronizacji 423Techniki synchronizacji 424Techniki busy-waiting i spinlock 425Mechanizm uśpienia-powiadomienia 428Semafory i muteksy 431Wiele jednostek procesora 436Blokada typu spinlock 441Zmienne warunkowe 442Współbieżność w standardzie POSIX 444Obsługa współbieżności przez jądro 445Wieloprocesowość 447Wielowątkowość 450Podsumowanie 451Rozdział 15. Wykonywanie wątków 453Wątki 454Wątki POSIX 457Tworzenie wątków POSIX 458Przykład stanu wyścigu 463Przykład wyścigu danych 471Podsumowanie 474Rozdział 16. Synchronizacja wątków 477Kontrola współbieżności w standardzie POSIX 478Muteksy POSIX 478Zmienne warunkowe POSIX 481Bariery POSIX 485Semafory POSIX 487Wątki POSIX i pamięć 495Pamięć stosu 495Pamięć sterty 500Widoczność pamięci 504Podsumowanie 506Rozdział 17. Wykonywanie procesów 507API wykonywania procesu 507Tworzenie procesu 510Wykonywanie procesu 515Porównanie tworzenia procesu i wykonywania procesu 517Procedura wykonania procesu 518Stan współdzielony 519Techniki współdzielenia 520Pamięć współdzielona w standardzie POSIX 522System plików 531Wielowątkowość kontra wieloprocesowość 534Wielowątkowość 534Wieloprocesowość w pojedynczym komputerze 535Wieloprocesowość rozproszona 535Podsumowanie 536Rozdział 18. Synchronizacja procesów 537Kontrola współbieżności w pojedynczym hoście 538Nazwane semafory POSIX 539Nazwane muteksy 543Przykład pierwszy 543Przykład drugi 547Nazwane zmienne warunkowe 556Etap 1. Klasa pamięci współdzielonej 557Etap 2. Klasa współdzielonego licznika w postaci 32-bitowej liczby całkowitej 560Etap 3. Klasa muteksu współdzielonego 562Etap 4. Klasa współdzielonej zmiennej warunkowej 565Etap 5. Logika funkcji main() 568Kontrola współbieżności rozproszonej 572Podsumowanie 574Rozdział 19. Gniazda i IPC w pojedynczym hoście 577Techniki IPC 578Protokół komunikacyjny 580Cechy charakterystyczne protokołu 582Sekwencyjność 584Komunikacja w pojedynczym hoście 584Deskryptory plików 585Sygnały POSIX 585Potoki POSIX 589Kolejka komunikatów POSIX 592Gniazda domeny systemu UNIX 594Wprowadzenie do programowania gniazd 595Sieci komputerowe 595Na czym polega programowanie gniazda? 607Podsumowanie 614Rozdział 20. Programowanie oparte na gniazdach 615Podsumowanie informacji o programowaniu gniazd 616Projekt kalkulatora 618Hierarchia kodu źródłowego 619Zbudowanie projektu 623Uruchomienie projektu 623Protokół aplikacji 624Biblioteka serializacji i deserializacji 627Usługa kalkulatora 632Gniazda domeny systemu UNIX 634Serwer strumienia UDS 634Klient strumienia UDS 641Serwer datagramu nasłuchujący na gnieździe UDS 644Klient datagramu używającego gniazda UDS 648Gniazda sieciowe 650Serwer TCP 650Klient TCP 652Serwer UDP 653Klient UDP 654Podsumowanie 655Rozdział 21. Integracja z innymi językami programowania 657Dlaczego integracja w ogóle jest możliwa? 658Pobranie niezbędnych materiałów 659Biblioteka stosu 660Integracja z C++ 666Dekorowanie nazw w C++ 667Kod C++ 669Integracja z Javą 673Utworzenie kodu w Javie 674Przygotowanie części natywnej 679Integracja z Pythonem 686Integracja z Go 689Podsumowanie 692Rozdział 22. Testy jednostkowe i debugowanie 695Testowanie oprogramowania 696Poziomy testowania 697Testy jednostkowe 698Dublery używane podczas testów 706Testowanie komponentu 707Biblioteki testowania kodu w C 709Framework CMocka 710Google Test 718Debugowanie 722Kategorie błędów 724Debugery 724Narzędzia profilowania pamięci 726Debugery wątków 728Narzędzia do profilowania wydajności działania 729Podsumowanie 730Rozdział 23. Systemy kompilacji 731Czym jest system kompilacji? 732Make 733CMake – to nie jest system kompilacji! 740Ninja 745Bazel 747Porównanie systemów kompilacji 750Podsumowanie 750Epilog 751O autorze: Kamran Amini specjalizuje się w programowaniu jądra systemu operacyjnego i tworzeniu rozwiązań osadzonych. Pracował dla wielu doskonale znanych firm irańskich. Pasjonuje się teorią obliczeń, systemami rozproszonymi, uczeniem maszynowym i informatyką kwantową. Interesuje się również powstaniem wszechświata, geometrią czarnych dziur, kwantową teorią pola i teorią strun.

Informatyka

ali express clo, dekarz praca za granicą, winiety niemcy 2021, bilety pś zakopane 2018, połowy dorsza 2021, tarcza zus postojowe, dodatek za pracę zdalną, stoisko po angielsku, jpmorgan polska, wars w pociągu, narty livigno 2019, mapa google europa, oslo czestochowa, ferie od kiedy 2022, podatek na zasadach ogólnych 2021, usługi zwolnione z vat, faktura korygująca zmieniająca nabywcę, cv kierowca zawodowy, gałązka ginekolog, dane do umowy o pracę – wzór, stawki podatku vat 2018

naprawa rolety dzień noc