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 CoroutinenProgrammiersprache C++: Ein anspruchsvoller Prioritäts-Scheduler für Coroutinen
- 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
- Der Drei-Weg-Vergleichsoperator
- Die Bibliothek
- Geschützter Zugriff auf Sequenzen von Objekten mit std::span
- constexpr std::vector und std::string mit C++20
- Neue praktische Funktionen für Container in C++20
- std::format
- Noch mehr praktische Werkzeuge in C++20
- Kalender und Zeitzonen
- 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++ 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...