GoingNative 2012 – Gegenwart und Zukunft von C++
Seite 2: 2. Tag
"C++11, VC++11 and Beyond"
Die Keynote des zweiten Konferenztages hielt C++-Guru Herb Sutter, der zunächst auf das hauseigene Produkt einging, bevor er sich ISO C++ widmete.
"C++11 fühlt sich wie eine neue Sprache an", zitierte er Stroustrup. Das sei großartig, bedeute aber auch, dass nun sämtliche C++-Bücher obsolet seien, da sich der Stil, die Idiome und die Leitlinien grundlegend geändert hätten. Im Lauf des Vortrags zeigte er neue Leitlinien auf, so sie denn schon bekannt sind. Auch das ISO-Komitee sei noch dabei, C++11 zu lernen, so Sutter.
Sein Rat bezüglich auto lautet, es überall zu verwenden und Typen nur noch dann explizit zu benennen, wenn Typkonvertierung gewünscht sei. Vorsicht solle der Entwickler jedoch mit Ausdrücken walten lassen, die Expression Templates nutzten (std::valarray). Auch die neue einheitliche Initialisierungssyntax sollten Entwickler reichlich verwenden (Ausnahmen: einfache Zuweisungen und solche an auto).
Weitere Tipps: niemals nacktes new/delete verwenden, make_xyz direkter xyz_ptr-Konstruktion (auch wenn C++11 das make_unique für unique_ptr fehle) und die freien begin()/end()-Funktionen den Member-Funktionen gleichen Namens vorziehen (auch wenn C++11 das freie cbegin()/cend() fehle; Entwickler sollten diese Funktionen selbst schreiben, bis der Standard angepasst sei).
Zum Schluss wagte er noch einen Ausblick auf den nächsten C++-Standard, der seiner Meinung nach nicht schon wieder die C++-Welt auf den Kopf stellen sollte. Er könne sich aber vorstellen, dass ein Modulsystem (oder zumindest #once), static if (PDF, PDF)) à la D oder polymorphe Lambda-Funktionen ([](auto x){return x*x;}, [](x){return x*x}) Einzug fänden.
Die größte Schwachstelle von C++ sei jedoch die winzige Standardbibliothek. Vom Umfang her sei die Sprachdefinition (ohne Standardbibliothek) von C++11 in etwa mit der von C# 3 oder Java 7 vergleichbar. Die Standardbibliotheken der Konkurrenten seien jedoch um ein bis zwei Größenordnungen umfangreicher. Selbst wenn der nächste Standard die Bibliotheksgröße verdoppeln würde, wäre das nicht annähernd genug.
Die fehlenden Bibliotheken existieren laut Sutter, und er nannte Boost, Poco, Qt und viele andere als Beispiele. Das Ziel müsse sein, diesen Projekten die Bibliotheken zu entreißen ("pry them out"). Microsoft und Google hätten sich entschlossen, Bibliotheken zur Verfügung zu stellen, aber jedes C++-Projekt sei nun aufgerufen, seine Bibliotheken zur WG21 (dem C++-Komitee) beizusteuern.
In den abendlichen Podiumsdiskussionen fragten Teilnehmer, warum einzelne Features nicht in C++11 Einzug gehalten hätten. Der generelle Tenor war: "keine Ressourcen" im Komitee. Sutter gab zu bedenken, dass aus dem Standard leicht "C++13" hätte werden können, sodass Punkte, bei denen sich das Komitee nicht hundertprozentig sicher gewesen sei, hintüber gefallen seien.
Zum Modulsystem äußerte sich Stroustrup: Der Vorschlag sei nicht ausgereift gewesen. Laut Chandler Carruth gibt es vier Probleme, die Entwickler mit Modulen lösen wollten; mindestens zwei davon schlössen sich jedoch gegenseitig aus. Stroustrup erklärte, dass Befürworter einzelner Features sich häufig enttäuscht abwendeten, wenn ihre Vorschläge nicht zu 100 Prozent so umgesetzt würden, wie sie es für sich gern hätten. Es könne schon mal vorkommen, dass zwei Drittel der Diskussionsteilnehmer auf diese Weise verschwänden.
"Clang – Defending C++ from Murphy's Million Monkeys"
Google-Mitarbeiter Carruth präsentierte Clang, den LLVM-basierten und von Apple als GCC-Alternative entwickelten C++-Compiler, in einem energetischen Vortrag. Nach einem historischen Abriss mit Seitenhieben auf GCC zeigte Carruth Beispiele von Clang-Fehlermeldungen und Warnungen, die, wie er etwas despektierlich formulierte, die Millionen C++-Code-Affen ("coding monkeys") vor Murphy schützen sollten.
Interessanter als das Aufzählen von Codeschnippseln, die (nicht nur bei Clang) Warnungen generieren, empfand der Autor die Diskussion um dynamische Analyse, die für die Zukunft geplant sei. Dabei handele es sich um Valgrind-ähnliche Funktionen, die jedoch direkt in den Compiler eingebaut werden und so zum Beispiel auch die von Valgrind nur schwer diagnostizierbaren Fehler bei automatischen Variablen besser aufdecken könnten.
Außerdem, so Carruth auf Nachfrage, seien Werkzeuge zum automatischen Refactoring in Arbeit (und bei Google in Benutzung). Dafür dass diese als freie Software im Clang-Repository entwickelt werden, spendete das Auditorium Applaus.
"Static If I Had a Hammer"
Alexandrescus zweiter Vortrag drehte sich um das aus D bekannte static if-Konstrukt, das er zusammen mit anderen für den nächsten C++-Standard vorschlägt (PDF). Anhand vieler Beispiele zeigte er auf, wie einfach und ausdrucksstark dessen Verwendung ist. In D habe sich static if in kürzester Zeit als unverzichtbares Ausdrucksmittel bewährt. An Funktionsdeklarationen angehängt (dann ohne static) sei es in D auch das Mittel, um eingeschränkte Templates zu formulieren; in C++11-Syntax:
template <typename T, typename S>
auto operator+( const T & a, const S & b ) -> decltype(a+=b)
if ( std::is_arithmetic<T>::value && std::is_arithmetic<S>::value )
{
decltype(a+=b) tmp = a;
tmp += b;
return tmp;
}
Stroustrup sollte die Syntax in seinem nachfolgenden Vortrag jedoch zurückweisen: Er sähe lieber einen neuen Anlauf für Konzepte als Ausdrucksmittel für beschränkte Templates:
template <Arithmetic T, Arithmetic S>
auto operator+( const T & a, const S & b ) -> decltype(a+=b)
{ ... }
"A Concept Design for C++"
Den Abschluss der Veranstaltung bildete ein gemeinsam von Stroustrup und seinem Post-Doc Andrew Sutton vorgetragenes Konzept-Design für C++, das eine Arbeitsgruppe um Alex Stepanov (Erfinder der STL) und Stroustrup derzeit entwickelt.
Das aufgegebene Konzeptdesign für C++0x habe 130 Konzepte enthalten, was absurd sei. Die STL enthielte lediglich ein bis zwei Dutzend Konzepte; das neue Design (PDF) fordere aktuell 34 und passe auf eine Seite. Es gelte nun herauszufinden, was die minimale und was darüber hinaus die zweckdienliche Anzahl von Konzepten darstelle, und das in einer Bibliotheksversion wie Origin zu testen.
Das alles stecke noch in den Kinderschuhen, so Stroustrup. Der Fakt aber, dass der Vortrag innerhalb einer Stunde den Bogen habe schlagen können von der Philosophie der Konzepte bis zu ausführbaren Tests in Origin zeige, dass sie auf dem richtigen Weg seien.
Zum Zusammenspiel mit static if befragt, antwortete Stroustrup, er sehe im Moment Konzepte als hochstrukturierte Semantik und static if eher als Mechanismus für zielloses Hacken an, habe aber noch keine gefestigte Meinung; man solle der Sache Zeit geben.