Wilkening-Online Logo

C++ User-Treffen in Aachen am 14.6.2018



Von Detlef Wilkening

Das C++ Treffen fand mal wieder bei NI statt, und war mit 34 Teilnehmern wieder gut besucht - obwohl parallel auch ein Spiel der Fußball-Weltmeisterschaft lief.

Zuerst aber einmal vielen Dank von hier an NI für den Raum und die gute Bewirtung mit Essen und Getränken.

C++ User-Treffen Aachen 14.06.2018 - Bild 1
Foto 01: C++ User-Treffen Aachen 14.6.2018

Der Abend began wie fast immer mit meiner obligatorischen Einleitung. Ich stellte die Themen des Abends vor, schaute kurz nach vorne auf die aktuell geplanten Themen des nächsten Treffens bei Schlumberger, und wies darauf hin, dass ich immer Vorträge für die weiteren Treffen suche.

C++ User-Treffen Aachen 14.06.2018 - Bild 2
Foto 02: C++ User-Treffen Aachen 14.6.2018

Den Start in die C++ Themen übernahm Volker Aßmann mit einem Vortrag über "Time Traveling im RR". Es ist ein mächiges Feature des RR Debuggers, dass man in der Zeit zurückgehen kann, und quasi aus der Zukunft einen Breakpoint in die Vergangenheit setzen kann - wann und wo eine Variable oder Speicherstelle sich geändert hat.

C++ User-Treffen Aachen 14.06.2018 - Bild 3
Foto 03: Volker Aßmann mit "Time Travel for C++ Developers (using the RR debugging tool)"

Volker stellte das Time-Traveling Feature des RR vor und motivierte an mehreren Beispielen, wie einfach und effektiv Fehlersuche damit sein kann. Wenn man einen Fehler bemerkt - d.h. unlogische Werte in Variablen - dann ist es normalerweise schon zu spät. Interessant sind die Fragen: Wo kommt der Wert her? Wer hat ihn wann geändert? Und genau diese Fragen zu beantworten ermöglicht das Time-Traveling Feature des RR.

An den Fragen und Bemerkungen während des Vortrags merkte man, dass viele Zuhörer das Feature schon lange nutzen, aber trotzdem sehr interessiert waren mehr zu erfahren. Für all die, die es noch nicht kannten, war es ein augen-öffnender Vortrag für ein echt effektives und mächtiges Tool.

Nach Volker war Jonathan Müller mit einem kleinen Vortrag dran, der für viele echt ans Eingemachte ging. Jeder C++ Programmierer hat wohl schon von "Placement new" gehört - der Möglichkeit ein Objekt an einer vorgegebenen Adresse zu konstruieren. Das klingt erstmal ganz einfach, und scheint nicht spektakulär zu sein. Aber was da genau hinter steht, was da passiert, und was man als Programmierer so alles beachten muss - das ist dann eben doch nicht trivial - ganz im Gegenteil.

C++ User-Treffen Aachen 14.06.2018 - Bild 4
Foto 04: Jonathan Müller mit "Placement new"

Jonathan zeigte nach einer Einleitung und Motivation eine typische Placement new Implementierung. Und fragte dann: wer sieht die drei Fehler in diesem Quelltext. Während die fehlende Exception-Sicherheit noch relativ einfach zu sehen war - war das bei den anderen Fehlern ganz anders. Hier ging es schon sehr ins Detail, und Jonathan hängte bei der Erklärung wohl auch ein paar Anfänger ab. Für alle anderen war es ein super interessanter Vortrag - aber sicher auch mit der Erkenntnis, dass in C++ viele Dinge leider nicht einfach sind.

Nach dieser schwereren Kost tat eine Pause gut, und alle nutzen die Gelegenheit zur Stärkung mit Essen und Getränken - und diskutierten das Gehörte.

C++ User-Treffen Aachen 14.06.2018 - Bild 5
Foto 05: C++ User-Treffen Aachen 14.6.2018

C++ User-Treffen Aachen 14.06.2018 - Bild 6
Foto 06: C++ User-Treffen Aachen 14.6.2018

Nach der Pause gab es dann den Hauptvortrag des heutigen Abends. Daniel Frey referierte über seine "Parsing Expression Grammar Template Library" (PEGTL) - aber das eigentlich erst am Schluß. 80% seines Vortrags drehte sich um Parsing im Allgemeinen. Das erste Thema war, warum BNF und auch erweiterte Formen wie EBNF oder ABNF Probleme mit vielen Grammatiken haben und diese dann oft nicht eindeutig sind. Sein einfaches Beispiel hierfür war "/**/" in mehrfachen Abwandlungen - weshalb sein Vortrag auch "/* PEGTL */" hieß.

C++ User-Treffen Aachen 14.06.2018 - Bild 7
Foto 07: Daniel Frey mit "/* PEGTL */ - Parsing Expression Grammar Template Library"

Danach widmete er sich PEGs - die aber erst 2004 entwickelt wurden - und zeigte dass diese diese Probleme nicht haben. Deshalb basieren moderne Parser wie z.B. "Boost.Spirit" auch auf PEG, und eben nicht mehr auf BNF. Auch seine eigene Parser Library "PEGTL" ist natürlich PEG basiert.

C++ User-Treffen Aachen 14.06.2018 - Bild 8
Foto 08: Daniel Frey mit "/* PEGTL */ - Parsing Expression Grammar Template Library"

Erst zum Abschluß seines Vortrags stellte Daniel dann seine Library "PEGTL" vor, und zeigte wie einfach sie zu benutzen ist. Außerdem ist sie sehr klein und modular - kann also mit eigenen Regeln erweitert werden, die entweder ausprogrammiert oder einfach aus anderen Regelen zusammengesetzt werden. Wer Interesse an Parsern hat, oder einfach einen Parser benötigt, sollte sich neben "Boost.Spirit" sicher auch mal "PEGTL" anschauen. Interessant wäre sicher mal ein Vergleich bzgl. z.B. Compile- und Laufzeit- Performance, aber auch Syntax und Erweiterbarkeit zwischen Spirit und PEGTL. Vielleicht macht das ja mal jemand und berichtet dann hier darüber.



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: