Wie immer am Anfang des Berichts kurz der Hinweis, dass alle Vorträge, Quelltexte, usw. - soweit
vorhanden bzw. mir bekannt - auf der Vortrags-Übersichts-Seite
verlinkt sind.
Das C++ Treffen fand diesmal bei Schlumberger statt. 32 C++ Interessierte waren gekommen, um sich Vorträge über C++ anzuhören und um über C++ zu diskutieren. Zuerst einmal vielen Dank von hier an Schlumberger für den Raum und die Bewirtung mit Süßem und Getränken.
Foto 01: C++ User-Treffen Aachen 13.6.2019
Wie bei Schlumberger üblich, began der Abend mit der Sicherheitseinweisung von Sven Johannsen. Er stellte wie immer kurz das Verhalten, die Fluchtwege und den Sammelpunkt im Brandfall und bei anderen Gefährdungen vor.
Foto 02: Sven Johannsen bei der Sicherheitseinweisung
Danach übernahm ich die Einleitung in den Abend. Leider hatte ich kurzzeitig das Programm stark ändern müssen - aber das passiert halt manchmal. Daniel Evers war kurzfristig eingesprungen und hat seinen 2. Vortrag über den C++ Sanitizer für Threads vorgezogen. Und ich hatte ungeplanten einen Vortrag über UUIDs dabei. Der Abend war also gesichert.
Leider hatten sich nicht nur Lücken für dieses Treffen aufgetan, sondern es gab auch Probleme für den nächsten Monat. Dadurch dass Daniel seinen Vortrag vorgezogen hatte, fehlt dort dieser Vortrag - und die geplante Einführung in FPGAs muss auch verschoben werden. Ich kündigte also schon mal an, in der Pause zwei Vorträge suchen zu müssen. Spoiler: ich war erfolgreich. Auch das nächste Treffen ist - zumindest aktuell - gesichert.
Den Einstieg in die fachlichen Vorträge übernahm ich dann direkt mit. UUIDs als global eindeutige Identifier klingen vielleicht nicht nach dem interessantesten Thema - trotzdem waren sie mir einen Vortrag wert. Ich bin in meinem Programmierleben mehrfach mit ihnen konfrontiert worden, und war froh dass es mit Boost.UUID eine fertige Lösung für dieses Thema gibt. Und diese Informationen wollte ich kurz vorstellen. So began ich den Vortrag mit einem kleinen historischen Exkurs und Überblick: woher kommen UUIDs, welches Problem sollten sie lösen, welche Standards gibt es, welche Versionen und Varianten sind definiert, und natürlich auch worin sich Microsoft GUIDs von UUIDs unterscheiden.
Foto 03: Detlef Wilkening mit "UUIDs"
Danach stellt ich die Bibliothek Boost.UUID vor, und zum Schluß gab es noch einen Verweis auf das aktuelle Standard Proposal "p0959r2". Alles in allem gab es viel mehr Fragen, Hinweise und Diskussionen, als ich im Vorfeld gedacht hatte. UUIDs mögen nicht das spannenste Thema sein, aber in der Praxis spielen sie halt eine Rolle, und darum hat sich der Vortrag definitiv gelohnt.
Den zweiten Vortrag hielt Wolfram Rösler über "Use Boost Scope Guards, say goodbye to resource leaks". Und wie wir es alle von Wolfram kennen, war es nicht einfach ein trockener Vortrag. Wolfram motivierte das Thema mit einer kleinen Geschichte aus seiner eigenen Historie - Tools lieferten ihm Hinweise auf Ressourcen-Leaks in seinem Programm, und er machte sich auf die Suche. Natürlich war das Problem eine händisch gemanagte Ressource - das ist in C++ schon immer sehr schlechter Stil gewesen.
Foto 04: Wolfram Rösler mit "Use Boost Scope Guards, say goodbye to resource leaks"
Wolfram stellte dann mehrere Lösungen vor: eine speziell dafür geschriebene Klasse, eine allgemeine Klasse, und zum Schluß die fertige Bibliothek Boost.ScopeGuard. Die spezielle Klasse ist zwar schnell geschrieben, aber eben nicht wiederverwendbar - und so schreibt man solchen Code ziemlich häufig. Darum war seine zweite Lösung eine generische Klasse, die beliebig definierbare Aufräum-Aktionen im Destruktor triggern konnte - das war natürlich schon viel besser. Aber man soll keine eigenen Räder erfinden, wenn es schon fertige gibt - und z.B. Boost bringt mit Boost.ScopeGuard hier schon eine fertige Lösung - und die stellte Wolfram am Ende noch gut vor.
Foto 05: Wolfram Rösler mit "Use Boost Scope Guards, say goodbye to resource leaks"
Auch die ScopeGuards wurden ausführlich hinterfragt und diskutiert. So wurde gerade die Nutzung von SmartPointern, sowohl unique_ptr als auch shared_ptr, als Alternative mit ihren Vor- und Nachteilen besprochen. Klar war, dass eine fertige Lösung wie Boost.ScopeGuard in den meisten Fällen problemlos und angemessen ist und eingesetzt werden sollte. Aber es gibt eben doch Einsatzfälle, die eine andere oder sogar eine eigene ScopeGuard-Bibliothek rechtfertigen können. Danke an Wolfram für den interessanten Einblick.
Danach ging es in die Pause, und alle hatten Gelegenheit sich zu stärken und das Gehörte detaillierter zu besprechen. Und ich ging auf die Suche nach Ersatz-Vorträgen für Juli...
Foto 06: C++ User-Treffen Aachen 13.6.2019
Nach der Pause ging es mit Jonathan Müller weiter. Jonathan wollte nur kurz ein C++ Rätsel vorstellen, das er neulich auf Twitter gefunden hatte, und nach zumindest seiner Meinung das beste C++ Rätsel ist, das er je gesehen hat - er ist wohl noch nicht bei meinem traditionellen C++ Weihnachtsquiz in Düsseldorf gewesen?
Jonathan präsentierte das kleine C++ Programm und fragte was es ausgibt. Ein kurzer Blick von mir und ich sah die typischen Fallen und Verschleierungen und dachte bei mir: alles klar, damit kannst du mich nicht reinlegen, da kommt "6" raus.
Foto 07: Jonathan Müller mit "Das beste C++ Rätsel"
Jonathan entschlüsselte das Programm Stück für Stück - immer wieder mit Verweisen auf den C++ Standard, und führte so durch die Fallen und Probleme, die ich alle gesehen hatte. Und zum Schluß, so Jonathan, ist das Ergebnis so halt "6" - aber irgendwie klang das nicht überzeugend. Er zeigte dann, was die geantworteten Ergebnisse zu dem Rätsel waren, und auch hier gab es eine Häufung bei der "6", aber es waren auch andere Lösungen wie z.B. "1", "2" und "4" vorhanden. Während bei den meisten fehlerhaften Antworten klar war, wo die Antworter reingefallen waren, war mir nicht klar, wie die Antwort "1" zustande kommen sollte? Waren das sinnlose Joke-Antworten?
Foto 08: Jonathan Müller mit "Das beste C++ Rätsel"
Jonathan zeigte dann den Output des Compilers - es kam "1" heraus? Wie bitte!? Tja, es gab noch eine weitere Falle im Code, die ich nicht kannte und nicht gesehen hatte - und, so mein Gefühl, auch kein anderer kannte. Der "sizeof" Operator benötigt bei einem Ausdruck keine Klammern, und so änderte sich die Bedeutung des Ausdrucks. Wirklich, wirklich - ein wahrhaft schönes C++ Rätsel. Es wäre wert gewesen, in meinem Weihnachtsquiz aufzutauchen - aber jetzt kennen ja schon zuviele die Falle. Aber vielleicht kann ich sie noch anders unterbringen - mal sehen. Danke auf jeden Fall an Jonathan für das schöne Rätsel und den schönen Vortrag.
Den letzten Vortrag des Abends steuerte dann Daniel Evers bei. Er hatte den zweiten Teil über den C++ Sanitizer vorbereitet, der sich dem Thema "Threads" widmete. Daniel hatte am 11. Oktober letzten Jahres schon darüber geredet, wie der C++ Sanitizer Speicherleaks, Buffer-Overflows und solche Problem finden kann. Diesmal ging es eben um Threading - auch ein Thema mit vielen möglichen Fallen.
Foto 09: Daniel Evers mit "C++ Sanitizer - Teil 2/3 (Threads)"
Zuerst stellte Daniel die Fehler vor, die der C++ Sanitizer im Bereich Threading finden kann: allgemeine Race-Conditions, Reihenfolgen von Mutexen, Freigaben von gelockten Mutexen, unsichere malloc/free Aufrufe in Signal-Handlern und vieles mehr. Für jede dieser Situationen hatte Daniel ein Beispiel vorbereitet, dass den jeweiligen Fehler erzeugte und damit die Detection des C++ Sanitizers aufzeigen konnte. Manche Fehler waren sehr einfach zu erzeugen, andere schwerer - aber Daniel meisterte diese Herausforderung souverän.
Foto 10: Daniel Evers mit "C++ Sanitizer - Teil 2/3 (Threads)"
Natürlich gab es auch - oder gerade - bei diesem Vortrag viele Fragen, Anmerkungen und Diskussionen. Threading ist kein einfaches Thema, und all die Probleme, die hier auftauchen können, sind inherent nicht trivial. Alles in allem war es ein sehr lehrreicher und interessanter Vortrag für ein schwieriges aber auch wichtiges Thema - danke.
Und damit war das C++ Treffen dann auch vorbei. Für viele gab es noch Raum und Zeit für weitere Fragen und Diskussionen. Andere halfen beim Aufräumen mit. Auf jeden Fall war es für jeden ein lohnenswerter Abend gewesen - wir freuen uns schon auf das nächste C++ Treffen.
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.