Wilkening-Online Logo

C++ User-Treffen in Aachen am 9.3.2017



Von Detlef Wilkening

28 C++ Interessierte hatten den weiten Weg in den Süden von Aachen auf sich genommen, um am heutigen C++ User-Treffen bei NI teilzunehmen. Für alle Anwesenden hat sich der weite Weg aber gelohnt, denn es gab - wie eigentlich immer - spannende Vorträge, interessante Diskussionen und gemütliches Social-Live.

C++ User-Treffen Aachen 9.3.2017 - Bild 1
Foto 01: C++ User-Treffen Aachen 9.3.2017

Zuerst einmal aber wieder einen herzlichen Dank an Inform, die diesmal den Raum zur Verfügung gestellt haben, und uns auch wieder mit Getränken und Speisen verwöhnt haben. So ein langer C++ Abend mit viel Input für das Gehirn ist mit entsprechender Verpflegung viel effizienter - danke.

C++ User-Treffen Aachen 9.3.2017 - Bild 2
Foto 02: C++ User-Treffen Aachen 9.3.2017

Wie fast immer eröffnete ich den Abend mit einer kurzen Vorstellung der geplanten Vorträge und einem kleinen Ausblick auf das nächste C++ User-Treffen im Mai. Außerdem wies ich wieder darauf hin, dass ich immer neue Vorträge für die nächsten Male suche - wobei ich zur Zeit einen guten Forecast an Interessenten habe. Ich nutzte die Gelegenheit auch nochmal darauf hinzuweisen, dass wenn jemand einen Vortrag schon fertig hat, er mich bitte darüber informieren soll. Ich muss immer wieder aufgrund von Krankheit, Familien-Terminen oder Problemem auf der Arbeit kurzfristig Vorträge schieben und ersetzen - und es wäre schön einen Pool zu haben, auf den ich dann zurückgreifen kann. Also auch nochmal von hier aus die Bitte: wer seinen Vortrag schon fertig hat - auch wenn er erst für später geplant ist - bitte bei mir melden - danke.

C++ User-Treffen Aachen 9.3.2017 - Bild 3
Foto 03: Detlef Wilkening bei der obligatorischen Einleitung des C++ User-Treffens

Der erste C++ Vortrag war von Volker Kamin und drehte sich um "volatile" in C und C++. Volker legte viel Wert darauf, dass er nicht der C++ und Volatile-Experte ist, aber als hardware-naher Programmierer natürlich einige Erfahrung mit "volatile" hat.

C++ User-Treffen Aachen 9.3.2017 - Bild 4
Foto 04: Volker Kamin mit "volatile"

"volatile" verhindert in C++ Schreib- und Lese-Optimierungen des Compilers (Achtung, bitte nicht mit "volatile" in Java und C# verwechseln - das Schlüsselwort hat in den Sprachen eine ganz andere Bedeutung), d.h. der Compiler muss Code erzeugen, der beim Schreiben und Lesen immer auf die Hardware zugreift. Benötigt wird dies, wenn sich der Wert im Speicher programm-unabhängig ändern kann bzw. das Schreiben des Werts einen Effekt auf der Hardware auslöst - z.B. bei der Programmierung von Treibern.

Neben der Erklärung von "volatile" hatte Volker zwei Beispiele vorbereitet, die sich nur durch ein einzelnes "volatile" unterscheiden - und zeigte uns dann den vom Compiler erzeugten Maschinen-Code. Man konnte sehr schön sehen, wie der Compiler einige Optimierungen nicht ausführt und die Variablen-Zugriffe immer ausführt.

C++ User-Treffen Aachen 9.3.2017 - Bild 5
Foto 05: Volker Kamin mit "volatile"

Im weiteren wies Volker auf typische Probleme bei der Programmierung mit "volatile" hin, und zeigte empfehlenswerte Lösungen. Unterm Strich war es ein sehr interessanter Vortrag über eine Nische in C/C++, die die meisten von uns sicher nie nutzen werden. Aber vielleicht gerade deshalb war es so interessant ihn zu hören.

Der zweite - für einen Lightning-Vortrag relativ lange - Vortrag war von Michael Becker und drehte sich um "Argument-Depend-Lookup (ADL) und Customisation-Points". ADL - auch "König-Lookup" genannt - ist ein Feature in C++ das beschreibt, in welchen Scopes der Compiler Funktion bei der Funktions-Auflösung sucht.

C++ User-Treffen Aachen 9.3.2017 - Bild 6
Foto 06: Michael Becker mit "Argument-Depend-Lookup und Customisation-Points"

Neben dem aktuellen Scope sind auch die Scopes der Argumente, aber auch die Scopes der beteiligten Klassen, Basis-Klassen, Template-Parameter und einige mehr beteiligt. Michael hatte für jede Situation ein einfaches aber aussage-kräftiges Beispiel vorbereitet - und so konnten alle die Details sehr gut nachvollziehen. Außerdem zeigte er wie guter generischer Code aussieht, der mit ADL umgehen muss.

Das Problem ist, dass der korrekte generische ADL-fähiger Code nicht intuitiv ist. Wer es weiß, kann ihn natürlich problemlos schreiben - aber man vergißt ihn schnell, bzw. Anfänger kennen ihn nicht. Wie geht man also nun mit dem Problem um? Michael stellte dann einen Trick von Eric Niebler vor, der Taging und ein Funktions-Objekt für den Aufruf nutzt - einen sogenannten "Customisation-Point". Und schon wurde der generische ADL-fähige Code einfach und problemlos - so soll es sein.

C++ User-Treffen Aachen 9.3.2017 - Bild 7
Foto 07: Michael Becker mit "Argument-Depend-Lookup und Customisation-Points"

Ein guter Vortrag von Michael, der über eine halbe Stunde ging - aber ein wichtiges Thema in C++ ausführlich und nachvollziehbar beleuchtete.

Danach machten wir erstmal eine Pause mit Getränken, Speisen und anregenden Diskussionen...

C++ User-Treffen Aachen 9.3.2017 - Bild 8
Foto 08: C++ User-Treffen Aachen 9.3.2017

C++ User-Treffen Aachen 9.3.2017 - Bild 9
Foto 09: C++ User-Treffen Aachen 9.3.2017

C++ User-Treffen Aachen 9.3.2017 - Bild 10
Foto 10: C++ User-Treffen Aachen 9.3.2017

C++ User-Treffen Aachen 9.3.2017 - Bild 11
Foto 11: C++ User-Treffen Aachen 9.3.2017

Nach der Pause ging es mit "shared-from-this mit Lambdas" von Jan Christoph Uhde weiter. Jan rekapitulierte kurz einige Fähigkeiten von Shared-Pointern, und zeigte dann wie man "shared-from-this" mit Lambdas kombinieren kann und so Lebensdauer-Probleme - z.B. bei der Nutzung von Boost.Asio - einfach beseitigen kann. Ein schöner kurzer effektiver Lightning-Vortrag.

C++ User-Treffen Aachen 9.3.2017 - Bild 12
Foto 12: Jan Christoph Uhde mit "shared-from-this mit Lambdas"

Der Hauptvortrag des Abends war von Daniel Evers und beschäftigte sich mit "Binary compatibility for shared libraries". Daniel ging auf ein Problem ein, was in kaum einem Lehrbuch angesprochen wird, geschweige denn vernünftig und ausführlich erklärt wird - mit dem auf der anderen Seite aber wohl jeder C++ Programmierer in der Praxis schon schmerzhafte Erfahrungen gemacht hat. Was darf man an einer "Schnittstelle" ändern, ohne das die Binär-Kompatibilität gebrochen wird?

C++ User-Treffen Aachen 9.3.2017 - Bild 13
Foto 13: Daniel Evers mit "Binary compatibility for shared libraries"

Daniel hatte ein übersichtliches Beispiel vorbereitet, indem viele typische Probleme einfach sichtbar wurden. Änderungen von Namen & Signaturen, Modifikation von Objekt-Strukturen, Inline-Funktionen, Name-Mangeling, Calling-Konventionen, uvm. Für jeden Fall diskutierte er die Auswirkungen von Änderungen und die entstehenden Probleme - und führte sie auch direkt vor. Natürlich hatte er auch Regeln dabei, die man beachten sollte, wenn man Binär-Kompatibilität zusichern muss oder will.

C++ User-Treffen Aachen 9.3.2017 - Bild 14
Foto 14: Daniel Evers mit "Binary compatibility for shared libraries"

Am Ende stellte Daniels auch einige Tools vor, die helfen Schnittstellen-Probleme zu finden und zu verstehen - auch wenn es die Auswahl hier recht übersichtlich ist. Die Fragen und Diskussionen während des Vortrags zeigten, wie wichtig das Thema in der Praxis ist - und so konnte wohl jeder Teilnehmer etwas für seine tägliche Arbeit mitnehmen.

Es war wieder ein interessanter und spannender Abend mit vielen Gesprächen, Diskussionen und regem Wissens-Austausch gewesen. Wer nicht da war, hat viel verpaßt - aber das nächste C++ User-Treffen kommt bestimmt...



Den nächsten Termin, weitere Berichte und andere Informationen zu den C++ User-Treffen in Aachen finden sich auf meiner "C++ User-Treffen in Aachen" Seite.


C++ User-Treffen: