Eindrücke von "Meeting Embedded" und "Meeting C++ 2018"

Letzte Woche war ich auf zwei Konferenzen in Berlin: Meeting Embedded und Meeting C++. Hier sind meine frischen Impressionen von beiden Konferenzen.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 8 Min.
Von
  • Rainer Grimm
Inhaltsverzeichnis

Letzte Woche war ich auf zwei Konferenzen in Berlin: Meeting Embedded und Meeting C++. Hier sind meine frischen Impressionen von beiden Konferenzen.

Meeting C++ ist neben der CppCon die wichtigste C++-Konferenz weltweit. Meeting C++ gibt es seit 2012. Sie ging von Donnerstag bis Samstag. Am Mittwoch vor der Konferenz fand Jens Wellers neue Konferenz Meeting Embedded statt.

Alle Vorträge der Konferenz waren in einem Track. Mit Ausnahme der Keynote gingen die Vorträge über 35 Minuten.

Dan Saks ist als First Secretary des C++-Standardisierungskomitee und Autor von mehr als 400 Artikeln zu C++ im Embedded-Umfeld sehr bekannt. Seit den 80ern ist er bereits als Berater und Trainer tätig.

Dans Vortrag beschäftigte sich vor allem mit seiner Erfahrung, C-Programmieren C++ zu vermitteln. Seine erste Beobachtung war, dass die meisten Embedded-Programmierer keine ausgebildeten Softwareentwickler, sondern Elektroingenieure mit C-Hintergrund sind. Das mag der Grund sein, dass ihr primärer Fokus darauf liegt, ihr Projekt irgendwie zum Laufen zu bringen. Ist dies vollbracht, steht erst die richtige Arbeit an: Debuggen. Diese Einstellung unterscheidet sich vollkommen von der eines C++-Programmierers: Ihm geht es darum, dass Programm fehlerfrei zu kompilieren, sodass es ausgeführt werden kann. Dies heißt, C++-Entwickler legen mehr Wert darauf, typsicheren Code zu entwickeln. Fehler werden bei dieser Strategie durch den Compiler erkannt.

Wenn C-Programmierer von C nach C++ wechseln, liegt ihr Fokus nicht darauf, was sie hinzugewinnen (Templates, Objekt-Orientation), sondern was sie verlieren. Dank dieser Erfahrung änderte Dan seine Strategie, C++ zu lehren, und versucht nun, behutsam vorzugehen. Das heißt zum Beispiel, dass er die Vorteile benutzerdefinierter Typen und typsichererer Zeiger zu Funktionen des Interrupt Pointer Tables in den Vordergrund stellt.

Hier sind seine "Pearls of Wisdom": Embedded-Programmierer legen sehr viel Wert auf Hardware und sind sich ihrer Hardwareeinschränkungen bewusst. Daher sollte man permanenten, aber sanften Druck ausüben, um ihre Software zu verbessern. Der Fokus sollte darauf ausgerichtet sein, Laufzeitfehler in Compilezeitfehler zu transformieren.

Für mich war dies ein sehr wertvoller Vortrag, besteht doch gerade mein tagtäglicher Job darin, Embedded-Entwickler C++ zu lehren. Falls du daher ähnliche Herausforderungen hast, ist für dich dieser Vortrag ein Muss.

Um eine bessere Vorstellung zur Meeting Embedded zu erhalten, sind hier die weiteren Vorträge gelistet:

  • "Continuous Integration of C/C++ for embedded and IoT with Jenkins, Docker and Conan" von Diego Rodriguez-Losada und Daniel Manzaneque
  • "We stopped teaching C" von Wouter van Ooijen
  • "The Core Guidelines for Safer Code" von mir selbst
  • "std::map<code,performance> myMCU{?}" von Daniel Penning
  • "Remoteprocs in Rust" von Jonathan Pallant
  • "How to mock in the 21st Century" von Paul Targosz
  • "Spread the Love for IoT – How I Created a Full-Day IoT Workshop" von Dafna Mordechai
  • "A Possible Future of Embedded Software Development" von Odin Holmes
  • "Turning MQTT v5 inside out" von Maurice Kalinowski

Meeting C++ fand von Donnerstag bis Samstag statt. Insgesamt waren es 44 Vorträge, auf vier Tracks verteilt und drei Keynotes von Andrei Alexandrescu, Lisa Lippincott und Nicolai Josuttis. Nicolai gab unmittelbar vor der Konferenz einen Workshop zu Templates. Hier ist der genaue Zeitplan:

Schedule of Meeting C++2018.

Dies sind meine Eindrücke:

Über die Keynote von Andrei möchte ich gerne mehr Worte verlieren. Vor allem dank seines Buchs "Modern C++ Design" ist Andrei ist sehr bekannt in der C++-Community. Dieses Buch wurde 2001 veröffentlicht und machte Poliy-Based Design in C++ populär.

Disclaimer: Ich stimme nicht zu 100 Prozent den Vorhersagen zu, die Andrei über die Zukunft der Programmierung, vor allem in C++ gibt. Ich habe aber seine Art und Weise sehr genossen, wie er die Werkzeuge hinterfragt, die wir zur Lösung unserer (Software-)Probleme einsetzen.

Andrei machte Vorhersagen über die C++-Zukunft: Seine erste Beobachtung war, dass die Codegröße permanent wächst. Das ist ein Problem, denn pro 1000 Zeilen Code gibt es circa 10 bis 15 Fehler. Dies ist unabhängig von der verwendeten Programmiersprache. Daher sind viele Codezeilen per se schlecht. Nun ist natürlich die Frage. Wie lässt sich die Codegröße verringern?

Drei Antworten bietet modernes C++ an:

  1. Concepts
  2. Metaklassen
  3. Introspection

Andreis Beobachtung ist es, dass weder Concepts noch Metaklassen die Codegröße signifikant reduzieren. Daher sind sie nicht Teil der Lösung, sondern Teil des Problems. Instrospection oder genauer gesagt Design by Introspection (DbI) ist die einzige Lösung. Sie ist eine Technik, bei der das Gesamtsystem auf anpassbaren Komponenten zusammengesetzt wird. Das heißt, das du die kombinatorische Komplexität der Welt mit beliebig zusammensetzbaren Komponenten begegnest.

Design by Introspektion besitzt bereits Vorläufer:

  1. Interfaces, wie sie in der Objektorientierung verwendet werden, helfen, die kombinatorische Explosion zu beantworten. Interface können aber nicht wiederverwendet werden. Design Patterns setzen diese Idee bereits um.
  2. Policy-Based Design, das von Andrei in seinem bereits zitieren Buch "Modern C++ Design" in C++ eingeführt wurde. Sie stellen eine Art halbautomatische Design Patterns dar und werden zur Compilezeit aus Templates zusammengestellt werden. Sie bieten die Wiederverwendung von Code an.

Anschließend beantwortete Andrei die Frage: Was sind die Voraussetzung von Design by Introspection?

  • Eingabe
    • Welche Methoden bietet ein Objekt an? Oder: Unterstützt ein Objekt die Methode xyz?
    • Lässt sich der Code übersetzen?
  • Code prozessieren
    • Werte einen beliebigen Ausdruck zur Compilezeit aus.
  • Ausgabe
    • Erzeuge beliebigen Code zur Compilezeit.

Zum Abschluss stelle Andrei Checked Integrals vor, die er in der Programmiersprache D mit Design by Introspection implementiert hat.

Ich möchte es gerne betonen. Andreis Keynote war mit Abstand mein Lieblingsvortrag. Dieser war sehr unterhaltsam und darüber hinaus sehr informativ.

Nun mache ich es kurz: Hier sind die Vorträge, die du dir anschauen solltest, sobald sie zur Verfügung stehen. All Vorträge des Meeting Embedded und dem Meeting C++ wurden aufgenommen und werden auf dem YouTube-Kanal "Meeting Cpp" veröffentlicht:

  • "Regular Types and Why Do I Care?" von Victor Ciura: In meinem nächsten Blogartikel geht es um reguläre und semireguläre Datentypen. Du musst dich daher noch eine Woche gedulden.
  • "Taming Dynamic Memory – An Introduction to Custom Allocators" von Andreas Weis: Andreas stellte sehr strukturiert alles vor, was du zu Allokatoren wissen solltest. Dies beinhaltet im Wesentlichen deren Vor- und Nachteile. Um ehrlich zu sein, ich lerne noch einiges zu Allokatoren hinzu.
  • "Coroutine TS: A new way of thinking" von Andreas Reischuck: Andreas gab eine sehr unterhaltsame und relativ einfach zu verstehende Einführung in Coroutinen. Seine Einführung ging auf Generatoren, Zustandsmaschinen und asynchrone Aufrufe ein.
  • Keynote "50 shades of C++" von Nicolai Josuttis. C++ ist eine erfolgreiche Programmiersprache, die mehr als 40 Jahre auf dem Buckel hat und von einer Kommunity von Freiwilligen getragen wird. Nicolai präsentierte sehr eindrucksvoll, welche Herausforderungen diese Konstellation mit sich bringt.

Hier ist mein eigener Vortrag: Best Practices for Concurrency (Was ich in den letzten zehn Jahren in meinen Schulungen schmerzhaft gelernt habe.)

Wie immer, war Meeting C++ eine große, aber doch sehr familiäre Konferenz. Am meisten genoss ich die vielen Gespräche zwischen und nach den Vorträgen. Mein Dank geht daher an Jens und sein Team.

Ich denke, du weißt es bereits. In meinen nächsten Artikel beschäftige ich mir mit regulären und semiregulären Datentypen. ()