[X] Advanced Developers Conference für C++ 2011 in Prien am Chiemsee



  • Advanced Developers Conference für C++ 2011 in Prien am Chiemsee

    Seit geraumer Zeit die erste Konferenz die sich rein um das Thema C++ und native Programmierung kümmert - endlich! Der Ableger der Advanced Developers Conference (die sich in Richtung C# und managed Programmierung entwickelt hat) zeigte auf, dass natives C++ weiterhin sehr gefragt ist.

    Direkt am Chiemsee, im Yachthotel, fand die Veranstaltung bei wunderschönem Wetter statt und ermöglichte nach den Vorträgen und in den Pausen ein Zusammensitzen der ca. 100 gekommenen Teilnehmer unter freiem Himmel.

    Offizielle Homepage: http://cpp.adc11.de/

    Die Konferenz war ein voller Erfolg und wird höchstwahrscheinlich nächstes Jahr wieder ausgetragen - stay tuned!

    Dieser Artikel ist eine Vorabversion. Wir hoffen diesen noch mit Vortragsfolien erweitern zu können, hier warten wir noch auf Download-Material der Konferenzorganisation.

    Tag 1 - Donnerstag, 05. Mai 2011

    Microsoft Keynote: State of Native Development - Why You Should Care

    Boris Jabes, Microsoft (Program Manager for Visual C++)

    Native code - does it matter? Boris stellte in seiner Keynote klar, dass C++ und native Entwicklung weiterhin wichtige Pfeiler in der Software-Entwicklung bilden werden. Da Herb Sutters "the free lunch is over" immer deutlichere Auswirkungen hat, benötigt es eine mächtige, performante und flexible Sprache um gute und effiziente Programme schreiben zu können. Immer weitere Geräte verschiedenster Art treten in unser Leben ein und müssen untereinander verbunden werden. Immer mehr Sensoren versorgen Applikationen mit Daten aller Art die verarbeiteten werden müssen. Hier gilt: "if you can plug it into a computer, C++ can talk to it". Dies untermauerte Boris mit einigen Beispielen: C++ ist die beste Sprache um GPGPU zu betreiben, performant genug für mobile Geräte (Beispiel: Eine App nimmt den Kamerainput in Echtzeit an, betreibt OCR, übersetzt den erkannten Text in eine andere Sprache und setzt ihn übersetzt wieder ins Bild ein), und schließlich trotzdem abstrahierend genug um große Softwaresysteme zu schreiben.

    C++ als Programmiersprache sieht er dank des neuen Standards (C++11 ist für ihn der endgültige Name) für die Zukunft gerüstet. Beide großen Trends der heutigen Zeit haben Einzug in C++ gefunden: Großartig für parallele Programmierung sind die Konzepte aus funktionalen Sprachen die mit Lambda-Expressions Einzug gefunden haben:

    Trend Nummer 2 sind dynamische Skriptsprachen die sich sehr gut in C++ integrieren lassen, als schönstes Beispiel sieht Boris dabei die Skriptsprache Lua. Microsoft will sich wieder stärker auf die native Entwicklergemeinde konzentrieren und ist auch ein Early Adopter des neuen Standards, viele Features wurden bereits mit VC++ 2010 umgesetzt. Dass sich die Applikationswelt wieder in Richtung Thin-Client "zurückentwickelt" glaubt Boris nicht. Die Zukunft liege im Bereich Rich Client verbunden mit Services aus der Cloud. Außerdem erhofft er sich, dass C++-Programmierer "beyond programming" denken, also an die User die letzten Endes die Programme nutzen. Hier könne man sich einiges aus der Spieleindustrie abschneiden, die perfekt C++ mit Kunst und Design verknüpft.

    Verbesserungspotential sieht Boris in der C++-Entwicklergemeinde selbst, diese sei zwar sehr kreativ aber eine sehr leise Community - obwohl bspw. auf StackOverflow immer noch in den Top5. Die Community sei "zu wenig bold". Lustige Anekdote: "20% of C++ are good, but these 20% are different for everybody".

    Die Keynote endete schließlich mit der wichtigen Schlussfolgerung:

    C++ is about power and performance at any platform.

    Ich persönlich schlussfolgere aber daraus auch, dass - sollten andere Ziele bei der Entwicklung im Vordergrund stehen - es einfachere Wege nach Rom gibt.

    C++ Standard Committee Representative

    Michael Wong, IBM (Member of the C++ standard committee)
    Nach Boris' Einführung ging Michael Wong ans Eingemachte. Michael kam selbst geradewegs aus Madrid wo über den Draft des neuen C++-Standards positiv abgestimmt wurde. Nun fehlt nur noch eine Ratifizierung um das Dokument in die 6-Monatige Bürokratiemaschine der ISO eizuspeisen und noch vor dem Jahr 2012 einen neuen Standard in den Händen zu halten. Die ADC für C++ ist die allererste Konferenz über C++11 in Europa.

    Michael stellte die wichtigsten Neuerungen des neuen C++-Standards vor. Die Ziele bei der Entwicklung waren: Bessere Unterstützung für Systemprogrammierung und Library-Building sowie eine Sprache die einfacher zu lehren ist und in der "simple Dinge auch simpel sind". Außerdem gab es massiven Druck von verschiedenen Seiten bzgl. neuer Features. Zu den Umgesetzten gehören:

    - Lambda Expressions
    - RValue references
    - Definiertes Memory Model (parallele Anwendungen waren bis 2011 pures Glück mit C++)
    - Atomic API und Threads library
    - Thread local storage
    - Auto
    - Initializer lists
    - long long
    - constexpr
    - Template-Parameter

    Nicht in den neuen Standard sind Concepts aufgenommen worden. Wie auch bei der Einführung eines Modulsystems geht er davon aus, dass diese in einem nächsten Standard nachgeholt werden. Ebenfalls für einen Folgestandard kann er sich den Vorchlag für den optional aktivierbaren Garbage Collector vorstellen. Eine Übersicht über die neuen Features findet ihr hier: http://en.wikipedia.org/wiki/C%2B%2B0x

    Es wurden auch Konzepte aus C++98/03 entfernt (bspw. extern für Templates) und Teile der Library auf deprecated gesetzt (hier ist der prominenteste Vertreter gets()).

    Tipp: Vollkommen gratis lässt sich dieser Draft (der kaum mehr abgeändert werden wird) hier herunterladen: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3291.pdf - die fertige ISO-Version kostet wahrscheinlich mehr als 1000$. Andere, billigere Wege den offiziellen Standard zu erhalten findet man auf: http://herbsutter.com/2011/03/25/we-have-fdis-trip-report-march-2011-c-standards-meeting/#comment-2817

    In der Pause habe ich Michael Wong gefragt ob er C++ auf Non-Desktop-Systemen nicht in Gefahr sieht: Viele der neuen Features verlangen auch der darunterliegenden Plattform einiges ab. Es gibt allerdings festgelegte Optionen nur einen Teil des Standards umzusetzen - je nach Möglichkeiten des Systems.

    Building Asynchronous And Parallel Applications With C++

    Boris Jabes
    In seinem zweiten Vortrag stellte Boris die neue Task-Bibliothek von Microsoft vor. Diese setzt das Task-Prinzip um. Aktoren sind keine 1:1-Abbildung auf Threads sondern kleine "units of work". Kommuniziert wird untereinander mit lightweight-MessageQueues. Wichtig ist die Erstellung eines Datenflussdiagrammes vor der Implementierung, um die Aktoren richtig einzusetzen. Die genaue Zuteilung von Aktoren auf Threads wird durch eine darunterliegende Runtime gewährleistet die den Code optimal aufteilt. Es handelt sich dabei allerdings nicht um eine preemptive Runtime sondern die Aktoren arbeiten als Collaborators zusammen. Viele Beispiele über mögliche Einsatzszenarien wurden im Header "concrt_extras.h" mitgeliefert - es ist also Wert dort einen Blick reinzuwerfen.

    Danach stellte uns Boris die neuen Visual Studio-Views für parallele Programmierung vor: Parallel Stacks und die Tasks View. Die Live-Demo dazu war wirklich beeindruckend, mehr dazu findet ihr hier: http://channel9.msdn.com/Blogs/DanielMoth/Parallel-Stacks--new-Visual-Studio-2010-debugger-window

    [Hier hoffe ich Screenshots veröffentlichen zu dürfen...]

    Managed Wrapper Klassen mit C++/CLI

    Bernd Marquardt
    In seinem ersten Vortrag zeigte uns Bernd Marquardt wie man via .NET auf native C++-Klassen zugreifen kann. Dies kann aus mehreren Gründen sinnvoll sein: C++ hat im Gegensatz zu .NET immer Zugriff auf die gesamte WinAPI bzw. alle umliegenden Bibliotheken. Oftmals gibt es aber auch noch alte ausgereifte C++-Bibliotheken die man in einem .NET-Projekt verwenden möchte und deren Portierung keinen Sinn macht (Wieso gut getesteten, bugfreien, performanten Code neu schreiben?)

    Eine Möglichkeit wäre es DLLImport und P/Invoke zu verwenden, diese Methode ist allerdings langsam und deshalb möglichst zu vermeiden. Bernd empfiehlt eine C++/CLI-Wrapper-Klasse für die C++-Klasse zu schreiben. Aufzupassen gilt es nur bei der Parameterkonvertierung und welche Seite welchen Speicher anfordert und freizugeben hat. Dank der .NET-Marshalling-Klassen ist man aber auch hier sehr gut unterstützt, so gut sogar, dass die Aufgabe des Wrapper-Erstellens weitestgehend automatisiert ablaufen kann: http://www.swig.org

    Wichtig ist hier, dass 32bit und 64bit nicht zusammenarbeiten. Aus Performancegründen ist auch abgeraten von großem Hin-und-Her-Schieben von vielen Strings (die allesamt kopiert und evtl. sogar konvertiert werden müssen). Threading ist auch möglich, solange allerdings der native Code aktiv ist kann auf der managed Seite der Thread nicht geändert werden.

    Wichtig noch einmal, es sollte überall stehen: C++/CLI ist als InterOp-Sprache gedacht und sollte nicht missbraucht werden um tatsächlich vollständige Applikationen zu schreiben.

    BTW: Boris hat uns am Abend erzählt (siehe Nachtveranstaltung), dass IntelliSense für C++/CLI in der nächsten Version von Visual Studio wieder eingebaut wird.

    Does & Don'ts in der Parallelprogrammierung

    Bernd Marquardt
    Bernd Marquardt im Doppelpack. In seinem zweiten Vortrag zeigte Bernd typische Fehler in der Parallelprogrammierung (mit OpenMP) auf. Dabei führte er diese Live an Hand von Code-Beispielen vor und löste sie on-the-fly.

    Es gibt zwei große Bereiche von Parallelprogrammierung: Shared memory mit einer Maschine, einem Adressraum und mehreren Threads oder Distrubuted memory mit mehreren Maschinen und Remoting. OpenMP ist ein Shared memory-Standard der von vielen Compiler-Herstellern unterstützt wird. Für bestehenden Code optimal, empfiehlt Bernd für neu geschriebenen Code modernere Bibliotheken, für welche dann allerdings auch das Klassendesign dementsprechend designt sein muss.

    [Hier hoffe ich die Vortragsfolien veröffentlichen zu dürfen...]

    Bernd hofft, dass Herb Sutters "Concurrency for the masses" kommt und sein Vortrag überflüssig wird 🙂

    Mit C++ führen - Über Multi-Paradigmen, laufzeit-adaptive Codeerzeugung und Many-core Programmierung

    Hans Pabst, Intel
    Auch wenn der Titel (imho) mehr versprochen hat, stellte Hans Pabst gut und ausführlich die beiden Intel-Bibliotheken Clik Plus und Array Building Blocks vor. Beide sind für den Einsatz in der Multicore-Entwicklung gedacht. Während erstere eine Language-Extension ist, welche C++ um drei weitere Schlüsselwörter erweitert, geht es bei den Array Building Blocks um eine STL-artige Bibliothek unter der eine Runtime läuft die während der Ausführung optimalen Code für die jeweils darunterliegende CPU generiert (also je nach Möglichkeiten bspw. reines x86, SSE, AVX, etc.). Dies passiert automatisch bei der ersten Ausführung, kann dann aber sogar abgespeichert und wiederverwendet werden. Beide Bibliotheken sind eher für den High-Performance-Computing-Bereich denn den Alltag ausgelegt. Hier geht es also um die schnellstmögliche Ausführung von funktionalen Problemen und nicht um eine Task-Bibliothek wie sie Microsoft zur Verfügung gestellt hat (siehe Building Asynchronous And Parallel Applications With C++).

    Außerdem erwähnte Hans Pabst noch einmal kurz die von Intel entwickelten Tools für Unterstützung bei der parallelen Entwicklung:
    - Intel Composer zur Übersetzung und Fehlersuche
    - Intel Inspector zur Programmverifikation
    - Intel VTune Amplifier zur Programmanalyse/Tuning

    Diese wurden in anderen Vorträgen intensiver vorgestellt, leider konnte ich nicht allen Vorträgen beiwohnen.

    Andere Vorträge am selben Tag

    Da einige Veranstaltungen parallel abgehalten wurden, konnte ich nicht persönlich an allen teilnehmen - vielleicht kann ja jemand anderes aus dem Forum ein paar Worte zu dem einen oder anderen Vortrag schreiben. Zur Vollständigkeit noch:

    - Erhöhung der Programmqualität/-sicherheit mit Intel Inspector XE von Dr.-Ing. Michael Klemm
    - Native C/C++-Code und Web Services mit Windows Web Services verknüpfen von Cosmin Dumitru
    - Perf.-Optimierung von C++-Applikationen mit dem Intel VTune Amplifier XE (Teil 1) von Dr.-Ing. Michael Klemm
    - Team Foundation Server 2010 Version Control von Christian Binder

    Abendveranstaltung

    Am Abend gab es für alle ein Dinner auf See. Die Schifffahrt über den Chiemsee dauerte drei Stunden und bot die optimale Gelegenheit um an Tischen zu sechst ins Gespräch zu kommen und Erfahrungen auszutauschen. Am Ende der Zeit gab es auch noch eine allgemeine Q&A-Session mit den angereisten Experten. Hauptthemen waren dabei: Warum hat Microsoft C++ in den letzten Jahren so stiefmütterlich behandelt, ist "die C++-Renaissance" ernst gemeint, warum ist trotz der Cross-Platform-Strategie die man mit C++ verfolgt, Windows Phone nur managed ansprechbar, usw. Sehr interessant war auch noch die Frage warum jede große Firma ihre eigene Lösung/Framework/Bibliothek/What-So-Ever zum Thema Parallelprogrammierung unter C++ entwickelt und sich nicht um einen gemeinsamen Standard gekümmert wird. Anscheinend scheint es aber noch keinen Konsens darüber zu geben, wie genau nun Parallelprogrammierung auszusehen hat. Die wenigen Grundpfeiler kommen aber nun mit C++11 in den Standard.


    Nachtveranstaltung

    An die Schifffahrt anschließend haben sich im Untergeschoß des Hotels noch kleinere Gruppen zu verschiedensten Gesprächen gebildet. Das C++.de-Team und drei andere Entwickler freuten sich darüber, dass uns Boris Jabes noch 2h seiner Zeit schenkte und wir diskutierten in lockerer Atmosphäre über C++, die C++-Community im Gesamten, Einsatzorte von C++, die Zukunft der Sprache, typische Fallen, uvm. Zudem plauderte Boris aus dem Nähkästchen: Interessante Facts zur Entwicklung von Visual C++ bei Microsoft 🙂

    Tag 2 - Freitag, 06. Mai 2011

    Wieder munter und ausgeschlafen ging es am Freitag um 9:00 los. Mit...

    Intel Keynote: The Power for Second-Generation Intel Core Processor Family for Software Developers

    Aaron Coday, Intel
    In seinem Vortrag über die neue Core i3/5/7-Serie der zweiten Generation gab es einige beeindruckende Facts zu den neuen Intel-Prozessoren zu hören. Mehr findet man in Marcus' Artikel zur Intel ISTEP 2011, wo Aaron denselben Vortrag gehalten hat: http://www.c-plusplus.net/forum/285352

    Aha-Erlebnis: Intel plant abwechselnd das Design der Prozessoren zu verbessern um im nächsten Jahr den Prozessor wieder zu verkleinern.

    Wow-Erlebnis: Intel bietet mit dem Intel Graphics Performance Analyzers in der Version 4.0 die Möglichkeit Fullscreen-3D-Anwendungen (also bspw. Spiele) zu profilen. Mit den wichtigsten Kerndaten als Echtzeitoverlay!

    Software Transactional Memory in C++

    Michael Wong, IBM
    Am zweiten Tag führte uns Michael in sein derzeitiges Vorschungsgebiet "Software Transactional Memory" ein. TM soll die ACID-Eigenschaften von Datenbanken auf den Speicher übertragen. Critical Sections oder andere Locking-Mechanismen, die oftmals kompliziert und fehleranfällig anzuwenden sind, wären dann nicht mehr notwendig. Wie serialisierbare Datenbanktransaktionen würden Software-Transaktionen im Notfall zurückrollen können.

    Von einer konkreten Umsetzung ist man allerdings noch entfernt, da viele Fragen noch offen sind. Hauptproblem sind nicht-zurückrollbare Aktionen, da wären bspw. Ausgaben auf den Bildschirm, versendete Nachrichten oder gar das Auslösen einer Raketenzündung (eine mögliche Lösung ist das Definieren einer sogenannten "sehr wichtigen" Transaktion die auf jeden Fall durchlaufen kann - sie erhält einen globalen Lock auf den gesamten Speicher).

    Mehr zum Thema könnt ihr hier nachlesen: http://en.wikipedia.org/wiki/Software_transactional_memory

    [Hier hoffe ich noch die Vortragsfolien veröffentlichen zu dürfen...]

    Die C++-Releaseversion. Ein Buch mit sieben Siegeln?

    Matthias Wedemeyer, AWD Finanzberatung
    Hier ging es ans Eingemachte. Matthias Wedemeyer zeigte uns allerlei Nützliches rund um die C++-Releaseversion.

    Mit "Schlüssel zum Siegel Nr. 1" präsentierte er, wie man mit Hilfe eines Crashdumps (ohne PDB) Informationen zum Absturz finden kann. Leider ist er dabei zu wenig auf Tooling-Unterstützung eingegangen, viele der Tasks müsste man nicht unbedingt händisch mit dem VC++ MemoryViewer durchführen. Kurze Einführungen in den Stack und Heap folgten, wichtige Assembler-Befehle, Funktionsaufrufarten und an welchem Assemblercode sie erkannt werden können halfen uns schließlich in einem Beispiel am Ende der Präsentation den Absturzgrund eines Demo-Programmes gemeinsam herauszufinden. Wichtigste Information war natürlich: PDB-Datei immer erstellen. MAP-Datei immer erstellen - schon erspart man sich die allerschlimmsten Übel.

    Native C/C++-Code in der Cloud (Windows Azure)

    Cosmin Dumitru, ppedv AG
    In dieser halbstündigen Kurzvorstellung zeigte Cosmin Dumitru wie man nativen Code in die Windows Azure Cloud bringen kann. Da der Begriff "Cloud" noch sehr verschwommen definiert ist, brachte uns Cosmin die verschiedenen Möglichkeiten mit Hilfe der "* as a Service"-Begriffe näher:

    Die Windows Azure Cloud ist dabei ein PaaS-Produkt, welche in verschiedenen "Stärken" gemietet werden kann. Die eigentliche Deployment-Arbeit erledigt sich dann quasi von selbst. Ein ins Visual Studio integrierter Assistent erstellt ein direkt in die Cloud deploybares Projekt.

    Tipp: Noch gibt es hier: http://windowsazurepass.com/ einen 30-Tage-Gratispass mit dem man Windows Azure ausprobieren kann.

    Game Development with Visual Studio

    Boris Jabes, Microsoft
    In unglaublichen 70 Minuten konnte Boris Jabes der versammelten Menge einen drehenden Kubus mit Hilfe von Direct3D 11 präsentieren. Dabei begann er bei 0 und erklärte zusätzlich die dahinterliegende Theorie der Grafik-Pipeline, der Shader, usw. Ging der Vortrag zwar nicht über das zweite Direct3D-Tutorial hinaus (hatte also eher Tutorial- denn Expertencharakter), war es doch sehr beeindruckend mitzuerleben wie schnell Direct3D gelehrt werden könnte 👍

    Andere Vorträge am selben Tag

    Auch an diesem Tag waren die Vorträge parallel ausgelegt, nicht miterleben konnte ich:

    - Neues in der MFC von Bernd Marquardt
    - Perf.-Optimierung von C++-Applikationen mit dem Intel VTune Amplifier XE (Teil 2) von Dr.-Ing. Michael Klemm
    - Tasks mit OpenMP 3.0 von Bernd Marquardt
    - Updating a Case Study: Using Intel Parallel Studio XE for the Black-Scholes Financial Service Application von Dr.-Ing. Michael Klemm
    - DLL Injection von Matthias Wedemeyer

    Fazit

    Eine wunderbare Veranstaltung. Wir hoffen alle auf eine Fortsetzung im nächsten Jahr - seid dabei!



  • Advanced Developers Conference für C++ 2011 in Prien am Chiemsee

    Seit geraumer Zeit die erste Konferenz, die sich rein um das Thema C++ und native Programmierung kümmert - endlich! Der Ableger der Advanced Developers Conference (die sich in Richtung C# und managed Programmierung entwickelt hat) zeigte auf, dass natives C++ weiterhin sehr gefragt ist.

    Direkt am Chiemsee, im Yachthotel, fand die Veranstaltung bei wunderschönem Wetter statt und ermöglichte nach den Vorträgen und in den Pausen ein Zusammensitzen der ca. 100 gekommenen Teilnehmer unter freiem Himmel.

    Offizielle Homepage: http://cpp.adc11.de/

    Die Konferenz war ein voller Erfolg und wird höchstwahrscheinlich nächstes Jahr wieder ausgetragen - stay tuned!

    Dieser Artikel ist eine Vorabversion. Wir hoffen diesen noch mit Vortragsfolien erweitern zu können, hier warten wir noch auf Download-Material der Konferenzorganisation.

    Tag 1 - Donnerstag, 05. Mai 2011

    Microsoft Keynote: State of Native Development - Why You Should Care

    Boris Jabes, Microsoft (Program Manager for Visual C++)

    Native code - does it matter? Boris stellte in seiner Keynote klar, dass C++ und native Entwicklung weiterhin wichtige Pfeiler in der Software-Entwicklung bilden werden. Da Herb Sutters "the free lunch is over" immer deutlichere Auswirkungen hat, benötigt es eine mächtige, performante und flexible Sprache um gute und effiziente Programme schreiben zu können. Immer weitere Geräte verschiedenster Art treten in unser Leben ein und müssen untereinander verbunden werden. Immer mehr Sensoren versorgen Applikationen mit Daten aller Art die verarbeiteten werden müssen. Hier gilt: "if you can plug it into a computer, C++ can talk to it". Dies untermauerte Boris mit einigen Beispielen: C++ ist die beste Sprache um GPGPU zu betreiben, performant genug für mobile Geräte (Beispiel: Eine App nimmt den Kamerainput in Echtzeit an, betreibt OCR, übersetzt den erkannten Text in eine andere Sprache und setzt ihn übersetzt wieder ins Bild ein), und schließlich trotzdem abstrahierend genug um große Softwaresysteme zu schreiben.

    C++ als Programmiersprache sieht er dank des neuen Standards (C++11 ist für ihn der endgültige Name) für die Zukunft gerüstet. Beide großen Trends der heutigen Zeit haben Einzug in C++ gefunden: Großartig für parallele Programmierung sind die Konzepte aus funktionalen Sprachen die mit Lambda-Expressions Einzug gefunden haben:

    Trend Nummer 2 sind dynamische Skriptsprachen die sich sehr gut in C++ integrieren lassen, als schönstes Beispiel sieht Boris dabei die Skriptsprache Lua. Microsoft will sich wieder stärker auf die native Entwicklergemeinde konzentrieren und ist auch ein Early Adopter des neuen Standards, viele Features wurden bereits mit VC++ 2010 umgesetzt. Dass sich die Applikationswelt wieder in Richtung Thin-Client "zurückentwickelt" glaubt Boris nicht. Die Zukunft liege im Bereich Rich Client, verbunden mit Services aus der Cloud. Außerdem erhofft er sich, dass C++-Programmierer "beyond programming" denken, also an die User, die letzten Endes die Programme nutzen. Hier könne man sich einiges aus der Spieleindustrie abschneiden, die perfekt C++ mit Kunst und Design verknüpft.

    Verbesserungspotential sieht Boris in der C++-Entwicklergemeinde selbst, diese sei zwar sehr kreativ aber eine sehr leise Community - obwohl bspw. auf StackOverflow immer noch in den Top5. Die Community sei "zu wenig bold".

    Eine lustige Anekdote von ihm: "20% of C++ are good, but these 20% are different for everybody".

    Die Keynote endete schließlich mit der wichtigen Schlussfolgerung:

    C++ is about power and performance at any platform.

    Ich persönlich schlussfolgere aber daraus auch, dass - sollten andere Ziele bei der Entwicklung im Vordergrund stehen - es einfachere Wege nach Rom gibt.

    C++ Standard Committee Representative

    Michael Wong, IBM (Member of the C++ standard committee)
    Nach Boris' Einführung ging Michael Wong ans Eingemachte. Michael kam selbst geradewegs aus Madrid, wo über den Draft des neuen C++-Standards positiv abgestimmt wurde. Nun fehlt nur noch eine Ratifizierung um das Dokument in die 6-Monatige Bürokratiemaschine der ISO einzuspeisen und noch vor dem Jahr 2012 einen neuen Standard in den Händen zu halten. Die ADC für C++ ist die allererste Konferenz über C++11 in Europa.

    Michael stellte die wichtigsten Neuerungen des neuen C++-Standards vor. Die Ziele bei der Entwicklung waren: Bessere Unterstützung für Systemprogrammierung und Library-Building, sowie eine Sprache, die einfacher zu lehren ist und in der "simple Dinge auch simpel sind". Außerdem gab es massiven Druck von verschiedenen Seiten bzgl. neuer Features. Zu den Umgesetzten gehören:

    - Lambda Expressions
    - RValue references
    - Definiertes Memory Model (parallele Anwendungen waren bis 2011 pures Glück mit C++)
    - Atomic API und Threads library
    - Thread local storage
    - Auto
    - Initializer lists
    - long long
    - constexpr
    - Template-Parameter

    Nicht in den neuen Standard sind Concepts aufgenommen worden. Wie auch bei der Einführung eines Modulsystems geht er davon aus, dass diese in einem nächsten Standard nachgeholt werden. Ebenfalls für einen Folgestandard kann er sich den Vorschlag für den optional aktivierbaren Garbage Collector vorstellen. Eine Übersicht über die neuen Features findet ihr hier: http://en.wikipedia.org/wiki/C%2B%2B0x

    Es wurden auch Konzepte aus C++98/03 entfernt (bspw. extern für Templates) und Teile der Library auf deprecated gesetzt (hier ist der prominenteste Vertreter gets()).

    Tipp: Vollkommen gratis lässt sich dieser Draft (der kaum mehr abgeändert werden wird) hier herunterladen: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3291.pdf - die fertige ISO-Version kostet wahrscheinlich mehr als 1000$. Andere, billigere Wege den offiziellen Standard zu erhalten findet man auf: http://herbsutter.com/2011/03/25/we-have-fdis-trip-report-march-2011-c-standards-meeting/#comment-2817

    In der Pause habe ich Michael Wong gefragt, ob er C++ auf Non-Desktop-Systemen nicht in Gefahr sieht: Viele der neuen Features verlangen auch der darunterliegenden Plattform einiges ab. Es gibt allerdings festgelegte Optionen nur einen Teil des Standards umzusetzen - je nach Möglichkeiten des Systems.

    Building Asynchronous And Parallel Applications With C++

    Boris Jabes
    In seinem zweiten Vortrag stellte Boris die neue Task-Bibliothek von Microsoft vor. Diese setzt das Task-Prinzip um. Aktoren sind keine 1:1-Abbildung auf Threads, sondern kleine "units of work". Kommuniziert wird untereinander mit Lightweight-MessageQueues. Wichtig ist die Erstellung eines Datenflussdiagrammes vor der Implementierung, um die Aktoren richtig einzusetzen. Die genaue Zuteilung von Aktoren auf Threads wird durch eine darunterliegende Runtime gewährleistet, die den Code optimal aufteilt. Es handelt sich dabei allerdings nicht um eine preemptive Runtime, sondern die Aktoren arbeiten als Collaborators zusammen. Viele Beispiele über mögliche Einsatzszenarien wurden im Header "concrt_extras.h" mitgeliefert - es ist also Wert dort einen Blick reinzuwerfen.

    Danach stellte uns Boris die neuen Visual Studio-Views für parallele Programmierung vor: Parallel Stacks und die Tasks View. Die Live-Demo dazu war wirklich beeindruckend, mehr dazu findet ihr hier: http://channel9.msdn.com/Blogs/DanielMoth/Parallel-Stacks--new-Visual-Studio-2010-debugger-window

    [Hier hoffe ich Screenshots veröffentlichen zu dürfen...]

    Managed Wrapper Klassen mit C++/CLI

    Bernd Marquardt
    In seinem ersten Vortrag zeigte uns Bernd Marquardt, wie man via .NET auf native C++-Klassen zugreifen kann. Dies kann aus mehreren Gründen sinnvoll sein: C++ hat im Gegensatz zu .NET immer Zugriff auf die gesamte WinAPI bzw. alle umliegenden Bibliotheken. Oftmals gibt es aber auch noch alte ausgereifte C++-Bibliotheken, die man in einem .NET-Projekt verwenden möchte und deren Portierung keinen Sinn macht (Wieso gut getesteten, bugfreien, performanten Code neu schreiben?)

    Eine Möglichkeit wäre es DLLImport und P/Invoke zu verwenden, diese Methode ist allerdings langsam und deshalb möglichst zu vermeiden. Bernd empfiehlt eine C++/CLI-Wrapper-Klasse für die C++-Klasse zu schreiben. Aufzupassen gilt es nur bei der Parameterkonvertierung und welche Seite welchen Speicher anfordert und freizugeben hat. Dank der .NET-Marshalling-Klassen ist man aber auch hier sehr gut unterstützt, so gut sogar, dass die Aufgabe des Wrapper-Erstellens weitestgehend automatisiert ablaufen kann: http://www.swig.org

    Wichtig ist hier, dass 32bit und 64bit nicht zusammenarbeiten. Aus Performancegründen ist auch abgeraten von großem Hin-und-Her-Schieben von vielen Strings (die allesamt kopiert und evtl. sogar konvertiert werden müssen). Threading ist auch möglich, solange allerdings der native Code aktiv ist kann auf der managed Seite der Thread nicht geändert werden.

    Wichtig noch einmal, es sollte überall stehen: C++/CLI ist als InterOp-Sprache gedacht und sollte nicht missbraucht werden, um tatsächlich vollständige Applikationen zu schreiben.

    BTW: Boris hat uns am Abend erzählt (siehe Nachtveranstaltung), dass IntelliSense für C++/CLI in der nächsten Version von Visual Studio wieder eingebaut wird.

    Does & Don'ts in der Parallelprogrammierung

    Bernd Marquardt
    Bernd Marquardt im Doppelpack. In seinem zweiten Vortrag zeigte Bernd typische Fehler in der Parallelprogrammierung (mit OpenMP) auf. Dabei führte er diese live an Hand von Code-Beispielen vor und löste sie on-the-fly.

    Es gibt zwei große Bereiche von Parallelprogrammierung: Shared memory mit einer Maschine, einem Adressraum und mehreren Threads oder Distrubuted memory mit mehreren Maschinen und Remoting. OpenMP ist ein Shared memory-Standard der von vielen Compiler-Herstellern unterstützt wird. Für bestehenden Code optimal, empfiehlt Bernd für neu geschriebenen Code modernere Bibliotheken, für welche dann allerdings auch das Klassendesign dementsprechend designt sein muss.

    [Hier hoffe ich die Vortragsfolien veröffentlichen zu dürfen...]

    Bernd hofft, dass Herb Sutters "Concurrency for the masses" kommt und sein Vortrag überflüssig wird 🙂

    Mit C++ führen - Über Multi-Paradigmen, laufzeit-adaptive Codeerzeugung und Many-core Programmierung

    Hans Pabst, Intel
    Auch wenn der Titel (imho) mehr versprochen hat, stellte Hans Pabst gut und ausführlich die beiden Intel-Bibliotheken Cilk Plus und Array Building Blocks vor. Beide sind für den Einsatz in der Multicore-Entwicklung gedacht. Während erstere eine Language-Extension ist, welche C++ um drei weitere Schlüsselwörter erweitert, geht es bei den Array Building Blocks um eine STL-artige Bibliothek unter der eine Runtime läuft die während der Ausführung optimalen Code für die jeweils darunterliegende CPU generiert (also je nach Möglichkeiten bspw. reines x86, SSE, AVX, etc.). Dies passiert automatisch bei der ersten Ausführung, kann dann aber sogar abgespeichert und wiederverwendet werden. Beide Bibliotheken sind eher für den High-Performance-Computing-Bereich denn den Alltag ausgelegt. Hier geht es also um die schnellstmögliche Ausführung von funktionalen Problemen und nicht um eine Task-Bibliothek wie sie Microsoft zur Verfügung gestellt hat (siehe Building Asynchronous And Parallel Applications With C++).

    Außerdem erwähnte Hans Pabst noch einmal kurz die von Intel entwickelten Tools für Unterstützung bei der parallelen Entwicklung:
    - Intel Composer zur Übersetzung und Fehlersuche
    - Intel Inspector zur Programmverifikation
    - Intel VTune Amplifier zur Programmanalyse/Tuning

    Diese wurden in anderen Vorträgen intensiver vorgestellt, leider konnte ich nicht allen Vorträgen beiwohnen.

    Andere Vorträge am selben Tag

    Da einige Veranstaltungen parallel abgehalten wurden, konnte ich nicht persönlich an allen teilnehmen - zur Vollständigkeit noch:

    - Erhöhung der Programmqualität/-sicherheit mit Intel Inspector XE von Dr.-Ing. Michael Klemm
    - Native C/C++-Code und Web Services mit Windows Web Services verknüpfen von Cosmin Dumitru
    - Perf.-Optimierung von C++-Applikationen mit dem Intel VTune Amplifier XE (Teil 1) von Dr.-Ing. Michael Klemm
    - Team Foundation Server 2010 Version Control von Christian Binder

    Abendveranstaltung

    Am Abend gab es für alle ein Dinner auf See. Die Schifffahrt über den Chiemsee dauerte drei Stunden und bot die optimale Gelegenheit um an Tischen zu sechst ins Gespräch zu kommen und Erfahrungen auszutauschen. Am Ende der Zeit gab es auch noch eine allgemeine Q&A-Session mit den angereisten Experten. Hauptthemen waren dabei: Warum hat Microsoft C++ in den letzten Jahren so stiefmütterlich behandelt, ist "die C++-Renaissance" ernst gemeint, warum ist trotz der Cross-Platform-Strategie die man mit C++ verfolgt, Windows Phone nur managed ansprechbar, usw. Sehr interessant war auch noch die Frage warum jede große Firma ihre eigene Lösung/Framework/Bibliothek/What-So-Ever zum Thema Parallelprogrammierung unter C++ entwickelt und sich nicht um einen gemeinsamen Standard gekümmert wird. Anscheinend scheint es aber noch keinen Konsens darüber zu geben, wie genau nun Parallelprogrammierung auszusehen hat. Die wenigen Grundpfeiler kommen aber nun mit C++11 in den Standard.


    Nachtveranstaltung

    An die Schifffahrt anschließend haben sich im Untergeschoß des Hotels noch kleinere Gruppen zu verschiedensten Gesprächen gebildet. Das C++.de-Team und drei andere Entwickler freuten sich darüber, dass uns Boris Jabes noch 2h seiner Zeit schenkte und wir diskutierten in lockerer Atmosphäre über C++, die C++-Community im Gesamten, Einsatzorte von C++, die Zukunft der Sprache, typische Fallen, uvm. Zudem plauderte Boris aus dem Nähkästchen: Interessante Facts zur Entwicklung von Visual C++ bei Microsoft 🙂

    Tag 2 - Freitag, 06. Mai 2011

    Wieder munter und ausgeschlafen ging es am Freitag um 9:00 los. Mit...

    Intel Keynote: The Power for Second-Generation Intel Core Processor Family for Software Developers

    Aaron Coday, Intel
    In seinem Vortrag über die neue Core i3/5/7-Serie der zweiten Generation gab es einige beeindruckende Facts zu den neuen Intel-Prozessoren zu hören. Mehr findet man in Marcus' Artikel zur Intel ISTEP 2011, wo Aaron denselben Vortrag gehalten hat: http://www.c-plusplus.net/forum/285352

    Aha-Erlebnis: Intel plant abwechselnd das Design der Prozessoren zu verbessern um im nächsten Jahr den Prozessor wieder zu verkleinern.

    Wow-Erlebnis: Intel bietet mit dem Intel Graphics Performance Analyzers in der Version 4.0 die Möglichkeit Fullscreen-3D-Anwendungen (also bspw. Spiele) zu profilen. Mit den wichtigsten Kerndaten als Echtzeitoverlay!

    Software Transactional Memory in C++

    Michael Wong, IBM
    Am zweiten Tag führte uns Michael in sein derzeitiges Vorschungsgebiet "Software Transactional Memory" ein. TM soll die ACID-Eigenschaften von Datenbanken auf den Speicher übertragen. Critical Sections oder andere Locking-Mechanismen, die oftmals kompliziert und fehleranfällig anzuwenden sind, wären dann nicht mehr notwendig. Wie serialisierbare Datenbanktransaktionen würden Software-Transaktionen im Notfall zurückrollen können.

    Von einer konkreten Umsetzung ist man allerdings noch entfernt, da viele Fragen noch offen sind. Hauptproblem sind nicht-zurückrollbare Aktionen, da wären bspw. Ausgaben auf den Bildschirm, versendete Nachrichten oder gar das Auslösen einer Raketenzündung (eine mögliche Lösung ist das Definieren einer sogenannten "sehr wichtigen" Transaktion die auf jeden Fall durchlaufen kann - sie erhält einen globalen Lock auf den gesamten Speicher).

    Mehr zum Thema könnt ihr hier nachlesen: http://en.wikipedia.org/wiki/Software_transactional_memory

    [Hier hoffe ich noch die Vortragsfolien veröffentlichen zu dürfen...]

    Die C++-Releaseversion. Ein Buch mit sieben Siegeln?

    Matthias Wedemeyer, AWD Finanzberatung
    Hier ging es ans Eingemachte. Matthias Wedemeyer zeigte uns allerlei Nützliches rund um die C++-Releaseversion.

    Mit "Schlüssel zum Siegel Nr. 1" präsentierte er, wie man mit Hilfe eines Crashdumps (ohne PDB) Informationen zum Absturz finden kann. Leider ist er dabei zu wenig auf Tooling-Unterstützung eingegangen, viele der Tasks müsste man nicht unbedingt händisch mit dem VC++ MemoryViewer durchführen. Kurze Einführungen in den Stack und Heap folgten, wichtige Assembler-Befehle, Funktionsaufrufarten und an welchem Assemblercode sie erkannt werden können halfen uns schließlich in einem Beispiel am Ende der Präsentation den Absturzgrund eines Demo-Programmes gemeinsam herauszufinden. Wichtigste Information war natürlich: PDB-Datei immer erstellen. MAP-Datei immer erstellen - schon erspart man sich die allerschlimmsten Übel.

    Native C/C++-Code in der Cloud (Windows Azure)

    Cosmin Dumitru, ppedv AG
    In dieser halbstündigen Kurzvorstellung zeigte Cosmin Dumitru, wie man nativen Code in die Windows Azure Cloud bringen kann. Da der Begriff "Cloud" noch sehr verschwommen definiert ist, brachte uns Cosmin die verschiedenen Möglichkeiten mit Hilfe der "* as a Service"-Begriffe näher:

    Die Windows Azure Cloud ist dabei ein PaaS-Produkt, welche in verschiedenen "Stärken" gemietet werden kann. Die eigentliche Deployment-Arbeit erledigt sich dann quasi von selbst. Ein ins Visual Studio integrierter Assistent erstellt ein direkt in die Cloud deploybares Projekt.

    Tipp: Noch gibt es hier: http://windowsazurepass.com/ einen 30-Tage-Gratispass mit dem man Windows Azure ausprobieren kann.

    Game Development with Visual Studio

    Boris Jabes, Microsoft
    In unglaublichen 70 Minuten konnte Boris Jabes der versammelten Menge einen drehenden Kubus mit Hilfe von Direct3D 11 präsentieren. Dabei begann er bei 0 und erklärte zusätzlich die dahinterliegende Theorie der Grafik-Pipeline, der Shader, usw. Ging der Vortrag zwar nicht über das zweite Direct3D-Tutorial hinaus (hatte also eher Tutorial- denn Expertencharakter), war es doch sehr beeindruckend mitzuerleben wie schnell Direct3D gelehrt werden könnte 👍

    Andere Vorträge am selben Tag

    Auch an diesem Tag waren die Vorträge parallel ausgelegt, nicht miterleben konnte ich:

    - Neues in der MFC von Bernd Marquardt
    - Perf.-Optimierung von C++-Applikationen mit dem Intel VTune Amplifier XE (Teil 2) von Dr.-Ing. Michael Klemm
    - Tasks mit OpenMP 3.0 von Bernd Marquardt
    - Updating a Case Study: Using Intel Parallel Studio XE for the Black-Scholes Financial Service Application von Dr.-Ing. Michael Klemm
    - DLL Injection von Matthias Wedemeyer

    Fazit

    Eine wunderbare Veranstaltung. Wir hoffen alle auf eine Fortsetzung im nächsten Jahr - seid dabei!


Log in to reply