Inhalt
Embracing Modern C++ Safely, verfasst von John Lakos, Vittorio Romeo, Rostislav Khlebnikov und Alisdair Meredith, ist ein umfassendes Werk mit über 1300 Seiten, das sich den Sprachmerkmalen widmet, die in C++11 und C++14 eingeführt wurden. Das Buch ist in Abschnitte gegliedert, die sich auf einzelne Sprachmerkmale konzentrieren, weitgehend unabhängig voneinander, sodass Leser sie in nahezu beliebiger Reihenfolge konsultieren können. Diese Struktur ist größtenteils effektiv, obwohl einige eng verwandte Merkmale aus C++11 und C++14 auf separate, nicht aufeinanderfolgende Abschnitte verteilt sind, was von einer verbesserten Querverweisung für eine einfachere Navigation profitieren könnte.\n\nDas Buch ist in vier Hauptkapitel unterteilt: ein einführendes Kapitel Null und drei Teile mit den Bezeichnungen "Sichere Merkmale", "Bedingt sichere Merkmale" und "Unsichere Merkmale." Die Verwendung des Begriffs "sicher" ist jedoch etwas problematisch. Die Autoren definieren Sicherheit nicht im Sinne technischer Korrektheit oder typischer Programmiersicherheit, sondern im Hinblick auf das Geschäftsrisiko bei der Einführung neuer Sprachmerkmale in einem Codebasis, die auf C++03 basiert, ohne umfassende Schulung der Entwickler. Folglich wird nur eine kleine Teilmenge von Merkmalen als wirklich "sicher" eingestuft, während viele andere in die Kategorie "bedingt sicher" fallen, was auf die Notwendigkeit einer Schulung für deren effektive Nutzung hinweist. Der Rezensent betrachtet diese Klassifizierung als den schwächsten Aspekt des Buches und empfiehlt den Lesern, sie zu ignorieren. Stattdessen sollten sich die Leser auf die Abschnitte zu "Anwendungsfällen", "Möglichen Fallstricken" und "Ärgernissen" konzentrieren, um sich eine eigene Meinung zu bilden.\n\nEine bemerkenswerte Diskussion im Buch betrifft das Konzept der "Generalisierten PODs" (Plain Old Data-Typen). Die Autoren erläutern die Standard-C++-Definitionen im Zusammenhang mit trivialen und trivial zerstörbaren Objekten, bevor sie ihren eigenen Begriff "notionally trivially destructible" einführen. Dieser Begriff beschreibt Objekte, deren Destruktoren keine Auswirkungen auf die Programmlogik haben, wie solche, die nur für das Logging verwendet werden. Dieses Konzept ist jedoch kein Teil der C++-Sprachspezifikation und birgt das Risiko von Verwirrung aufgrund seiner Ähnlichkeit mit etablierten Begriffen. Darüber hinaus könnte die Einführung dieses Begriffs potenziell zu unsicheren Programmierpraktiken und undefiniertem Verhalten führen, was dem Ziel des Buches, eine sichere Nutzung zu fördern, widerspricht.\n\nDas Buch behandelt ausschließlich Sprachmerkmale und lässt Bibliotheksmerkmale aus, die ein integraler Bestandteil der Verbesserungen von C++11 und C++14 sind. Beispielsweise werden verbesserte Standardbibliothekskomponenten wie std::unique_ptr im Vergleich zu std::auto_ptr hier nicht behandelt. Obwohl dieses Auslassen angesichts der beträchtlichen Länge des Buches verständlich ist, stellt es eine verpasste Gelegenheit dar, ein vollständigeres Bild von modernem C++ zu vermitteln.\n\nPhysisch betrachtet stellt das Format des Buches einige Herausforderungen dar. Seine beträchtliche Größe und sein Gewicht machen es unbequem, es über längere Zeiträume zu halten, was oft zu unbequemen Lesehaltungen führt. Zudem verwendet das Taschenbuch sehr dünnes Papier, das den Text der Rückseite durchscheinen lässt, und der Beispielcode enthält Kommentare in einer blassgrauen Schrift, die unter vielen Lichtverhältnissen schwer lesbar ist. Diese Faktoren können das Leseerlebnis beeinträchtigen, insbesondere da die Kommentare für das Verständnis der Codebeispiele wesentlich sind. Die E-Book-Ausgaben könnten einige dieser Probleme mildern, was der Rezensent jedoch nicht bestätigt hat.\n\nTrotz dieser Kritikpunkte bietet das Buch erheblichen Wert durch die detaillierte Behandlung jedes Sprachmerkmals. Jeder Abschnitt erklärt, wie sich das Merkmal von seinen C++03-Pendants unterscheidet, liefert genaue Syntaxdetails, beschreibt beabsichtigte Anwendungsfälle und hebt potenzielle Fallstricke hervor. Diese Informationsdichte macht das Buch zu einer nützlichen Ressource für Entwickler, die verstehen möchten, wie moderne C++-Merkmale funktionieren und welche Risiken sie mit sich bringen können. Während für komplexere Merkmale eine formale Schulung empfohlen wird, bieten die Beispiele und Erklärungen des Buches eine solide Grundlage für den Einstieg.\n\nZusammenfassend ist Embracing Modern C++ Safely eine bedingt empfohlene Ressource. Es enthält eine Fülle wertvoller Informationen, wird jedoch durch organisatorische Entscheidungen, die umstrittene "Sicherheits"-Terminologie und physische Designaspekte beeinträchtigt. Potenzielle Leser sollten diese Faktoren abwägen und erwägen, ihr Lernen durch Schulungen und zusätzliche Materialien, insbesondere zu Bibliotheksmerkmalen, zu ergänzen, um ein umfassendes Verständnis von modernem C++ zu erlangen.