Links, Bücher, Artikel, und mehr zur Generischen Programmierung

Generische Programmierung: Bücher, Artikel, Links, und mehr

Die Informationen zur generischen Programmierung sind relativ verstreut. Diese Seite soll ein kleiner Wegweiser sein, strebt jedoch keine Vollständigkeit an. Bedingt durch meine fachlichen Interessen, hat diese Auswahl eine starke Gewichtung auf C++-orientierte Informationen. Für weitere Hinweise und konstruktive Kritik bin ich immer dankbar!

Rangierbahnhof Hamburg © Thorsten Schier - Fotolia.com

Nach einigen allgemeinen Übersichts-Websites gibt es hier Hinweise auf ausgewählte Veröffentlichungen (Bücher, Fachartikel, Tutorials) und Konferenzen zur generischen Programmierung, sowie eine weiter Seite mit Beispielen generischer Bibliotheken.

Übersichten

Eine sehr ausführliche Übersicht zur generischen Programmierung findet sich auf der englischsprachigen Wikipedia — die deutsche Version ist (Stand Mai 2012) deutlich weniger ausgearbeitet. Hier wird auf eine Reihe von Sprachen eingegangen, nicht nur C++, sondern auch z.B. Haskell, wo es auch eine sehr aktive Forschungsrichtung generische Programmierung gibt.

Douglas Gregor unterhält eine Site zur generischen Programmierung (Stand im wesentlichen von 2006). Ein Schwerpunkt liegt hier auf seinen Entwicklungen zu C++ Concepts, nämlich Concept C++ und deren Implementierung in ConceptGCC und ConceptClang, welche die Einschränkung von C++ Templates ermöglichen. Die Site enthält auch ein Glossar zu wichtigen Begriffen.

David Musser, einer der Pioniere der generischen Programmierung, hat eine Seite zu seinen eigenen Arbeiten zur GP (Stand der Seite ca. 2003, infolge der Emeritierung von Musser mittlerweile anscheinend nicht mehr gepflegt).

Publikationen

Tutorials und Kurse

Es gibt nur sehr wenige Tutorials zu generischen Programmierung an sich. Zur (Benutzung der) STL gibt es eine ganze Reihe von Einführungen und natürlich auch diverse Bücher.

Doug Gregor hat auf seiner Website eine Introduction to generic programming veröffentlicht, dass den Prozess des "Liftings" beschreibt. Es benutzt dasselbe Beispiel wie mein Tutorial (eine Summe), und ist eine gute Ergänzung, da es auf andere Aspekte und Grundbegriffe wie Concepts und Models eingeht.

Von Dave Abrahams gibt es auf Boost eine Darstellung von Techniken der generischen Programmierung, die in diversen Boost-Bibliotheken verwandt werden.

An dieser Stelle entwickle ich ein neues Tutorial, das generische Programmierung von der Pike auf einführt. Der Umfang soll weiter zunehmen, also schauen Sie öfter vorbei, oder schicken Sie mir eine email, um benachrichtigt zu werden.

Bücher

Es gibt nicht sehr viel Literatur, bei der die generische Programmierung wirklich im Mittelpunkt steht. Der eine Teil beschäftigt sich eher mit den Techniken der Template-Programmierung in C++, der andere Teil mit der Benutzung generischer Bibliotheken (vornehmlich der STL, aber auch boost). Diese Bücher enthalten z.T. auch Anleitungen, selbst generische Komponenten zu entwickeln.
  • Alexander Stepanov, Paul McJones Elements of Programming. Decomposing programs into a system of algorithmic components. Addison Wesley, 2009
    Das ist vielleicht das am besten auf GP fokussiert Buch. Nicht umsonst spielt dieses Buch im Titel auf Euklids Elemente an, auch im Duktus ist es eher streng gehalten, also definitiv keine einfache Lektüre ("This is not an easy book", verspricht schon der Klappentext). Die Autoren zeigen die Parallelen zwischen mathematischen Strukturen und generischer Programmierung von Algorithmen auf. Dementsprechend gibt es erst einmal einige grundlegende Definitionen und Theoreme zu verdauen (etwa zu sog.\ regulären Typen), auf deren Basis dann fortgeschrittene Konzepte entwickelt werden - Iteratoren, Bäume, dynamische Sequenzen. Zu diesem Buch gibt es eine von Sean Parent initiierte study group auf C++Next, die anscheinend leider nach Kapitel 5 abgebrochen wurde.
  • Andrei Alexandrescu Modern C++ Design. Generic Programming and Design Patterns Applied. Addison Wesley, 2001
    Deutsch als Modernes C++ Design bei mitp erschienen. Dieses Buch hat einige Techniken wie policy-based design und Typelists popularisiert. Als Anwendungfälle werden u.a. allocators, smart pointers, object factories, singletons mit dem Alexandrescu-typischen Humor behandelt. Auf den ACCU-Seiten gibt es eine ausführliche Besprechung von Francis Glassborow.
  • David Abrahams, Aleksey Gurtovoy C++ Template Metaprogramming. Concepts, Tools, and Techniques from Boost and Beyond. Addison Wesley, 2004
    Das Buch befasst sich Metaprogramming, einer Technik, um zur Compilezeit Berechnungen auszuführen. Diese Technik ist unverzichtbar für fortgeschrittene Generische Programmierung in C++. Die Autoren erläutern die verschiedene Aspekte anhand der MPL (Boost Metaprogramming Library), und systematisieren die verschiedenen Ansätze, die es zuvor gegeben hat (wie etwa traits).
  • Nicolai Josuttis, David Vandevoorde C++ Templates. The Complete Guide. Addison Wesley, 2002
    Alles, was man über die Syntax von C++ Templates wissen muss (zumindest bis 2011). Das Buch fängt da an, wo die meisten C++-Lehrbücher aufhören, und ist eigentlich unverzichtbar, wenn man ernsthaft C++ Templates benutzen will.

Foren, Newsgroups

In der Newsgroup comp.lang.c++.mod werden oft technische Aspekte der generischen Programmierung in C++ behandelt.

Artikel

Wissenschaftliche oder technische Artikel, die generische Programmierung zum Inhalt haben (oder zumindest im Titel oder als Keyword führen), gibt es eine Menge. Deswegen gibt es hier eine subjektive Auswahl der wichtigsten Artikel. Die Liste wird wachsen, aber notwendigerweise höchst unvollständig bleiben.

  • Die versammelten Artikel von Alexander Stepanov, einem der Pioniere der generischen Programmierung, findet man auf http://www.stepanovpapers.com.
  • Gabriel dos Reis, Jakko Järvi What is generic programming? In Proceedings of the First International Workshop of Library-Centric Software Design (LCSD '05). An OOPSLA 2005 workshop. San Diego (California), USA; October 2005.
    Dieser Artikel versucht, eine allgemeingültige Definition von generischer Programmierung zu finden. Dazu vergleichen die Autoren den Musser-Stepanov Ansatz (welcher der "C++-Schule" zugrundeliegt) mit dem polytypic oder datatype generic programming aus der funktionalen Schule mit ihren Verbindungen aus der Theorie der Kategorien. Während generische Algorithmen im Musser-Stepanov-Stil eher Funktionale auf den Typ-Argumenten auswerten, benutzen polytypic generische Algorithmen eher die durch Konstruktoren gegebene Struktur der Argumente, um diese rekursiv zu verarbeiten. Der Artikel ist ohne Hintergrund in Kategorientheorie und F-Algebren kaum zu verstehen.
  • Ronald Garcia, Jaakko Järvi, Andrew Lumsdaine, Jeremy G. Siek, Jeremiah Willcock A comparative study of language support for generic programming Proceedings of the 18th annual ACM SIGPLAN conference on Object-oriented programing, systems, languages, and applications (OOPSLA'03), Pages 115-134. ACM 2003
    Vergleicht die Mechanismen zur generischen Programmierung in den Sprachen C++, Java, Generic C#, Eiffel, Haskell und ML.

Konferenzen

Der jährliche ACM SIGPLAN Workshop on Generic Programming ist wohl die einzige regelmäßige Konferenz, die sich ausschließlich der GP widmet, aus einem recht akademischen Blickwinkel (dominiert von Vertretern der funktionalen Sprachen).

Im Bereich C++ hat die jährlich C++Now (vormals BoostCon) thematisch am meisten in dieser Richtung zu bieten.

Viele Konferenzen davor waren Einzelveranstaltungen oder werden anscheinend nicht weitergeführt. So gab es 1998 ein Dagstuhl Seminar "Generic Programming" und 2002 die MPC 2002 and IFIP WG 2.1 Working Conference Generic Programming. Workshops der Reihe Library-centric Software Design gab es 2005 und 2006 im Rahmen der OOPSLA. Wenn auch nicht explizit der generische Programmierung gewidmet, spielen generische Aspekte doch eine wichtige Rolle in den meisten Beiträgen.