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 Utimaco statt. 42 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 Utimaco für den Raum und die Bewirtung mit Essen und Getränken.
Foto 01: C++ User-Treffen Aachen 14.3.2019
Der Abend began wie immer mit einer kurzen Begrüßung und Einführung von mir, und einem Ausblick auf das nächste Treffen. Und dann konnte der fachliche Abend schon beginnen. Passend zum PI-Day hatte ich besonders interessante Vorträge geplant - da konnte Google mit der Veröffentlichung von 31,415 Billionen Stellen nicht mithalten. Da Albert Einstein heute 140 Jahre alt geworden wäre, hatte ich sogar kurzzeitig überlegt einen Vortrag über die Relativitätstheorie ins Programm aufzunehmen - aber das wäre dann doch wirklich zu weit von C++ entfernt gewesen, oder?
Den Anfang des fachlichen Abends übernahm dann Volker Reichelt mit "Extending GCC - Hunting non-overridden virtual functions". Volker wollte zeigen wie einfach es ist den GCC um neue Warnungen zu erweitern.
Foto 02: Volker Reichelt mit "Extending GCC - Hunting non-overridden virtual functions"
Dazu stellte Volker erstmal einen "Code-Smell" vor, der nach seiner Meinung eine Warnung wert ist: virtuelle Funktionen, die nie überschrieben worden sind. Dabei bezog er sich explizit nicht auf den Performance-Verlust, den ein unnötiger virtueller Funktions-Aufruf mit sich bringt. Sein Hintergrund war mehr, dass eine virtuelle Funktion, die nie überschrieben worden ist, beim Aufruf nicht richtig getestet ist. Jede Nutzung von virtuellen Funktionen muss ja mit leicht unterschiedlichen Implementierung umgehen können, und dies wurde hier nie genutzt. Volker zeigte mehrere Beispiele, deren Code oberflächlich korrekt aussah, aber der durch Überschreiben gebrochen werden konnte.
Nach der Motivation ging es ans Eingemachte. Er zeigte zuerst, wie man in den GCC Sourcen die Code-Teile findet, die für die Warnungen zuständig sind, und wie man hier eingreift. Dann welche Funktionen sind Makros für die Erweiterung zu nutzen sind, und welche Informationen alle vorliegen. Stück für Stück erweiterte er die GCC Sourcen und nutzte die vorhandenen Informationen für die Generierung seiner Warnung.
Foto 03: Volker Reichelt mit "Extending GCC - Hunting non-overridden virtual functions"
Nun wird sicher nicht jeder den GCC erweitern - es war trotzdem toll und beeindruckend zu sehen, wie einfach sich der GCC z.B. um neue Warnungen erweitern läßt. Jeder, der das mal machen will (oder muss) und nicht hier war hat nun einen Grund sich zu Ärgern - das verpasst zu haben.
Nach Volker war Daniel Frey mit einem "Nachtrag zum PEGTL Vortrag Teil 1" dran. Daniel hatte am 14.06.2018 seine Open-Source Parser-Bibliothek PEGTL vorgestellt. Im Anschluss an den damaligen Vortrag war viel diskutiert worden und viele Fragen waren gestellt worden. Daniel wollte auf diese Fragen und Anmerkungen eingehen, und zeigte mehr Code in seinem Nachtrag Vortrag.
Foto 04: Daniel Frey mit "Nachtrag zum PEGTL Vortrag Teil 1"
Konkret zeigte er vor allem, wie die Regeln aufgebaut sind, und wie man sie miteinander kombinieren kann. Außerdem zeigte und begründete er viele Implementierungs-Details, wie z.B. warum er trotz möglicher schlechterer Compile-Zeiten keine Typ-Aliase für die Meta-Programmierung verwendet.
Foto 05: Daniel Frey mit "Nachtrag zum PEGTL Vortrag Teil 1"
Wie schon beim eigentlichen PEGTL Vortrag wurden auch diesmal viele Fragen gestellt. Parser sind einfach ein heißes und interessantes Thema für jeden Programmierer, und Daniels Ansatz ist sehr überzeugend. Trotzdem waren wir dann auch froh, erstmal einen Augenblick abschalten zu können - und so wechselten wir in die Pause. Zum Glück war noch viel Essen und Trinken da - zu bereden gab es ja sehr viel.
Foto 06: C++ User-Treffen Aachen 14.3.2019
Foto 07: C++ User-Treffen Aachen 14.3.2019
Foto 08: C++ User-Treffen Aachen 14.3.2019
Nach der Pause ging es dann weiter mit Daniel Frey und seiner PEGTL. Der erste Vortrag im Juni hatte die Bibliothek grob vorgestellt und dabei natürlich auf die Nutzung fokussiert. Damals waren viele Fragen aufgetaucht, wie die Bibliothek denn intern arbeitet - und so hatte Daniel dies zum Thema des zweiten Teils gemacht. Gleich der Hinweis: auch diesmal sind viele Fragen gestellt worden, die weit über den Inhalt dieses Vortrags hinaus gingen - es wird also wohl noch einen dritten Teil geben müssen.
Foto 09: Daniel Frey mit "PEGTL - Teil 2"
Ausgehend von einer einfachen Regel entwickelte Daniel Schritt für Schritt die Architektur der PEGTL. Erstmal ging es um die Frage, wie man die Parser vom eigentlichen Kern trennen kann, um problemlos eigene Parser schreiben zu können und die PEGTL erweiterbar zu machen. Dann ist ein Parser, der einfach nur sagt: "der Input matcht oder nicht", ziemlich sinnlos. Wir wollen Aktionen an die erkannten Elemente anhängen können. Also: wie integriert man Aktionen in die PEGTL, ohne sich zu festzulegen? Und dann benötigt man in vielen Situationen Kontexte: wie kann man die durch die Regel-Ebenen hindurch zur Verfügung stellen - vielleicht sogar mehrere? Wie könnte man den Aufbau eines Parse-Trees vereinfachen oder vielleicht sogar automatisieren?
Solche, und viele andere Fragen, stellte Daniel - und zeigte dann natürlich, wie die PEGTL diese Probleme löst. Im Inneren der PEGTL werkelt die Duseltronik (siehe Foto 10) - und sie übernimmt diese ganzen Aufgaben, und löst sie effizient und erweiterbar. Es war sehr beeindruckend zu sehen, wie Daniel Thema für Thema abarbeitete und die Duseltronik so Schritt für Schritt entstand.
Foto 10: Daniel Frey mit "PEGTL - Teil 2"
Fast alle Lösungen auf die Fragen spiegelten sich dann in Template-Parametern wieder, und viele davon waren variadisch ausgelegt. Dadurch wird die PEGTL sehr flexibel auf auch effizient, denn der Compiler sieht ja die gesamte Grammatik mit allen Teilen und kann hier sehr gut optimieren. Die PEGTL ist ein echt beeindruckendes Stück Software - und auch dieser Vortrag blieb kein Stück dahinter.
Als der Vortrag vorbei war, waren natürlich noch nicht alle Fragen geklärt - und Daniel musste noch sehr lange mit vielen Interessierten diskutieren. Aber auch in anderen kleinen Gruppen wurde noch heftig weiter über das Gehörte geredet und dabei das restliche Essen vertilgt.
Foto 11: C++ User-Treffen Aachen 14.3.2019
Dann war das Treffen leider vorbei. Wie immer war es ein interessanter und spannender Abend voller toller Themen gewesen. Wir freuen uns auf das nächste Treffen am 11. April 2019.
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.