Wilkening-Online Logo

C++ User-Treffen in Aachen am 14.2.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 Schlumberger statt. 31 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üßigkeiten und Getränken.

Leider hatte ich Probleme mit der Speicherkarte beim Fotografieren - habe dies aber erst gegen Ende des Abends gemerkt. Darum habe ich diesmal nur wenige Fotos vom Treffen, und die sind auch nur mit dem Handy entstanden - darum enthält der Bericht leider nur vier Fotos. Entschuldigung von hier vor allem an Andreas Brack, der vorgetragen hat, aber nun nicht mit Foto gewürdigt wird - man sieht ihn aber auf dem Übersichtsbild (Foto 1) ganz vorne rechts sitzen.

Außerdem musste ich kurzfristig umdisponieren, da Daniel Evers krank geworden war und daher seinen Vortrag über "Live Coding Small Object Optimization (SOO)" nicht halten konnte. Er wird ihn wahrscheinlich im April nachholen. Zum Glück hatte ich meinen eigentlich für März geplanten Vortrag schon fertig, und auch Daniel Frey konnte direkt mit einem kleinen Event einspringen. Der Abend war also gesichert.

C++ User-Treffen Aachen 14.02.2019 - Bild 1
Foto 01: C++ User-Treffen Aachen 14.2.2019

Wie immer bei Schlumberger startete der Abend mit einer Sicherheitseinweisung von Sven Johannsen. Danach war ich mit meiner obligatorischen Einleitung des Abends dran und stellte das geänderte Programm vor und sprach wieder das Thema "ich suche Vorträge für die nächsten Treffen" an.

Den Anfang des fachlichen Abends übernahm dann Andreas Brack mit seinem Vortrag über "Testen mit Google Mock". Unit-Tests als sehr mächtiges Werkzeug der Qualitätssicherung kennt ja mittlerweile jeder Programmierer - aber manchmal ist es echt schwierig Unit-Tests zu schreiben. Sind z.B. externe Ressourcen wie Datenbanken in den Code involviert, dann ist jeder Test problematisch. Hier bieten Mock-Frameworks eine Lösung, indem sie solche Ressourcen simulieren und hierbei sogar die Aufrufe validieren können. Ein typisches C++ Framework für Mocking ist Google-Mock.

Andreas berichtete, wie intensiv er in seinen Projekten Google-Mock einsetzt, und wie es hierdurch überhaupt erst möglich war viele Unit-Tests zu schreiben. Danach beschrieb er wie man Google-Mock in sein Projekt einbindet, und welche Fallen hier vorhanden sind. Und natürlich stellte er die wichtigsten Features von Google-Mock vor, zeigte wie man Mock-Objekte erstellen und im Detail definieren kann. Hierbei war klar zu erkennen, welche Unmenge an Möglichkeiten man mit Google-Mock hat um unit-test-problematische Ressouren zu simulieren und ihre Anbindung zu validieren. Vielen Dank nochmal an Andreas für diesen interessanten Vortrag und den leichten Einstieg ins Mocking in C++.

Vortrag Nummer zwei war nicht so C++ zentriert. Im Prinzip war es die Fortsetzung eines Vortrags von Sven Johannsen vom 13.7.2017. Sven hatte damals berichtet, dass eine der häufigsten Fragen bei StackOverflow ist "Wie verlasse ich den vi?" - und hatte damals mehrere mögliche Fluchtwege beschrieben. Wolfram Rösler nahm diesen Vortrag als Anlass heute zu beschreiben, warum man überhaupt im "vi" sein will oder muss, und warum auch heute noch der "vi" bzw. der "vim" ein verbreiteter Editor ist.

C++ User-Treffen Aachen 14.02.2019 - Bild 2
Foto 02: Wolfram Rösler mit "Wie man in vi bleibt und überlebt"

Im historischen Kontext betrachtet erklärt sich die Zielsetzung des vi sehr gut - damals (1976) war jedes Bit und jede Bit-Übertragung teuer, und der Editor sollte daher jeden Vorgang mit möglichst wenigen Tastendrücken umsetzen können. Heute sind die Bits nicht mehr teuer, aber viele Programmierer arbeiten gerne effizient - und da kommt ihnen ein solcher Editor, der mit einer minimalen Anzahl an Tastendrücken auskommt, gerade recht.

Wolfram stellte diesen historischen Bezug her und nahm uns dann mit auf eine kleine Reise durch die wichtigsten Kommandos vom vi, damit wir alle den Editor nicht nur verlassen können, sondern auch in ihm überleben - und vielleicht auch etwas (oder etwas mehr) Gefallen an einem solch effizienten Werkzeug finden. Es war jedenfalls ein sehr interessanter und auch teilweise sehr lustiger Vortrag - danke nochmal von hier.

Nach zwei solchen Vortrags-Schmankerln war erstmal eine Pause angesagt - und alle konnten sich etwas stärken bzw. das Gehörte diskutieren. Nach der Pause ging es dann direkt mit etwas schwererer Kost weiter. Daniel Frey hatte ein kleines C++ Programm als Quiz vorbereitet und fragte uns: "Compiliert dieses Programm? Und wenn ja, welchen C++ Standard benötigt es? Welche Warnungen gibt es möglicherweise? Wie würde man die verhindern? Und zu guter Letzt: wenn das Programm compiliert - was ist seine Ausgabe? Oder ist das Verhalten vielleicht undefiniert?" Jeder, der schon mal ein C++ Weihnachts-Quiz von mir in Düsseldorf mitgemacht hat, weiß das es diese Fragen in sich haben - und das schon bei ein paar "einfachen" Zeilen. Und hier jetzt ein ganzes Programm...

C++ User-Treffen Aachen 14.02.2019 - Bild 3
Foto 03: Daniel Frey mit einer kleinen "C++ Quiz Frage"

Gemeinsam analysierten wir das Programm und stellten fest, dass es an einigen Stellen verwirrender als nötig geschrieben war - z.B. hatte es überflüssige Klammern um Variablen-Namen bei den Definitionen - aber das war ja Sinn des Quiz. Und so enthielt das Programm u.a. auch "mutable" und "Konvertierungs-Operatoren" um uns zu verwirren. Aber letztlich konnten wir das Programm analysieren und verstehen, und kamen zu dem Ergebnis, das es "42" ausgibt. Was auch sonst konnte bei Daniel als Output gegeben sein? Das Quiz war ein großer Spaß - nochmal danke von hier.

Der Abschluß des Abends bildetet mein Vortrag über den "Mythos STL-Algorithmen und Inline-Funktionen". Sowohl STL-Algorithmen als auch Inline-Funktionen sind in C++ der Inbegriff von Performance, also sollte ihre Kombination doch die best-mögliche Performance geben, oder? Und ich hatte diese Aussage schon mehrfach bei C++ Treffen gehört - also musste es doch wahr sein, oder?

C++ User-Treffen Aachen 14.02.2019 - Bild 4
Foto 04: Detlef Wilkening mit "Mythos STL-Algorithmen und Inline-Funktionen"

Um es gleich vorweg zu nehmen: nein, das ist nicht wahr, sondern klar falsch. Anstatt Inline-Funktionen nimmt der wahre C++ Programmierer Funktions-Objekte für die Kombination mit STL-Algorithmen. Bei meinen Messungen und Untersuchungen (z.B. mit Google-Benchmark oder dem Compiler-Explorer) war das Funktions-Objekt bis zu einem Faktor 6 schneller als die identische Inline-Funktion - und es war nie langsamer. Ehrlich gesagt hat mich das nicht gewundert - mich hätte das Gegenteil überrascht. Denn Inline-Funktionen haben keinen Unique-Typ, ein Funktions-Objekt schon. Und der Compiler muss bei den STL Template-Instanziierungen also für alle Funktionen eine Instanziierung erzeugen, während es bei den Funktions-Objekten spezifische erzeugen kann - und die damit viel besser optimieren kann. Dies alles stellte ich in meinem Vortrag vor, und erklärte es Schritt für Schritt. Aber ganz egal, ob man direkt jeden Schritt nachvollziehen konnte oder nicht - kombiniert STL-Algorithmen nie mit Inline-Funktionen, sondern immer mit Funktions-Objekten.

Dann war das Treffen leider vorbei. Einige gingen direkt, andere blieben noch länger, räumten mit auf und diskutierten die gehörten Themen und Vorträge. Wie immer war es ein interessanter und spannender Abend voller toller Themen gewesen.



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: