Wilkening-Online Logo

C++ User-Treffen in Aachen am 11.7.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 NI statt. 27 C++ Interessierte waren gekommen, um sich Vorträge über C++ anzuhören und um über C++ zu diskutieren.

C++ User-Treffen Aachen 11.07.2019 - Bild 1
Foto 01: C++ User-Treffen Aachen 11.7.2019

Zuerst einmal vielen Dank von hier an NI für den Raum und die Bewirtung mit Speisen und Getränken. Irgendwie hatten diesmal viele Teilnehmer guten Hunger mitgebracht, oder es schmeckte diesmal besonders gut - der Essensberg schrumpfte jedenfalls recht zügig, und zur Pause war kaum noch was vorhanden. Aber besser so, als wenn die Speisen hinterher weggeworfen werden müssten. Vielen Dank an NI.

C++ User-Treffen Aachen 11.07.2019 - Bild 2
Foto 02: C++ User-Treffen Aachen 11.7.2019

Und auch die alten C64 Nerds waren da...

C++ User-Treffen Aachen 11.07.2019 - Bild 3
Foto 03: Die alten C64 Nerds waren auch da

Ich hatte keine große Einleitung. Es gab diesmal keinen Hauptvortrag - aber das hatte ich im Vorfeld ja schon so angekündigt - und statt dessen hatten wir vier interessante Lightning Vorträge im Programm. So blieben mir nur die Hinweise, dass es im August wegen Sommerpause kein C++ Treffen in Aachen gibt, und dass in der kommenden Woche das C++ Standardisierungs-Treffen in Köln ist. Dort wird wahrscheinlich der Umfang von C++20 mit vielen neuen Featuren endgültig definiert. Wer Zeit hatte, sollte dahin gehen - die Treffen sind öffentlich, und man kann viel lernen dabei.

Den Start des Abends machte Tobias Hoffmann mit "C/C++ rounding cheat sheet". Tobias hat in seinem Leben viel mit Fließkommazahlen zu tun gehabt - und obwohl das Thema so nichtssagend klingt - einige Fallen und Herausforderungen im Bereich "Runden" entdeckt. Es gibt nicht einfach das "Runden" von Fließkommazahlen, sondern viele Möglichkeiten. Und keine ist in jedem Fall ideal, sondern der Programmierer muss in Einzelfall abwägen, was er benötigt bzw. erreichen muss.

C++ User-Treffen Aachen 11.07.2019 - Bild 4
Foto 04: Tobias Hoffmann mit "C/C++ rounding cheat sheet"

Tobias stellte Stück für Stück die fünf Rundungsfunktionen von C und C++ vor, und zeigte bei jeder auf, welche Vor- und Nachteile sie haben. Außerdem verwies er immer wieder - wenn vorhanden - auf den entsprechenden Rundungsmode, wie z.B. "FE_DOWNWARD" bei "floor". Alle diese Informationen hat er auf einem Cheat-Sheet zusammengefasst, und stellt diesen zur Verfügung - siehe Link auf der Vortrags-Seite.

C++ User-Treffen Aachen 11.07.2019 - Bild 5
Foto 05: Tobias Hoffmann mit "C/C++ rounding cheat sheet"

Im Laufe des Vortrags kam er auch immer wieder Auf viele Details rund ums Runden zu sprechen, an die man im ersten Augenblick sicher nicht gedacht hätte - z.B. auf die Einflüsse der zugrunde liegenden Hardware. Der typische "double" ist 64 Bit groß, der Intel Fließkommaprozessor z.B. arbeitet default mäßig aber in 80 Bit - die SIMD Register aber in 64 Bit. Damit können Rechen- und Rundungsunterschiede auftreten, in Abhängigkeit davon wo genau gerechnet wird. Es war erschreckend zu sehen, wieviel bei einem scheinbar so einfachen Thema bedacht werden muss, bzw. was alles Einfluss nehmen kann. Am Ende beantwortete der Vortrag viele Fragen, warf aber gleichzeitig viele Neue auf. Ein wirklich umfassender Vortrag über Rundungen wäre wahrscheinlich mehrere Stunden lang geworden. Danke Tobias für den interessanten Einstieg.

Nach Tobias näherte sich Pay Schulze Horn dem Thema HIC 4.0 ( "High Integrity C++"). Pay kommt aus dem medizinischen Umfeld - und dort wird natürlich viel Wert auf Korrektheit der Programme gelegt. Und dies wird u.a. durch entsprechende Coding-Standards erreicht, für die es natürlich statische Code-Analyzer geben sollte. Einer dieser Standards ist HIC - seit Oktober 2013 in der vierten Version vorliegend - und diesen stellte Pay vor.

C++ User-Treffen Aachen 11.07.2019 - Bild 6
Foto 06: Pay Schulze Horn mit "HIC 4.0"

HIC 4.0 umfasst 155 Regeln, von denen sich viele auf C++11 beziehen. Viele der HIC Regeln beziehen sich auf die "GotW Artikel" von Herb Sutter, das "Modern Effective C++" Buch von Scott Meyers, oder das "Concurrency" Buch von Anthony Williams - also sicher empfehlenswerte Referenzen.

C++ User-Treffen Aachen 11.07.2019 - Bild 7
Foto 07: Pay Schulze Horn mit "HIC 4.0"

Zum einzelnen Vorstellen waren 155 Regeln aber zu viele - und so beschränkte sich Pay auf eine kleine Auswahl, die er detailliert vorstellte. Nun haben es Regeln so an sich, dass sie auch immer diskussionswürdig sind. Gerade auch, wenn Experten im Raum sind, die natürlich die Gründe für die Regeln kennen, aber eben auch die Grenzen sehen. Und so wurde viel über jede Regel diskutiert. Auch das Thema "Tooling" wurde intensiv besprochen. Aber manchmal sind dies die besten Vorträge, die so viele Diskussionen auslösen... Danke, Pay.

Nach so vielen Diskussionen war dann erstmal eine Pause angesagt, und die Diskussionen gingen bei den restlichen Speisen und Getränken weiter.

C++ User-Treffen Aachen 11.07.2019 - Bild 8
Foto 08: C++ User-Treffen Aachen 11.7.2019

Georg Hellack machte nach der Pause mit dem "Debuggen von Arduino Anwendungen" weiter. Die typische Art auf dem Arduino zu debuggen, ist das "printf" Äquivalent in Form von Senden von Werten und Texten über die serielle Schnittstelle. Dies ist sicher keine besonders hilfreiche Vorgehensweise - und sicher hat schon jeder einen Debugger für den Arduino vermisst.

C++ User-Treffen Aachen 11.07.2019 - Bild 9
Foto 09: Georg Hellack mit "Arduino mit gcc und gdb programmieren"

Georg führte in das Projekt "avr" ein, dass die normale GBD Schnittstelle über einen seriellen Port vom Arduino aus bedient. Dazu stellte Georg ausführlich die Schritte vor, wie aus einem Stück Quelltext das Programm entsteht und wie es auf den Arduino transportiert wird. Dies versteckt die Arduino IDE vor dem Benutzer - um den Einstieg zu erleichtern. Beim AVR-Projekt muss man hier überall eingreifen, darum funktioniert die Arduino IDE hier nicht.

C++ User-Treffen Aachen 11.07.2019 - Bild 10
Foto 10: Georg Hellack mit "Arduino mit gcc und gdb programmieren"

Georg zeigte dann ganz praktisch, welche Befehle aus dem AVR-Projekt die einzelnen Schritte durchführen, und dann den GBD auf der Kommandozeile in Action. Die Demo lief zwar nicht ganz rund, aber das Prinzip war deutlich zu erkennen. Und die vielen Rückfragen und Anmerkungen zeigten, dass er mit diesem Vortrag einen Nerv getroffen hatte - viele der Anwesenden spielen immer mal wieder gerne mit dem Arduino, oder nutzen ihn professionell - und da wäre ein Debugger ein sehr hilfreiches Tool. Danke, Georg.

Den Abschluss des Abends übernahm Jonathan Müller mit dem Thema "Wie ich mal ein iPad gewonnen habe...". Keiner wußte so recht, was sich dahinter verbarg - auch ich war nur teilweise informiert. Und so erzählte Jonathan, dass er im letzten Jahr den Aufruf von Richard Smith auf Twitter mitbekommen hatte, ein möglichst trickreiches, aber auch produktives und sinnvolles C++ Code-Segment einzusenden. Dem Autor des "schönsten" Stücks C++ Code winkte ein iPad - und Jonathan war der glückliche Gewinner. Und er wollte uns dieses Code-Segment nicht vorenthalten...

C++ User-Treffen Aachen 11.07.2019 - Bild 11
Foto 11: Jonathan Müller mit "Wie ich mal ein iPad gewonnen habe..."

Jonathan blendete das Code-Segment kurz ein - und ehrlich gesagt war außer einem "Häh???" so schnell nicht mehr drin... Der Rest des Vortrags war damit klar - verstehen, was da abgeht. Ich greife schon mal vor - Jonathan hatte ein kleines Stück Code entwickelt, dass ohne jede Form von Compile-Zeit Reflection (die wir in C++ ja noch nicht haben), die Anzahl von Enum-Werten in einem Enum-Typ zur Compile-Zeit ermittelt.

Zuerst stellt Jonathan die Grundidee vor - __PRETTY_FUNCTION__ liefert einen schönen Funktions-Namen, und in dem ist der Typ bzw. bei Funktions-Templates mit Template-Enum-Parameter der Wert in lesbarer Form enthalten. Via "string_view" und "constexpr" Funktionen lassen sich also der Typ und die Werte extrahieren. Wird dem Funktions-Template nun ein Int-Wert übergeben, so liefert __PRETTY_FUNCTION__ den Enum-Wert-Namen, wenn einer vorhanden ist. Also muss man nur noch alle durchprobieren, was natürlich wieder TMP benötigt...

C++ User-Treffen Aachen 11.07.2019 - Bild 12
Foto 12: Jonathan Müller mit "Wie ich mal ein iPad gewonnen habe..."

Am Ende des Vortrags verwies Jonathan noch auf die Bibliothek "magic-enum", die all diese Dinge und einige weitere hilfreiche Enum-Funktionen enthält, und auf genau dieser Technik basiert. Es war ein wunderschöner interessanter Vortrag, und zumindest ich habe wieder einiges gelernt. Danke, Jonathan.

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.

C++ User-Treffen: