C++ wurde in den letzten Jahren stark erweitert. Diese Erweiterungen werden als C++11/14/17 bezeichnet und machen die Programmierung mit C++ einfacher, sicherer, eleganter und effizienter. Zu den Erweiterungen gehören: • neue Sprachelemente wie Initialisiererlisten (die Initialisierungen vereinfachen und auf Typsicherheit prüfen), Lambda-Ausdrücke (die callback-Funktionen und die Verwendung von STL-Algorithmen vereinfachen), Vereinfachungen bei der Definition von Klassen, sicherere Konversionen, Move-Semantik (die schneller ist) usw. • neue Klassen der Standardbibliothek (STL) wie schnellere Hash-Container, smart pointer (die dazu beitragen können, Speicherlecks zu vermeiden), Multithreading-Klassen (für die parallele Ausführung von Threads), Unicode-Strings usw. Diese Erweiterungen sind in Visual Studio 2017 nahezu vollständig aufgenommen. Sie werden in diesem Workshop umfassend und kompakt vorgestellt.
Jeder C++-Programmierer verwendet Templates: Container wie vector<>, Strings, Algorithmen wie sort() und Iteratoren sind alles Templates (Code-Schablonen). In modernem C++ kommen Type Traits, Smart Pointers oder Funktionen wie emplace() hinzu. Trotzdem ist das Wissen um Templates erstaunlich rar und bei der Verwendung kennt jeder von uns ein gehöriges Maß an Unbehagen. Dieser Workshop geht deshalb durch die wichtigsten Features von C++ Templates und zeigt auf was es heißt, Templates auch in modernen C++ Umgebungen wie Visual Studio 2015 (oder sogar 2017) zu verwenden und worauf man in der Praxis achten muss.
Immer mal wieder, gerade auch nach der letzten ADC++, werde ich auf das Thema Debugging und Fehlervermeidung angesprochen. Immer mal wieder hat sich die ADC++ einem Thema aus diesem Bereich gewidmet. Stories of Debugging C++ Applications setzt diese Tradition fort. In diesem Workshop werden anhand von Beispielen und Erfahrungen das Thema Debugging und Fehlervermeidung vom einfachen Breakpoint bis zum Hardcore Releasedebugging alle wesentlichen Aspekte betrachtet. Ein Schwerpunkt ist die Praxisnähe. So werden die verschiedenen Einzelthemen nicht nur theoretisch vorgestellt, sondern mit Beispielen gerade auch aus der täglichen Arbeit veranschaulicht.
Ziel dieses eintägigen Hands-On-Workshops ist es, Kenntnisse zu den Boost C++ Bibliotheken zu vertiefen. Die Boost C++ Bibliotheken sind heute das wichtigste Sprungbrett, wenn Sie Ihre Produktivität als C++-Entwickler erhöhen und die Qualität Ihres C++-Codes entscheidend verbessern möchten. Tiefergehende Kenntnisse zu den Boost C++ Bibliotheken befähigen Sie, Code zu schreiben, der kürzer, ausdrucksstärker, weniger fehlerbehaftet, agiler und zukunftssicherer ist. Der Trainer Boris Schäling ist seit vielen Jahren als Boost C++ Experte bekannt und Autor des Buchs "Die Boost C++ Bibliotheken".
Templates sind eine gute Möglichkeit, den Compiler Code für Sie erstellen zu lassen. Da Templates zur Kompilierzeit ausgewertet werden, sind sie auch perfekt für eine frühestmögliche Fehlererkennung. Sie können robusteren Code mit ihnen schreiben. Mit Templates können Sie Berechnungen bereits zur Kompilierzeit durchzuführen. Zusammen mit constexpr sind sie ein sehr leistungsfähiges Werkzeug, das jeder in seiner Werkzeugkiste haben sollte. Ich zeige Ihnen verschiedene Beispiele und Anwendungsbereiche für Templates, die zu besserem Code führen. Besser bedeutet entweder besser lesbar, besser wartbar oder Erkennungsfehler so früh wie möglich (außer natürlich, dass Sie der Fehler erst gar nicht tippen). All das unter Berücksichtigung von Geschwindigkeit und Code-Größe.
SOAP und REST als Basis für die Kommunikation von Anwendungen und Diensten sind längst Standard und weit verbreitet, aber sie bringen auch Nachteile mit sich wie zum Beispiel eine hohe Payload oder Performanceeinbußen bei Massenverarbeiten. Die Verwendung von Sockets hingegen bietet die Möglichkeit, den Datenaustausch so zu optimieren, wie er für die jeweiligen Anforderung benötigt wird. Diese Session zeigt auf der einen Seite, wie eine Kommunikation unter Verwendung von Sockets aufgebaut wird und widmet sich auf der anderen Seite den Themen Stabilität, Massenzugriffen und Sicherheit. Lernen Sie, stabile Socketserver zu implementieren und welche Möglichkeiten das Socketinterface von Windows bietet, damit diese Kommunikation auch sicher ist.
In einer vernetzten Welt spielt das Thema Sicherheit eine große Rolle. C++ muss sich hier häufig den Vorwurf gefallen lassen, als unsichere Programmiersprache zu gelten. Allerdings hat sich in der Sprache auch viel getan, um die typischen Programmierfehler zu vermeiden, welche zu Sicherheitslücken führen. Diese Session stellt auf der einen Seite Angriffsscenarien vor und beleuchtet auf der anderen Seite die Entwicklung von sicheren Anwendungen mit C++. Neben den Nutzung entsprechender Funktionen und API’s stehen zudem das Design Anwendung und die Vermeidung heutiger typischer sicherheitsrelevanter Fehler im Vordergrund.
In dieser Session wird ein Design Pattern vorgestellt, das erst seit C++11 durch Lambdas richtig gut anwendbar wurde. Durch Template-Wrapper-Klassen kann man Objekten leicht Eigenschaften verleihen, die an Aspekte aus der aspektorientierten Programmierung erinnern. Ralph Tandetzky zeigt beispielhaft, wie diese Techniken die Modularität und Pflegbarkeit von Komponenten verbessern kann.
"It's complicated" said Kate Gregory in her keynote at Meeting C++. Constant learning and experience help to make us better programmers. New language concepts also change the way we think about our code. In the last couple of months I had the chance, honor, or challenge of revisiting several projects that I started about five years ago. Join me on a guided tour through code that I once considered good or even super clever. Let us explore how it could be done better and often simpler instead. We will use some C++17 on the way, too.
Writing template (meta) programs is hard. Maintaining them is even harder. In this talk we will explore ways to approach long lived, non-trivial template code. Topics will include: - How to test template code? - How to test static_asserts in particular? - How to debug compile time code? - How to reduce the amount of error message if templates are used incorrectly?
Lange hatte die GPU-Programmierung den Ruf, kompliziert und aufwändig zu sein. Routinen, die auf einer GPU liefen, wurden meistens von Experten realisiert. Dank neuer Hardware- und Software-Komponenten ist es heute jedoch wesentlich leichter, hochperformanten Code für die GPU zu schreiben. Dieser Vortrag zeigt einen einfacheren Weg als Einstieg in die GPU-Programmierung auf. Hierbei wird ein intensiver Gebrauch vom "CUDA Unified Memory" gemacht. Dadurch wird der Programmieraufwand wesentlich verringert und ein vorzeigbares Ergebnis schneller erzielt. In weiteren Schritten können dann Code-Verbesserungen implementiert werden, welche die Performance weiter steigern. Diese Vorgehensweise wird anhand von Beispielen erklärt. Außerdem wird erläutert, in welchen Fällen die größten Vorteile zu erwarten sind.
Nach einer kurzen Einführung in die GPU-Programmierung mit OpenACC werden zunächst die Erweiterungen von OpenACC 2.0 vorgestellt. Danach wird an Hand mehrerer praktischer Beispiele gezeigt, wie der Entwicklungsprozess von parallelen Anwendungen mit OpenACC abläuft und welche Performance-Verbesserungen zu erwarten sind. Hierbei stehen natürlich die Optimierungsaspekte des parallel auszuführenden Codes und der Datenübergabe vom Host-Speicher in den GPU-Speicher im Vordergrund. Alle Beispiele werden in C++ vorgestellt und mit dem PGI-C++-Compiler übersetzt.
C++17 ist die nächste Stufe der modernen C++-Programmierung. Dabei handelt es sich im wesentlichen um eine Vielzahl kleinerer Erweiterungen und Verbesserungen. In diesem Vortrag werden die Highlights davon vorgestellt, die bereits mit Visual Studio 2017 unterstützt werden. Dabei wird auch auf Besonderheiten unter Visual C++ eingegangen, die man beachten muss.
Nichts in C++ ist einfach, wenn man genauer hinschaut. Das gilt auch für das Erzeugen und Initialisieren von Objekten. In diesem Vortrag geht es deshalb um die Frage, wie man in C++ am besten Objekte initialisiert. Dabei spielen auch die neuen C++17-Features eine Rolle.
Performance ist eines der wichtigsten Argumente für den Einsatz von C++. Die richtige Wahl des Speicherlayouts komplexer Datenstrukturen ist ein wesentlicher Aspekt hiervon. Diese beeinflusst nicht nur die Effizienz von Speicherzugriffen über der zugrunde liegenden Hardware Architektur, sondern hat ebenso Einfluss auf die Qualität möglicher Vektorisierung mittels SIMD Instruktionen. Besonders in der Domäne des High Performance Computing (HPC) spielt beides eine tragende Rolle. Wir behandeln den Einsatz der Intel SIMD Data Layout Templates Bibliothek welche u.a. im HPC Umfeld zum modernisieren wissenschaftlicher und numerischer Anwendungen zum Einsatz kommt. Darüber hinaus zeigen wir auch wie C++ Anwendungsentwickler außerhalb des HPC hiervon profitieren können.
Code lebt! In einer aktiven Codebasis sind Änderungen notwendig. Mit zunehmender Größe der Codebasis können Änderungen jedoch schwierig bis manuell nicht mehr machbar werden. Vor allem bei großen repetitiven Refactorings versetzen Tools oft überhaupt erst in die Lage diese Änderungen umzusetzen. Der Talk ist ein Erfahrungsbericht von einer mit Visual C++ übersetzten Codebasis hin zu automatisierten Refactorings auf der Basis von Clang.
Wie ist das noch mit automatisierten Tests? Erlebnisse und Erfahrungen im TDD. Gedanken zu TDD mit Google Test und MS-Test in Visual Studio 2017. Wir erstellen eine neue Applikation. Die Architektur steht, (fast). Die Implementierung beginnt. Der Code muss gut werden. Was heißt gut? Erweiterbar, wartbar, nur was nötig ist! TDD soll helfen! Was geht da überhaupt?
We currently using VS2015 and will be using VS2017 and want to use it to the fullest. I attached my current slides if you are interested. It is about Structured Bindings and how to use them. It will show how this new feature will improve the readability of our product showing actual code examples as well as mention how it’ll have us rethink some of our coding standards. It is something a beginner could attend but will show information that will delight expert programmers.
C++11 bescherte uns variadische Templates und befreite uns dadurch von den endlosen Listen an Default-Argumenten. Schnell hatten wir uns an die rekursive Definition von Funktionen gewöhnt und etwas später auch an die von variadischen Klassen. Eine (variadische) Liste von Argumenten lässt sich auch bequem in einem Tupel abspeichern. Aber kann man auch die Werte eines Tupels wieder einzeln einer Funktion übergeben? Oder können wir alle Elemente eines Containers gleichzeitig an eine variadische Funktion übergeben? Beispielsweise um alle in einem Container gespeicherten Mutexe simultan zu sperren. C++14 bietet ein Feature (welches Hartgesottene auch selbst in C++11 implementieren können), was uns viele neue Möglichkeiten variadischer Programmierfreuden eröffnet.
In this session you’ll learn for which use cases, requirements & scenarios C++ is the leading choice for mobile app development for iOS & Android. You will then learn how to integrate C++ code in native iOS & Android apps, and how to mix C++ code with Qt for cross-platform app development. Based on a live coding example, you’ll see how to combine C++ code with a reactive programming language (QML) to efficiently render data and User Interfaces.
Abstrakt folgt
Die Boost C++ Bibliotheken sind heute das wichtigste Sprungbrett, wenn Sie Ihre Produktivität als C++-Entwickler erhöhen und die Qualität Ihres C++-Codes entscheidend verbessern möchten. Tiefergehende Kenntnisse zu den Boost C++ Bibliotheken befähigen Sie, Code zu schreiben, der kürzer, ausdrucksstärker, weniger fehlerbehaftet, agiler und zukunftssicherer ist. Kenntnisse zu erlernen und Vertiefung zu Boost C++ Bibliotheken sind Thema dieses Vortrags.
Im Zeitalter von IOT sind Datenquellen nicht nur in großer Zahl verfügbar, sondern auch in Ihrer Heterogenität und Produktionsrate überwältigend. Ob Big Data oder nicht, die Daten müssen prozessiert werden und damit über das Netzwerk übertragen oder auf Speichermedien geschrieben werden. In diesem Vortrag möchte ich von meinen Erfahrungen im Bereich Datenreduktion und Komprimierung von großen 3D-Bildern berichten. Der Fokus wird hier auf nebenläufiger Ausführung mit verschiedenen C++-Hilfsmitteln liegen. Zudem möchte ich Ansätze diskutieren, die portable Code-Performance bei der Verarbeitung von 1 GB/s Eingangsdaten ermöglichen. Die hier präsentierten Gedanken sind direkt auf die tägliche Balance zwischen Datenvolumen und CPU-Zyklen übertragbar.
Wie komplexe Zustandsautomaten mit Hilfe von Co-Routinen zu einfach wartbaren und testbaren Funktionen werden können. Mit C++17 ist auch der Coroutine TS (Technical Specification) verabschiedet worden. Auf verschiedenen Konferenzen wurden die Vorzüge von Co-Routinen für bessere asynchrone Programmierung erklärt. Die C++ Co-Routinen können aber noch viel mehr.