ADC++ 2017 – von Fold Expressions und schaurigen Alpträumen (Part 2)

Wo waren wir beim letzten Mal stehen geblieben? Richtig, wir haben die „Randthemen“ hinter uns gelassen und widmen uns nun in Part 2 dieser Beitragsreihe über die ADC++- Konferenz den zumindest teilweise beinharten C++-Themen! Da ich im Gegensatz zu unserem Vorzeige-Chef Dr. Azog aus dem Roleplay (unten rechts zu sehen) nicht die Fähigkeit besitze, an mehreren Events gleichzeitig teilnehmen zu können, musste die modellbasierte Entwicklung leider das Nachsehen haben.

Meine Wahl fiel auf die vielversprechende Horrorstory „Der Alptraum des einfachen C++-Programmierers“.

From Dusk till Dawn: It’s a dark night …

Nicolai Josuttis führte jedem vor Augen, wie schaurig und tückisch diese Sprache ist, falls man sich denn willentlich oder unwillentlich an ihre Ränder wagt. Hier lauern Abgründe und verborgene Fallstricke, die offenbar selbst Experten aus dem C++-Standardisierungsgremium ab und an das Fürchten lehren.

Ork mit Anzug und Krawatte
Sharp dressed & sharp-toothed: Dr. Azog © Daniel Frank

Angesichts dieser Tücken werde und will ich wahrscheinlich nicht zum C++-Experten werden; der Vortrag war definitiv schrecklich und lohnenswert zugleich.

Zu dieser Einschätzung passt auch die kleine Anekdote von Rainer Grimm, die von einem selbsternannten C++-Anfänger handelt. Dass der bereits seit 15 Jahren in C++ entwickelt, ist wohl eine der traurigen kleinen Geschichten, die eine Sprache wie diese mit sich bringen muss.

In eine ähnliche Kerbe hinsichtlich der möglichen Komplexität von C++ schlug „Type-Traits mit modernen C++ Features“. Peter Gottschling ist ebenfalls Mitglied des ISO-Komitees zur Standardisierung von C++ und beschäftigt sich unter anderem mit Library-Entwicklung. In seinem Fall mit der Matrix Template Library: eine sehr fremde Welt für mich. Hier macht man das, was wir normalerweise nicht wollen – man hackt! Und zwar unter Ausnutzung der verborgenen Nebeneffekte von schrecklichen Sprachfeatures wie der Ellipse. Dies allerdings natürlich ganz bewusst und sehr professionell im Dienste der Optimierung. In diesem Talk mit Live Demo geraten auch die Experten richtig ins Stocken. Ich bin schon wieder froh, dass ich mich mit Applikations-Entwicklung, Clean Code, Design und Architektur beschäftigen darf und Entwickler wie Peter diese Knochenarbeit freiwillig übernehmen. Da lineare Algebra in meiner Algorithmen-Entwickler-Vergangenheit eine wichtige Rolle spielte, kann ich diese Arbeit aber auch definitiv nicht hoch genug schätzen.

Fazit: Ein Talk wie ein Splatter-Movie. Man will, aber man kann nicht wegschauen. Vielleicht gibt es ja bald ein Video zu sehen wie von Peters Beitrag für die ADC++ 2016? Ich würd‘s mir gern noch einmal ansehen!

Dawn: Let there be light!

Nach all den Schauergeschichten nun aber endlich etwas Aufhellendes: Steve Carroll, Development Manager für das Visual C++-Team, stellte in seiner Keynote vor, was Visual Studio 2017 für C++-Entwickler an Neuigkeiten mit sich bringt. Und das war ziemlich eindrucksvoll, wie wir beide (Christoph und ich) fanden; auch wenn uns leider die Erfahrung mit bisherigen Studio Versionen fehlt.

Die strategischen Veränderungen, die Microsoft in letzter Zeit hingelegt hat, können mit Sicherheit nicht alle als Win-Win-Situation bezeichnet werden. Der Shift Microsofts allerdings, die Open-Source-Community ernst zu nehmen klingt nach einer ebensolchen. Das Ziel, mit Visual Studio einfach eine starke IDE bereitzustellen, egal ob man nun für Linux entwickelt, CMake nutzt oder Clang verwenden will, ist ein erstrebenswertes. Ein kleiner Teil dieser Bemühungen zeigt sich unter anderem in dem seit VS2015 bereitgestellten Open-Source Paket Manager VCPkg. VCPkg stellt C++ Open-Source-Bibliotheken wie boost, catch, ace oder fftw3 nun auch für VS2017-Projekte zur Verfügung.

Abgesehen davon beeindruckt das neue Visual C++ durch Performance-Steigerungen, Ressourcen-Schonung, die Binärkompatibilität des aktuellen Toolsets mit dem 2015er Toolset und der Möglichkeit, problemlos die Vorteile der neuen IDE nutzen zu können – ohne gezwungen zu sein, auf den aktuellen Compiler zu wechseln. Viele kleine Neuerungen und Verbesserungen beispielsweise im IntelliSense und für das Debugging versprechen ein ziemlich komfortables Arbeiten. Mir fehlt, wie gesagt, die Vorerfahrung mit Visual Studio, aber die IDE, die mir hier in Auszügen präsentiert wurde, macht mich wirklich neugierig.

Wir hätten uns noch ein wenig Info über den Stand der Refactoring-Unterstützung und über weiterführende Ziele gewünscht, aber der Talk war auch so schon voll genug. Auf Nachfrage hin hat Christoph von Steve erfahren, dass das Thema Live Unit Testing offenbar auf der Agenda steht. Allerdings wird hiermit in nächster Zeit mit Sicherheit noch nicht zu rechnen sein.

Among the living

Passend zum neuen Visual Studio gibt es noch den neuen 2017er C++-Standard. Eine Sammlung vieler kleinerer Neuerungen präsentierte uns Nicolai Josuttis in der ersten Keynote. Über die kann sich jeder Interessierte im Netz genauer informieren. Hier nur soviel: Die neuen Features sind keine Revolution, aber in ihrer Summe erhofft man sich unter anderem einen besser lesbaren Code. Die Sprache entwickelt sich auf jeden Fall weiter, das heißt sie lebt! Wir sind auf jeden Fall gespannt, ob in drei weiteren Jahren Reflection Teil des C++-Standards wird.

Zum Ende hin darf natürlich ein Abschnitt zu dem Talk nicht fehlen, der mir persönlich vermutlich am besten gefallen hat:

Beauty and the beast

Boris Schälings Slot regte zum Nachdenken an. Einerseits zum Nachdenken über die Finanzbranche, für die Boris codet und der Glasfaserkabel für ihre High-frequency Trades schlicht zu langsam sind. Hier muss natürlich auch der Code schnell sein. Dass solch fitte Softwerker für eine nicht-wertschöpfende Industrie arbeiten, kann man als Entwickler im Bereich Medizintechnik durchaus sehr kritisch sehen.

Andererseits fordert sein Vortrag „Die verborgenen Regeln von Weltklasse-C++-Code“ die Clean Code und Pattern Community auf, sich mit ihren Glaubensgrundsätzen auseinanderzusetzen. Und das hat mir wirklich sehr gut gefallen!

Boris hinterfragt am Beispiel des Factory Patterns, inwieweit es Sinn macht, blind mit (zum Beispiel) Patterns um sich zu werfen. Sollte man stattdessen nicht besser hinterfragen, welche Constraints unser Code denn genau erfüllen soll? Und ob ein Pattern nicht mehr mitbringt als wir eigentlich bräuchten? Boris dröselt das Factory Pattern auf und implementiert die einzelnen Aspekte, die dieses Pattern mit sich bringt, Stück für Stück nach. Ganz sauber und ohne Polymorphie.

Hier geht es also um „Expressiveness“ von Code – darum, Code zu schreiben, der genau das ausdrückt und kommuniziert, was wir auch wirklich bewusst tun wollen. Und er zeigt, dass die Factory mitsamt Polymorphie nicht die gottgegebene, einzig korrekte Lösung für ein bestimmtes Problem ist. Das spiegelt zugegebenermaßen einen sehr hohen Anspruch wider und verdient gerade deshalb womöglich tatsächlich die Bezeichnung „Weltklasse Code“.

Der Talk will uns natürlich nicht vermitteln, dass Patterns obsolet sind – ganz im Gegenteil. Die sinnvolle Verwendung von Patterns ist mit Sicherheit eine Qualifikation, die einen Entwickler auszeichnet. Aber er regt uns Entwickler dazu an, die Konstrukte, die wir täglich nutzen, immer wieder neu zu hinterfragen, zu verstehen und zu überlegen, ob es nicht noch besser geht. Und genau darum sollte es ja bei guter Softwareentwicklung gehen!

Credits

Noch einmal vielen Dank an die Organisatoren und Sponsoren – für das sehr gute Essen, die kostenlose Unterbringung im Hotel und den netten On-Demand-Shuttle Service des Veranstalters ppedv.

Manch eine Kleinigkeit – wie das Bewertungskonzept der Vorträge und die etwas umständliche Homepage – ist sicherlich noch verbesserungswürdig, die Betreuung vor Ort war aber immer sehr persönlich und hilfsbereit – da blieben kaum Wünsche offen. Wir werden auf jeden Fall wieder gerne dabei sein!