C++

20. Februar 2012
Bis vor 10 Jahren war C++ neben VB die wichtigste Sprache für den Microsoft-Entwickler. Dann kam .NET und um VB und C++ wurde es still. Während VB aber in VB.NET einen legitimen Nachfolger gefunden hat und von Microsoft abgekündigt wurde, war C++ nie wirklich weg.
Die Nische, in der sich C++ in der letzten Dekade befand, war dabei gar nicht mal so klein. Embedded Devices, Cross-Platform und Hardware-nahe Programmierung sind nur ein Ausschnitt, die große Palette existierender Software ein weiterer. Und innerhalb der Microsoft Produktpalette gibt es eine Reihe von Anwendungen, die die C++-Welt nie verlassen haben (was oft genug als mangelndes Commitment zu .NET interpretiert wurde).

Tatsächlich gab es auch für den .NET-Entwickler (in diesem konkreten Falle ich ;-)) immer wieder Gelegenheit, C++ Code schreiben zu dürfen. Zugriff auf native Bibliotheken wenn P/Invoke nicht ausreichend war ist hier sicher ein typisches Beispiel. Der Trend zu Parallelverarbeitung ist ein weiteres Feld, in dem C++ seine Stärken ausspielen kann. Zum Beispiel bei Problemstellungen aus dem Bereich “Number crunching auf großen Datenmengen” (bei cache contention oder false sharing greift die dedizierte Kontrolle über das Speicherlayout besser als unter .NET). Ein Feld, das zunehmend Aufmerksamkeit erfährt, ist die Nutzung der Grafikarte (GPU).

cppUnd neuere Signale deuten stark darauf hin, dass C++ aus dem Schattendasein, das es vielleicht in der Wahrnehmung mancher Entwickler geführt hat, wieder stärker ins Rampenlicht treten wird. Beispiele:

Herb Sutter, kein Unbekannter in der C++-Gemeinde, stellt für Microsoft die Unterstützung des neu verabschiedeten Standards C++11 deutlich heraus – was nicht heißt, dass sie nicht noch Arbeit zu tun hätten.
Sowohl Herb als auch andere sprechen seit einiger Zeit von einer “C++ Renaissance” – das gilt zumindest innerhalb von Microsoft.

In Windows 8, genauer der WinRT, wird C++ wieder auf Augenhöhe mit den anderen Plattformen geführt. Tatsächlich ist es sogar so, dass Teile der “.NET-Errungenschaften” in die native Welt zurückportiert wurden, etwa XAML oder das Metadatensystem, das dem COM-basierten WinRT beigestellt wurde. Zudem wird C++ – als einzige Sprache/Plattform – neben dem Metadaten-basierten Zugriff (language projection) auch den direkten Zugriff auf die COM-Schnittstelle erlauben.

Das C++ Core Team bei Microsoft war (nach Aussagen von Leuten aus der Produktgruppe) zeitweise auf ca. ein Dutzend Leute eingedampft. Mehr als Wartung war damit natürlich nicht möglich, was einen gewissen Nachholbedarf erklärt. Mittlerweile ist das Team wieder auf 200(!) Leute angewachsen. Unter anderem arbeiten sie daran, die Lücken aufzuholen, die sich genüber der .NET-Welt aufgetan haben, etwa im Bezug auf Unittest-Support.

Außerdem sind natürlich auch neue Themen auf der Agenda, etwa C++ AMP, auch hier. Ein durchaus interessantes Thema: In einer Beispielanwendung (Teilchensimulation) stieg die Performance von 2 GFLOPs auf einem Kern zu 30 GFLOPs auf 12 Kernen – und dann zu 200-1000 GFLOPs auf der GPU!

Was mich zum letzten Punkt und dem Anlass für diesen Beitrag bringt: Microsoft hält zur Zeit eine Vortragsreihe unter der Überschrift “Microsoft C++ Info Day 2012" ab. Laut Microsoft hat diese Reihe einen derart hohen Zuspruch, dass man über weitere Termine nachdenkt. In Bad Homburg hatten wir zudem das Glück, dass gerade zwei Leute aus der C++ Produktgruppe in Redmont anwesend waren (was bei den anderen Terminen vermutlich nicht der Fall ist).

Inhaltlich findet sich dort viel von dem, was hier verlinkt wurde, insbesondere wenn man Herb’s Vortrag kennt. Das Themenspektrum geht aber über diese Dinge hinaus und untermauert sie mit Demos, zum Beispiel beim Thema Multithreading oder Unittesting. Und was solche Veranstaltungen immer von Blogs oder Vortrags-Videos abheben wird: Die Diskussion und der Austausch untereinander. Als Untermauerung und Warnung: Man sollte die geplante Dauer (bis 18:00) nicht zu ernst nehmen.

Übrigens: Die nächste Advanced Developers Conference hat ebenfalls dem Thema C++ als Fokus.
In diesem Sinne:

auto betterDeveloper= make_shared<Developer>(“C#”, “C++”);