Wilkening-Online Logo

C++ User-Treffen in Aachen am 9.5.2019



Von Detlef Wilkening

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 Inform statt. 34 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 Inform für den Raum und die Bewirtung mit Essen und Getränken.

C++ User-Treffen Aachen 09.05.2019 - Bild 1
Foto 01: C++ User-Treffen Aachen 9.5.2019

C++ User-Treffen Aachen 09.05.2019 - Bild 2
Foto 02: C++ User-Treffen Aachen 9.5.2019

Das C++ Treffen began wie immer mit einer kurzen Einleitung von mir in den Abend. Diesmal konnte ich mich wirklich kurz halten. Nachdem ich beim letzten Mal recht erfolgreich neue Vorträge für heute und die kommenden Monate organisiert hatte, konnte ich den Abend heute etwas relaxter angehen.

Den fachlichen Abend eröffnete Georg Hellack mit einem Vortrag über seine Erfahrungen mit einer Protokollimplementierung auf Basis Boost.ASIO. Dies war kein einführender Vortrag in Boost.ASIO - so einen hatten wir schon und bekommen vielleicht nochmal einen weiteren. In diesem Vortrag ging es um konkrete Erfahrungen, die Georg bei den Nutzung von Boost.ASIO gesammelt hat.

C++ User-Treffen Aachen 09.05.2019 - Bild 3
Foto 03: Georg Hellack mit "Erfahrungen mit einer Protokollimplementierung auf Basis Boost.ASIO"

Zuerst stellte Georg vor, in welchem Umfeld er arbeitet, und was er mit Boost.ASIO umsetzen musste. Er bewegt sich im Bereich der Automatisierungs-Technik und hat hier oft mit den verschiedensten Systemen und propritären Protokollen zu tun. Und so kann er nicht auf fertige Bibliotheken zurückgreifen, da es hierfür oft keine passenden Umsetzungen gibt. Statt dessen ist er gezwungen, die Protokolle vollständig selber zu implementieren.

C++ User-Treffen Aachen 09.05.2019 - Bild 4
Foto 04: Georg Hellack mit "Erfahrungen mit einer Protokollimplementierung auf Basis Boost.ASIO"

Georg berichtete spannend von den Fallen und Problemen, in die er hingelaufen ist, und wie er sie gelöst hat. Die Nachfragen aus und die Diskussionen mit dem Publikum zeigten, dass er nicht der einzige ist, der solche Herausforderungen zu meistern hatte. Für alle anderen war es aufschlußreich, wo man aufpassen muss, und welche Lösungen es gibt. Hoffentlich erinnern wir uns daran, wenn wir selber mal in dieser Situation sind.

Auf die Boost.ASIO "Richtlinien" folgten die Richtlinen für die Vermeidung von Buffer-Overflows von Sven Johannsen. Eigentlich ging es Sven nicht nur um Buffer-Overflows, sondern allgemein um sichere Programmierung.

C++ User-Treffen Aachen 09.05.2019 - Bild 5
Foto 05: Sven Johannsen mit "Vermeidung von Buffer-Overflows"

Was sind typische Anti-Pattern, die schnell zu Fehlern in Code führen, und wie macht man es besser. Für Buffer diskutierte Sven z.B. die Verwendung von Strings oder Vektoren und anderen Alternativen. Aber Sven blieb nicht bei diesem einen ziemlich offensichtlichen Beispiel stehen. Noch besser wäre es für ihn, wenn die Benutzung von fertigen Elementen möglichst keine Fehler zulässt. Ein Beispiel hierfür sind die STL Algorithmen, die gleichzeitig über mehrere Mengen laufen, und dafür drei Iteratoren erwarten - typischerweise für die zweite Menge nur den Start-Iterator. Ist jetzt die zweite Menge zu klein, läuft der Iterator in "undefined behaviour". Mit einem vierten Iterator - einem zweiten Ende-Iterator - könnte dies nie passieren.

C++ User-Treffen Aachen 09.05.2019 - Bild 6
Foto 06: Sven Johannsen mit "Vermeidung von Buffer-Overflows"

Manche Beispiele von Sven wirkten zwar etwas konstruiert - aber nur aus heutiger Sicht und für erfahrene Programmierer. Vor 20 Jahren waren viele diese Muster ganz normale Programmier-Praxis, aber die Community hat ja gelernt, und so findet man manche Beispiele von Sven hoffentlich nicht mehr im aktuellen Code. Aber andere Themen - wie z.B. mit den Iteratoren - sind auch heute noch typische Muster. Und so war es gut, dass Sven uns auf diese Probleme hinwies - und vor allem die Diskussion wieder neu entfachte, wie man möglichst feherfreien Code schreibt.

Danach hatten wir uns alle die Pause verdient, konnten uns mit Speisen und Getränken stärken, und das Gehörte und andere C++ Themen diskutieren. Ich konnte diesmal die Pause auch gut genießen, da ich diesmal ja nicht auf der Suche nach neuen Vorträgen war.

C++ User-Treffen Aachen 09.05.2019 - Bild 7
Foto 07: C++ User-Treffen Aachen 9.5.2019

Nach der Pause ging es weiter mit Daniel Evers. Daniel hatte sich vorgenommen "live" eine Small-Object-Optimization (SSO) zu implementieren - sein Beispiel war hierbei eine Art "unique_ptr". SSO meint, dass bei kleinen Objekten kein dynamischer Speicher genutzt wird, sondern das Objekt direkt im besitzenden Objekt untergebracht wird. Das typische Beispiel für SSO ist der "std::string". Seine typische Implementierung besteht aus 3 Zeigern - ist also auf einer 64 Bit Plattform 24 Byte groß. Kleine Strings (bis 23 Zeichen) könnte man also direkt im Speicherbereich der Zeiger unterbringen, ohne dafür die dynamische Speicherverwaltung bemühen zu müssen. Dies spart Speicher und bringt einiges an Performance.

C++ User-Treffen Aachen 09.05.2019 - Bild 8
Foto 08: Daniel Evers mit "Live Coding Small Object Optimization (SOO)"

Daniel hatte natürlich etwas Code vorbereitet - ganz "live" alles zu implementieren wäre dann wohl doch zuviel gewesen für eine Session von ca. 1 1/2 Stunden. Aber trotzdem hatte er sich ein gutes Stück Arbeit vorgenommen. Zuerst erklärte er erstmal, was er überhaupt vorhat, und welche Anforderungen sein "SmallPtr" erfüllen muss. Dafür hatte er extra einen größeren Unit-Test geschrieben.

C++ User-Treffen Aachen 09.05.2019 - Bild 9
Foto 09: Daniel Evers mit "Live Coding Small Object Optimization (SOO)"

Und dann ging es an die Umsetzung. Stück für Stück nahm er uns alle mit auf seinem Weg durch die Implementierung. Selbst wenn SSO im Prinzip ganz einfach klingt, so gibt es in der Umsetzung doch viele kleine und größere Herausforderungen zu meistern. Mit Daniel als Führer konnten wir aber alle folgen, und lernten eine Menge über die Anwendung von C++ und die Umsetzung von SSO. Es war eine kleine sehr interessante Reise durch eine Menge Code. Danke an Daniel, dass wir nicht den Überblick verloren und alle gut mit im Ziel ankamen.

C++ User-Treffen Aachen 09.05.2019 - Bild 10
Foto 10: Daniel Evers mit "Live Coding Small Object Optimization (SOO)"

Dann war der Abend leider schon wieder fast vorbei. Aber keine Panik - das nächste C++ Treffen in Aachen kommt bestimmt. Einige Teilnehmer gingen direkt, andere blieben noch eine Weile und sprachen über das Gehörte und genoßen dabei die restlichen Speisen und Getränke.



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: