Der Einstieg in den Blog Modernes C++. Eine einfache Übersicht zu allen bestehenden und kommenden Artikeln.
Diese Übersicht verfolgt zwei Ziele. Das erste Ziel ist offensichtlich. Durch die Struktur siehst du direkt, welche Artikel bisher geschrieben wurden und wie diese einfach zu finden sind. Das zweite Ziel ist schon deutlich anspruchsvoller - vor allem für mich. Ich werde in diesem Artikel sukzessiv die Gliederung entwerfen, damit klar ist, wohin die Reise mit diesem Blog weitergehen wird. Das heißt zum einen, ich werde die Struktur immer weiter verfeinern, das heißt zum anderen, ich werde die nackte Struktur immer weiter mit Fleisch unterfüttern.
Multithreading in modernem C++
C++-Speichermodell
- Überblick
- Atomare Datentypen
- Synchronisations- und Ordnungsbedingungen
- Die verschiedenen C++-Speichermodelle
- Sequenzielle Konsistenz
- Acquire-Release-Semantik
- Relaxed-Semantik
- Fences
Standardisierte Threading-Schnittstelle
- Threads
- Threadlokale Daten
- Bedingungsvariablen
- Tasks
- Bedingungsvariablen versus Tasks zur Synchronisation von Threads
- Herausforderungen
Multihreading mit C++17 und C++20
- Überblick
- C++17
- C+++20
Anwendung Multithreading
- Die Zeitbibliothek
- Sukzessive Optimierung von Variablenzugriffen
- Threadsicheres Initialisieren eines Singletons
- Die Summe aller Elemente eines std::vector berechnen
- CppMem
- Überblick
- Nicht synchronisierter Zugriff
- Sukzessive Optimierung 1 (Sequenziellen Konsistenz)
- Sukzessive Optimierung 2 (Bruch der Sequenziellen Konsistenz)
- Das Dining Philsophers Problem
Embedded Programmierung mit C++
Hohe Sicherheitsanforderungen
- C++11
- Automatische Typableitung mit auto
- Verengung verhindern mit {}-Initialisierung
- Zusicherungen zur Compilezeit mit static_assert und der Type-Traits Bibliothek
- Immer sicherer- Ein einführendes Beispiel zur Type-Traits Bibliothek
- Typeigenschaften abfragen
- Typen vergleichend und modifizieren
- Benutzerdefinierte Literale
- Typsicheres Rechnen mit Benutzerdefinierten Literalen
- Raw und Cooked
- Streng typisierte Auszählungstypen
- override und final
- Die Null-Zeiger-Konstante nullptr
Performanz zählt
- C++98
- C++11
- C++14
Sorgfältiger Umgang mit Ressourcen
- Automatische Speicherverwaltung
- Smart Pointer
- Die STL-Container
- Smart Pointer
- C++-Idiome
- Explizites Speicherverwaltung
- Globale operator new und delete überladen
- std::allocator
- Strategien für das Anfordern von Speicher
- Vor- und Nachteile der verschiedenen Speicherstrategien
- Memory Pool Allokatoren von Jonathan Müller
- Globale operator new und delete überladen
Funktionale Programmierung mit C++
- Ein einfacher Vergleich: Objektorientierte, generische und funktionale Programmierung
- Funktionale Feature in C++
- Definition
- Charakteristiken
- Funktionale Programmierung mit C++17 und C++20
Designmuster und Architekturmuster
- Ein erster Überblick
- Einführung
- Begrifflichkeit
- Design Patterns
- Erzeugungsmusters
- Fabrikmethode
- Das Singleton-Pattern
- Strukturmuster
- Patterns in der Softwareentwicklung: Das Adapter-Muster
- Patterns in der Softwareentwicklung: Das Brückenmuster
- Patterns in der Softwareentwicklung: Das Decorator-Muster
- Patterns in der Softwareentwicklung: Das Kompositum-Muster
- Patterns in der Softwareentwicklung: Das Strukturpattern Fassade
- Patterns in der Softwareentwicklung: Das Stellvertretermuster
- Patterns in der Softwareentwicklung: Das Beobachtermuster
- Verhaltensmuster
- Erzeugungsmusters
- Idiome
- Allgemein
- Klassen
- Programmiersprache C++: Rule of Zero, or Six
- Idiome in der Softwareentwicklung: Reguläre Datentypen
- Idiome in der Softwareentwicklung: Value-Objekte
- Patterns in der Softwreentwicklung: Das Nullobjekt-Entwurfsmuster
- Idiome in der Softwareentwicklung: Das Iterator-Protokoll
- Idiome in der Softwareentwicklung: Covariant Return Type
- Polymorphie
- Templates
- Architekturpattern
- Woran erkannt man eine gute Softwarearchitektur? von Alexander Eisenhuth
- Strukturen in der Softwareentwicklung: Architekturmuster
- Patterns in der Softwarearchitektur: Das Schichtenmuster
- Patterns in der Softwarearchitektur: Das Pipes-and-Filters-Muster
- Pattern in der Softwarearchitektur: Das Broker-Muster
- Pattern in der Softwarearchitektur: Model-View-Controller
- Concurrency
- Softwareentwicklung: Patterns für nebenläufige Anwendungen
- Patterns in der Softwareentwicklung für das Teilen von Daten zwischen Threads
- Softwareentwicklung: Umgang mit Veränderung - das Thread-Safe-Interface
- Softwareentwicklung: Umgang mit Veränderung - Locking
- Softwareentwicklung. Umgang mit Veränderungen - Guarded Suspension
- Patterns in der Softwarearchitektur: Das Active Object
- Patterns in der Softwarearchitektur: Monitor Object
- Fehlerkorrektur zum Beitrag über Monitor Object in der Thread-Safe Queue
C++17
- Kernsprache
- Bibliothek
- std::byte
- std::filesystem
- std::string_view
- std::any, std::optional, and std::variant
- Neue Algorithmen in der STL
- Verbesserte Container mit C++17
- Parallele Algorithmen der STL mit dem GCC-Compiler
- Performance der parallelen STL-Algorithmen
- Programmiersprache C++: Benchmark der parallelen STL-Algorithmen
- Softwareentwicklung: Polymorphe Allokatoren in C++17
- Softwareentwicklung: Spezielle Allokatoren mit C++17
- Sofwareentwicklung: Optimierung mit Allokatoren in C++17
C++20
- Das nächste große Ding: C++20
- Überblick
- Details
- Concepts
- Zwei Extreme und die Rettung dank Concepts
- Die Details
- Die Placeholder Syntax
- Syntactic Sugar
- Was wir nicht bekommen
- Vordefinierte Conceps
- Concepts definieren
- Definition von Concepts (Logische Kombination von anderen Concepts und Compilezeitprädikaten)
- Concepts mit Requires Expressions definieren
- Requires Expressions in C++20 direkt verwenden
- Die Concept Equal und Ordering definieren
- Die Concepts SemiRegular und Regular definieren
- Datentypen mit Concepts prüfen - Die Motivation
- Datentypen mit Concept prüfen
- Concepts in C++20: Eine Evolution oder eine Revolution?
- Ranges Bibliothek
- Die Ranges Bibliothek
- Funktionale Pattern mit der Ranges-Bibliothek
- Die Ranges Bibliothek in C++20: Mehr Details
- Projektionen mit Ranges
- Sentinels und Concepts mit Ranges
- Verbesserte Iteratoren mit Ranges
- Die Ranges-Bibliothek in C++20: Designentscheidungen
- Die Ranges-Bibliothek in C++20: Weitere Designentscheidungen
- Pythonisch mit der Ranges-Bibliothek: range und filter
- Pythons range-Funktion, die zweite
- Die map-Funktion von Python
- Couroutinen
- Ein erster Überblick
- Mehr Details
- Ein unendlicher Datenstrom mit Coroutinen
- Thread-Synchronisation mit Coroutinen
- cppcoro
co_return
- co_yield
- co_await
- Softwareentwicklung: Eine kompakte Einführung in Coroutinen von Dian-Lun Li
- Coroutinen: Ein Scheduler für Tasks - Teil 2 von Dian-Lun Li
- Programmiersprache C++: Ein Prioritäts-Scheduler für Coroutinen
- Programmiersprache C++: Ein anspruchsvoller Prioritäts-Scheduler für Coroutinen
- Korrektur: Bug in dem Priority-Scheduler für Coroutinen im C++-Blog
- Softwareentwicklung: Ein Coroutine-basiertes Consumer-Producer-Workflow
- Module
- Die Vorteile von Modulen
- Ein einfaches math Modul
- Module Interface Unit und Module Implementation Unit
- Module strukturieren
- Weitere offene Fragen zu Modulen
- Private Module Fragment und Header Units
- C++20: Modulunterstützung der großen drei Compiler
- C++20: Weilere Details zur Modulunterstützung der großen drei Compiler
- Die Kernsprache
- Der Drei-Weg-Vergleichsoperator
- Designated Initializers
- consteval und constinit
- Die Lösung des Static Initialization Order Fiasco
- Verschiedene Template Verbesserungen mit C++20
- Mächtigere Lambda-Ausdrücke mit C++20
- Mehr Lambda-Features mit C++20
- Neue Attribute mit C++20
- volatile und andere kleine Verbesserungen in C++20
-
C++20: Compiler-Funktionen mit Feature-Testing-Makros ermitteln
- Der Drei-Weg-Vergleichsoperator
- Die Bibliothek
- Geschützter Zugriff auf Sequenzen von Objekten mit std::span
- Softwareentwicklulng: std::span in C++20: Mehr Details
- constexpr std::vector und std::string mit C++20
- Neue praktische Funktionen für Container in C++20
- std::format
- Die Grundfunktionalität
- std::format um benutzterdefinierte Datentypen erweitern
- Softwareentwicklung: Die Formatierungsbibliothek in C++20
- Die Formatierungsbibliothek in C++20: Der Formatstring
- Die Formatierungsbibliothek in C++20: Details zum Formatstring
- Die Formatierungsbibliothek in C++20: Formatieren benutzerdefinierter Datentypen
- Noch mehr praktische Werkzeuge in C++20
- Kalender und Zeitzonen
- Tageszeit
- Kalendertage
- Umgang mit Kalendertagen
- Zeitzonen
- Zeit in C++20: Einführung in die Chrono-Terminologie mit Zeitdauer und Zeitpunkt
- Zeit in C++20: Neue Datentypen für die Tageszeit und das Kalenderdatum
- Zeit in C++20: Kalendertermine erstellen
- Zeit in C++20: Kalendertermine darstellen und prüfen
- Zeit in C++20: Kalenderdaten abfragen und Ordinaldaten
- Zeit in C++20: Details zu der Arbeit mit Zeitzonen
- Zeitzonen in C++20: Online-Klassen
- Zeit in C++20: Chrono I/O
- C++20: Chrono I/O: Unformatiert und formatiert
- Sicherer Vergleich von Integralen
- Prüfen von C++-Features
- Bit-Manipulationen mit C++20
- Concurrency
- Concepts
C++23
- C++23: Der neue C++ Standard ist fertig
- Kernsprache
- Bibliothek
- C++23: Ein modularisierte Standardbibliothek und zwei neue Funktionen
- Ranges: Verbesserungen mit C++23
- C++23: Eine neue Art der Fehlerbehandlung mit
std::expected
- C++23: Vier neue assoziative Container
- C++23: Eine multidemensionale View
- C++23: Ranges Verbesserung und
std::generator
-
Programmiersprache C++23: Was sonst noch Interessantes im Standard dabei ist
C++26
C++ Core Guidelines
- Zwei wervolle Ressourcen
- Warum benötigen wir Richtlinien für modernes C++?
- The C++ Core Guidelines
- Die Philosophie
- Interfaces I
- Interfaces II
- Guideline Support Library
- Funktionen
- Definition
- Funktionsparameter
- Klassen
- Überladen
- Aufzählungen (enums)
- Ressourcen
- Ausdrücke und Anweisungen
- Deklarationen
- Deklarationen und die Initialisierung
- Mehr Regeln zu Deklarationen
- Expressions
- Expressons (Zeiger)
- Regeln für Konvertierungen und Casts
- Regeln zu Don'ts (std::move und Slicing)
- Regeln für Anweisungen
- To Switch or not to Switch, that is the Question
- Mehr zu Kontrollstrukturen
- Regeln zur Arithmetik
- Performanz
- Concurrency und Parallelität
- Regeln zur Concurrency und zur Parallelität
- Mehr Regeln zur Concurrency und zur Parallelität
- Validieren von Concurrent-Code
- Teilen von Daten zwischen Threads
- Sich um Kinder-Threads kümmern
- Mehr Fallen in der Concurrency
- Sei dir der Gefahren von Bedingungsvariablen bewußt
- Concurrency und lock-freies Programmieren
- Die Auflösung des Rätsels
- Die verbleibenden Regeln zur lock-freien Programmierung
- Error Handling
- Konstanten und zur Unveränderlichkeit
- Templates und generische Programmierung
- Regeln zu Templates und generischer Programmierung
- Type Erasure
- Type Erasure mit Templates
- Besser spezifisch oder generisch
- Regeln zur Verwendung von Concepts
- Regeln zur Definition von Concepts
- Regeln zur Defintion von Concepts 2
- Übergabe von Funktionsobjekten als Operationen
- Interfaces von Templates
- Reguläre und Semireguläre Datentypen
- Ordnung von benutzerdefinierten Typen
- Regeln zu Templates und Ableitungshierarchien
- Regeln zu Variadic Templates
- Regeln zur Template-Metaprogrammierung
- Programmierung zur Compilezeit
- Programmierung zur Compilezeit mit der Type-Traits-Bibliothek
- Programmierung zur Compilezeit mit der Type-Traits-Bibliothek II
- Programmierung zur Compilezeit mit constexpr
- Weitere Regeln zu Templates Modernes C++
- Überraschung inklusive mit der Spezialisierung von Funktions-Templates
- Missverständnisse und Überraschungen
- Typen, Nichttypen und Templates als Template-Parameter
- Sourcecode
- Die Standard Bibliothek
- Die Standard Bibliothek
- std::array und std::vector sind die erste Wahl
- Mehr besondere Freunde mit std::map und std::unordered_map
- Greife nicht über den Container hinaus
- Regeln zu Strings
- Ein- und Ausgabe-Streams
- Wissen zu Ein- und Ausgabestreams
- "The Regular Expression"-Bibliothek
- Mehr Regeln zu Regulären Ausdrücken
- Wenn RAII versagt
- Unterstützende Abschnitte
Templates
- Erste Schritte
- Grundlagen
- Funktions-Templates
- Klassen-Templates
- Alias Templates und Template Parameter
- Template Argumente
- Template-Spezialisierung
- Details
- Template-Instanziierung
- Variadic Templates
- Die speziellen Freundschaften von Templates
- Abhängige Namen
- Techniken
- Automatischer Rückgabetyp
- Template-Metaprogrammierung
- Die Type-Traits Bibliothek
constexpr
constexpr if
- Design
Rezensionen
C++ Insights
- Implizite Konvertierungen
- Automatische Typableitung
- Template-Instanziierung
- Variadic Templates
- Lambdas
News
Thanks a lot to my Patreon Supporters: Paul Baxter, Meeting C++, Matt Braun, Avi Lachmish, Roman Postanciuc, Venkata Ramesh Gudpati, Tobias Zindl, Dilettant, Marko, Ramesh Jangama, G Prvulovic, Reiner Eiteljörge, Benjamin Huth, and Reinhold Dröge.
Weiterlesen...