Wenn Sie sich mit modernem C++-Design beschäftigen möchten und bereits Erfahrung mit objektorientierter Programmierung (OOP) haben, bietet sich als Einstieg die Loki-Bibliothek.
Loki ist eine C++-Softwarebibliothek von Andrei Alexandrescu, die parallel zu seinem Buch „Modern C++ Design."
Die C++-Community kann von einer Bibliothek profitieren, die ein robustes Framework zur Implementierung von Design Patterns bereitstellt. Loki ist dafür ein hervorragender Kandidat. Eine Modernisierung von Loki und die Integration möglichst vieler verbreiteter Design Patterns wäre daher für C++-Entwickler von großem Nutzen.
Die Bibliothek nutzt intensiv C++-Template-Metaprogrammierung, um zahlreiche verbreitete Konstrukte zu implementieren, darunter Typelisten, Funktoren, Singletons, Smart Pointer, Objektfabriken, Visitor und Multimethoden.
Der Autor beschreibt die Motivation hinter dem Design der Bibliothek wie folgt:
- Loki ermöglicht es, gezielt nur die benötigten Funktionen zu verwenden; jede Komponente funktioniert unabhängig von den anderen.
- Nach dem Prinzip „Small is beautiful“ hält Loki seine internen Abhängigkeiten auf ein Minimum beschränkt.
- Die Bibliothek setzt auf „Multiplicative Excellence“: Durch die Kombination kompakter, abstrakter Verhaltensmodule (Policies) entstehen differenzierte und spezialisierte Designs.
- Loki verfolgt eher strategische als taktische Ansätze und priorisiert Design- und Architekturkomponenten gegenüber Low-Level-Details.
- Als Sammlung von Design Patterns statt eines monolithischen Designs macht Loki möglichst wenige Annahmen über seine Einsatzumgebung und bietet durch klar definierte Erweiterungspunkte viel Flexibilität.
- Loki ist auf moderne Compiler zugeschnitten und strebt innerhalb des C++-Standards nach möglichst klarem Code, ohne Kompromisse zugunsten weniger leistungsfähiger Compiler einzugehen.
- Die Komponenten sind kompakt, leicht zu verstehen und zu implementieren, einzeln wie in Kombination wirkungsvoll und für reale Projekte besonders nützlich.
Loki enthält mehrere wertvolle Design Patterns, darunter:
- Factory
- Abstract Factory
- Visitor
- Singleton
Darüber hinaus nutzt Loki mehrere nützliche Idiome:
- Policy-basiertes Design
- Multiple Dispatcher
- Pimpl
- Printf (a typesafe printf replacement)
- Geordnete Erstellung statischer Objekte
- Scope-Guard-Pointer
- Small Object Allocator
- Smart Pointer
- Compile-Time-Prüfung
Eine ausführliche Erklärung der genannten Idiome finden Sie in dieser aufschlussreichen Ressource.
CoderGears hat einen Wettbewerb gestartet, um diese bemerkenswerte Bibliothek zu aktualisieren. Das Hauptziel besteht darin, Design Patterns anhand einer gut konzipierten Bibliothek zu erlernen und zugleich die Funktionen neuerer C++-Standards bestmöglich zu nutzen.
Für Entwickler, die Loki modernisieren möchten, stellt sich zunächst die Frage: Was ist der erste Schritt in diesem Refactoring-Prozess?
Loki entstand vor der Einführung neuerer C++-Standards. Einige der ursprünglich vom Autor entworfenen und entwickelten Klassen besitzen daher inzwischen Entsprechungen in den aktuellen Standards. Dazu gehören:
- SmartPointer
- Tuple
- NullType
- Typelist
- static_check
Der erste Schritt besteht daher darin, diese Klassen zu entfernen und ihre Verwendungen im übrigen Quellcode durch die modernen Entsprechungen zu ersetzen.
In naher Zukunft planen wir eine Reihe von Beiträgen über diese außergewöhnliche Bibliothek, um Entwickler bei ihrer Modernisierung zu unterstützen.
