Berichte von der Frühjahrskonferenz C ++ Russia 2018


    Vom 19. April bis zum 21. April fand in St. Petersburg die Konferenz C ++ Russia 2018 statt, bei der Organisation und Betrieb von Jahr zu Jahr eine Stufe höher liegen, was eine gute Nachricht ist. Dank an den ständigen Organisator von C ++ Russland Sergey Platonov für seinen Beitrag zur Entwicklung dieses Gebiets.

    Meisterkurse waren für den 19. April angesetzt, an dem wir leider nicht teilnehmen konnten. Das Hauptprogramm der Konferenz fand von 20 bis 21 Uhr statt, an dem wir mit großem Interesse teilnahmen. Sergey SermpEr hat viel gearbeitet und einige wunderbare ausländische Redner als Redner gewonnen. Jon Kalb, der Organisator von CppCon und der Autor des Buches C ++ Today: The Beast is Back, eröffnete den ersten Tag der Konferenz. Der zweite Tag begann mit einem Bericht von Daveed Vandevoorde, einem Mitglied des Standardisierungsausschusses, einem der Autoren des Buches C ++ Templates: The Complete Guide. Im Epizentrum der Aufmerksamkeit befand sich Andrei Alexandrescu, der nach seinem Bericht über Ausnahmen zu einem bestimmten Zeitpunkt eine ganze Menge von Menschen versammelte, die ein Autogramm erhalten und ein gemeinsames Foto machen wollten. Zum ersten Mal wurde der Herb Sutter Skype-Bericht über den Spaceship-Operator für C ++ 20 gesendet.

    Obwohl die Konferenz bereits vor mehr als drei Monaten abgehalten wurde, wurde das Video ( vollständige Playlist) abgespieltEs ist jetzt so angelegt, dass es Zeit ist, Ihre Erinnerungen aufzufrischen und in die erstaunlichen Möglichkeiten von C ++ einzutauchen.

    Jon Kalb. C ++ Today: Das Biest ist zurück



    In diesem Vortrag wird erläutert, warum Ingenieure, die nach Leistung suchen, C ++ wählen. Jon präsentiert eine historische Perspektive von C ++, die sich auf die aktuellen Entwicklungen in der C ++ - Community konzentriert und wohin sich die Sprache und die Benutzerbasis bewegen. Mit einem erneuten Interesse an der Leistung sowohl für Rechenzentren als auch für mobile Geräte und dem Erfolg von Open-Source-Softwarebibliotheken ist C ++ zurück und es ist heiß. In diesem Vortrag wird erklärt, warum C ++ für die meisten Software-Ingenieure die wichtigste Sprache für Leistung ist. Sie erhalten eine grobe historische Skizze, die C ++ in die richtige Perspektive bringt und die Popularität von Höhen und Tiefen abdeckt.

    Arno Schödl. Von Iteratoren zu Bereichen



    Iteratorenpaare sind in der gesamten C ++ - Bibliothek allgegenwärtig. Es ist allgemein anerkannt, dass die Kombination eines solchen Paares zu einer einzigen Einheit, die üblicherweise als Range bezeichnet wird, präziseren und lesbaren Code liefert. Die Definition der genauen Semantik eines solchen Range-Konzepts erweist sich jedoch als überraschend schwierig. Theoretische Überlegungen stehen im Widerspruch zu praktischen. Einige Designziele sind miteinander inkompatibel.

    Jonathan Boccara. 105 STL-Algorithmen in weniger als einer Stunde



    Wir alle wissen, dass wir die STL-Algorithmen kennen sollten. Durch die Einbindung in unsere Designs können wir unseren Code ausdrucksvoller und robuster gestalten. Und manchmal auf spektakuläre Weise.

    Aber kennen Sie Ihre STL-Algorithmen?

    In diesem Vortrag stellt der Autor 105 Algorithmen vor, die derzeit in der STL enthalten sind, einschließlich der in C ++ 11 und C ++ 17 hinzugefügten. Es geht aber nicht nur um eine Auflistung, sondern darum, die verschiedenen Gruppen von Algorithmen, die Muster, die sie in der STL bilden, und die Beziehung zwischen den Algorithmen darzustellen.

    Diese Art von Gesamtbild ist der beste Weg, sich an alle zu erinnern, und stellt eine Toolbox dar, die eine Fülle von Möglichkeiten bietet, um unseren Code ausdrucksvoller und robuster zu machen.

    Viktor Kirilov Interaktive C ++ - Kompilierung (REPL): Der schlanke Weg



    Wollten Sie schon immer einen Wert ändern oder eine Anweisung ausführen, während Ihr C ++ - Programm ausgeführt wird, nur um etwas zu testen - nicht trivial oder mit einem Debugger möglich? Skriptsprachen verfügen über eine REPL (Read-Eval-Print-Schleife). Was C ++ am nächsten hat, ist das Festhalten (entwickelt von Forschern am CERN), aber es ist auf LLVM aufgebaut und ist sehr umständlich einzurichten. RCRL (Read-Compile-Run-Loop) ist ein Demoprojekt, das einen innovativen Ansatz für die Laufzeit-C ++ - Kompilierung auf Plattform- und Compiler-agnostischer Weise darstellt, die einfach eingebettet werden kann. In dieser Präsentation wird gezeigt, wie sie verwendet wird, wie sie funktioniert und wie sie geändert und in jede Anwendung und in jeden Workflow integriert werden kann.

    Victor Ciura. Genug string_view um sich aufzuhängen



    Wäre es nicht schön, wenn wir einen Standard-C ++ - Typ hätten, der Strings darstellt? Oh, warte ... wir machen: std :: string. Wäre es nicht schön, wenn wir diesen Standardtyp in unserer gesamten Anwendung / Projekt verwenden könnten? Nun, wir können nicht! Es sei denn, wir schreiben eine Konsolen-App oder einen Dienst. Wenn wir jedoch eine App mit grafischer Benutzeroberfläche erstellen oder mit modernen Betriebssystem-APIs interagieren, besteht die Chance, dass wir mit mindestens einem anderen nicht standardmäßigen C ++ - String-Typ arbeiten müssen. Abhängig von der Plattform und dem Projekt kann es CString von MFC oder ATL, Platform :: String von WinRT, QString von Qt, wxString von wxWidgets usw. sein. für die C-Familie von APIs…

    So haben wir zwei String-Typen in unserer Codebase erhalten. OK, das ist überschaubar: Wir bleiben bei std :: string für den gesamten plattformunabhängigen Code und konvertieren den anderen XString bei der Interaktion mit System-APIs oder GUI-Code hin und her. Wir werden einige unnötige Kopien machen, wenn wir diese Brücke überqueren, und wir bekommen am Ende einige komische Funktionen, die zwei Arten von Saiten miteinander verbinden. aber das ist Klebercode, oder?

    Es ist ein guter Plan… bis unser Projekt wächst und wir viele String-Dienstprogramme und Algorithmen sammeln. Beschränken wir diese algorithmischen Goodies auf std :: string? Fallen wir auf den gemeinsamen Nenner const char * zurück und verlieren wir die Art / Speicher-Sicherheit unseres C ++ - Typs? Ist C ++ 17 std :: string_view die Antwort auf alle unsere String-Probleme?

    Der Autor versucht, die Optionen gemeinsam mit einer Fallstudie zu einer 15 Jahre alten Windows-Anwendung zu erkunden: Advanced Installer (www.advancedinstaller.com) - ein aktiv entwickeltes C ++ - Projekt, das dank clang-tidy auf C ++ 17 modernisiert wurde und «Clang Power Tools» ( www.clangpowertools.com)

    Andrei Alexandrescu. Erwarten Sie das erwartete



    Das Schreiben von Code, der bei Fehlern belastbar ist, war in allen Sprachen ein schwieriger Punkt. Ausnahmen sind die politisch korrekten Mittel, um Fehler in C ++ zu signalisieren, aber viele Anwendungen greifen aus Gründen der Übersichtlichkeit, der lokalen Fehlerbehandlung und der Effizienz des generierten Codes immer noch auf Fehlercodes zurück.

    Dieser Vortrag zeigt, wie verschiedene theoretische und praktische Artefakte kombiniert werden können, um Fehlercodes und Ausnahmen in einem einfachen, einfachen Paket zu behandeln. Der generische Typ Expected kann sowohl für die lokale (Fehlercode-Art) als auch für die zentralisierte Art (Ausnahmeart) verwendet werden, wobei die Stärken der jeweiligen Art ausgenutzt werden.

    Borislav Stanimirov. DynaMix: Eine neue Sicht auf Polymorphismus



    Software mit sehr komplexer Geschäftslogik, wie z. B. Spiele, CAD-Systeme und Unternehmenssysteme, muss häufig zur Laufzeit Objekte zusammenstellen und modifizieren, z. B. um eine Methode in einem vorhandenen Objekt hinzuzufügen oder zu überschreiben. Standard C ++ hat starre Typen, die zur Kompilierzeit definiert werden und dies schwierig machen. Auf der anderen Seite machen Sprachen mit dynamischen Typen wie Lua, Python und JavaScript dies sehr einfach. Um den Code lesbar und wartbar zu halten und komplexe Geschäftslogikanforderungen zu erfüllen, verwenden viele Projekte solche Sprachen neben C ++. Einige Nachteile dieses Ansatzes umfassen die hinzugefügte Komplexität in einer Sprachverbindungsschicht, den Leistungsverlust durch die Verwendung einer interpretierten Sprache und die unvermeidliche Code-Duplizierung für viele kleine Funktionsfunktionalitäten.

    DynaMix ist eine Bibliothek, die versucht, die Notwendigkeit einer separaten Skriptsprache zu entfernen oder zumindest zu reduzieren, indem Benutzer die Möglichkeit haben, polymorphe Objekte zur Laufzeit in C ++ zu erstellen und zu ändern. In diesem Vortrag wird auf dieses Problem eingegangen. Die Bibliothek und ihre wichtigsten Funktionen werden potenziellen Benutzern oder Personen vorgestellt, die mit einem kommentierten Beispiel und einer kleinen Demo davon profitieren könnten.

    Mikhail Matrosov Vielseitig einsetzbares C ++



    In C ++ können Sie eine einzelne Aufgabe auf verschiedene Weise lösen. Der Autor wählt eine tatsächliche Aufgabe aus der Produktion aus und untersucht, wie diese mit einer Reihe von Werkzeugen gelöst werden kann, die C ++ zur Verfügung stellt: STL-Container, boost.range, C ++ 20-Bereiche, Coroutines. Er vergleicht auch die API-Einschränkungen und die Leistung verschiedener Lösungen und wie diese problemlos konvertiert werden können, wenn der Code gut strukturiert ist. Dabei untersucht der Autor auch Anwendungen einiger nützlicher C ++ 17-Funktionen wie constexpr if, Auswahlanweisungen mit Initialisierer, std :: not_fn usw. Besondere Aufmerksamkeit wird dabei den Standard-Algorithmen gewidmet.

    Alexander Granin. Funktionaler Ansatz für den Transaktionsspeicher von Software



    Parallele Programmierung ist ein sehr vielseitiges und tiefes Thema. Für Dutzende Jahre Forschung wurde eine Vielzahl von Ansätzen, Praktiken und Werkzeugen entwickelt, aber wir können kaum annehmen, dass C ++ mit diesen Trends Schritt hält. Beginnend mit dem C ++ - Standard 11 wurden Konzepte wie std :: thread, std :: atomic, std :: future und std :: mutex eingeführt. In Zukunft wird erwartet, dass Coroutines, ein asynchrones Rechenmodell, hinzugefügt wird. Nun, das sind alles interessante Dinge zu lernen, aber der Vortrag im Bericht wird sich mit einer völlig anderen Idee beschäftigen.

    Software Transactional Memory (STM) - das Konzept eines transaktional variablen Datenmodells - existiert seit langem und hat eine Reihe von Implementierungen für alle Sprachen. Mit Hilfe von STM können Sie Ihr Datenmodell ausdrücken und in mehreren Streams wettbewerbsfähig ändern, ohne dass Sie sich um die Synchronisierung der Streams, den gültigen Status der Daten oder Sperren kümmern müssen. STM wird alles für Sie tun. Das hört sich sehr gut an, aber nicht alle STM-Bibliotheken sind gleichermaßen nützlich. Traditionelle imperative STMs sind sehr komplex, unterliegen nicht trivialen Multithread-Fehlern und sind schwer zu verwenden. Andererseits gibt es in der Welt der funktionalen Programmierung längst das Konzept des kombinatorischen STM, bei dem Transaktionen zusammensetzbare Bausteine ​​sind, aus denen Sie übergeordnete Transaktionen erstellen. Die kombinatorische Herangehensweise an STM ermöglicht es, ein wettbewerbsfähiges Datenmodell flexibler, klarer und zuverlässiger auszudrücken. Parallele Programmierung kann auch Spaß machen!

    In dem Bericht wird der Autor über die Funktionen des kombinatorischen STM, seine Verwendung und seine Implementierung in C ++ 17 sprechen.

    Vadim Vinnik Sammlungsverarbeitung. Einzelne Essenz, mehrere Erscheinungsformen



    Während der gesamten Geschichte der Programmierung war und ist die sequentielle elementweise Verarbeitung verschiedener Arten von Sammlungen eine der häufigsten praktischen Aufgaben. Die interne Darstellung der Sammlungen sowie der zum Abrufen nachfolgender Elemente verwendete Algorithmus kann in einem sehr weiten Bereich variieren: Array, verknüpfte Liste, Baum, Hash-Tabelle, Datei usw. Hinter der Vielfalt von Idiomen, Standard-Bibliotheksfunktionen und Ad-hoc-Lösungen kann man jedoch erkennen, welche Essenz für diese ganze Klasse von Aufgaben unverändert bleibt. In diesem Vortrag soll ein schrittweiser Übergang von Algorithmen, die auf der expliziten Beschreibung von Aktionen über einzelne Elemente basieren, hin zu deklarativen Verarbeitungswerkzeugen auf hoher Ebene erfolgen, die eine Sammlung als Entität behandeln und die Logik der Domäne angemessen offenlegen.

    Dmitry Banshchikov. Gemeinsam genutzte Bibliotheken ohne externe Abhängigkeiten



    Der Autor wird über seine Erfahrungen bei der Entwicklung einer Antivirus-Engine in C ++ als gemeinsam genutzte Bibliothek berichten. Ein Alleinstellungsmerkmal ist das Fehlen externer Abhängigkeiten (Laufzeit C ++ oder C). Diese ganze Gruppe wird mit der benutzerdefinierten Toolchain von GCC für ein spezielles Ziel erstellt, das von libc newlib für dasselbe Ziel verwendet wird, auf dem libstdc ++ basiert. Dementsprechend wird die gemeinsam genutzte Bibliothek durch eine benutzerdefinierte Toolchain mit benutzerdefinierten libgcc_s, libc, libcstdc ++ (Änderungen nur in der Assembly) erstellt. Alle Interaktionen mit der Laufzeit werden über die ABI der gemeinsam genutzten Bibliothek ausgeführt. Innerhalb der Bibliothek ist es daher möglich, ein vollwertiges modernes C ++ ohne Einschränkungen (RTTI, Ausnahmen, Iostream usw.) zu verwenden, das in libstdc ++ libc (newlib) | enthalten ist l ibgcc-abi. Ein ähnlicher Ansatz wurde unter GCC / newlib / libstdc ++ für Linux und clang / newlib / libc ++ für MacOS getestet. Der Bericht kann für diejenigen interessant sein, die C ++ in gemeinsam genutzten Bibliotheken verwenden möchten, sich jedoch aufgrund externer Abhängigkeiten nicht leisten können.

    Ilya Shishkov Wie man die C ++ - Sprache unterrichtet: Die Erfahrung bei der Erstellung von Kursen auf Coursera



    In den letzten eineinhalb Jahren hat der Autor die Spezialisierung für Coursera auf modernes C ++ geleitet. Die Spezialisierung wird aus fünf Kursen bestehen, von denen zwei bereits laufen, und einer ist fast fertig.

    Der Bericht wird zeigen:

    • Welche Probleme können bei der Arbeit an Kursen auftreten (z. B. haben die Entwickler nach 3 Monaten Arbeit alle Materialien weggeworfen und neu begonnen)
    • wie das Kursprogramm gestaltet wird und warum es so ist (zum Beispiel, warum das Wort „Zeiger“ in den ersten beiden Kursen nicht einmal einmal geklungen hat)

    Während der Arbeit an der Spezialisierung wurden außerdem Grundsätze entwickelt, die im Arbeitsalltag anwendbar sind:

    • bei der Integration eines neuen Mitarbeiters in das Projekt
    • während der Codeüberprüfung
    • bei der Einstellung

    Der Autor möchte Ihnen deshalb nicht nur sagen, wie er sich spezialisiert hat, sondern er möchte auch die gesammelten Erfahrungen auf die alltäglichen Aufgaben übertragen.

    Ivan Ponomarev Crash Raps Android NDK



    Es ist kein Geheimnis, dass die C / C ++ - Entwicklung wesentlich höhere Anforderungen an die Qualität des Codes stellt als die Java-Entwicklung. Die Wahrscheinlichkeit eines schwerwiegenden Fehlers ist viel höher. Gleichzeitig ist das Erfassen von Informationen über solche Fehler selbst für erfahrene Programmierer eine nicht unerhebliche Aufgabe.

    Im ersten Teil des Berichts werden die bestehenden Entwicklungen kurz überprüft: Wie funktioniert der integrierte Debugger von Android? Welche Lösungen gibt es bereits? Der zweite Teil widmet sich der Geschichte, wie es „unter der Haube“ funktioniert: wie man den Prozessorstatus zum Zeitpunkt des Fehlers erhält, wie man den Aufrufstapel abwickelt, wie man die Zeilennummern im Quellcode findet. Eine Übersicht über solche Stack-Promotion-Bibliotheken wie libcorkscrew, libunwind, libunwindstack wird gegeben.

    Der Bericht wird sowohl für Android-Entwickler, deren Anwendungen NDK verwendet wird, als auch für alle anderen von Interesse, um ihren Horizont zu erweitern.

    Fedor Short. Erinnerung ist die perfekte Abstraktion



    int * ptr = new int;
    * ptr = 42;
    ptr löschen;

    Was passiert eigentlich, wenn diese 3 Codezeilen ausgeführt werden? Wir werden einen Blick auf den Speicherzuweiser, das Betriebssystem und die moderne Hardware werfen, um eine umfassende Antwort auf diese Frage zu geben.

    Alexei Salmin Tipps und Tricks zum Speichermanagement



    Im Jahr 2017 verliert die Frage der Auswahl eines Zuordners in C ++ nicht an Relevanz. Der Standard wurde um eine neue Methode erweitert, mit der ein lokaler Zuweiser für Container (std :: pmr) ausgewählt werden kann. Die globalen Erweiterungen tcmalloc und jemalloc werden weiterentwickelt, ebenso wie die Kernel-Schnittstellen, auf die sie sich verlassen. Dieser Bericht widmet sich dem „unteren Stockwerk“ dieses Designs: den Features von mmap und madvise im Linux-Kernel und dem Einfluss dieser Features auf die Leistung der Allokatoren.

    Herb Sutter Neu in C ++ 20: Der Raumschiffoperator



    Das neue Raumschiff wurde kürzlich als Sprachfeature für C ++ 20 übernommen. In diesem Vortrag geben der Designer und Autor des Raumschiffvorschlags einen Überblick über das Feature, erörtert seine Motivation und sein Design und geht durch Beispiele für seine Verwendung. Er legt besonderen Wert darauf, wie das Feature C ++ - Code sauberer zum Schreiben und Lesen macht, schneller ist, indem redundante Arbeit vermieden wird, und robuster ist, indem mehrere wichtige, aber subtile Fallstricke in dem spröderen Code vermieden werden, den wir zuvor ohne dieses Feature von Hand schreiben mussten.

    Anastasia Kazakova. Debuggen von C ++ - Code ohne Ausführen und Kompilieren



    Wenn Sie sich Muster, Reflektion, Codegenerierung in der Kompilierungsphase und Metaklassen anschauen, besteht das Gefühl, dass C ++ es sich zur Aufgabe gemacht hat, den endgültigen Code so weit wie möglich vor dem Entwickler zu "verstecken". Eine nicht-triviale Verwendung des Präprozessors (und zahlreicher Zweige) kann die Reihenfolge der Programmaktionen sehr unübersichtlich machen. Natürlich sparen diese Ansätze Entwickler vor endlosem Kopieren und Wiederholen ähnlicher Teile der Codebasis, aber sie benötigen eine erweiterte Unterstützung der Entwicklungstools.

    Ist es möglich, den Code zu debuggen, ohne ihn ständig neu zu starten, ohne einen Debugger und sogar ohne die gesamte Codebase einfach zu kompilieren? Ist es möglich, Fehler im Code zu finden, die nicht auf einem lokalen Computer erstellt oder ausgeführt werden können? Da ist es! Integrierte Entwicklungsumgebungen (IDEs) verfügen über umfassendes Wissen und Verständnis für benutzerdefinierten Code und können die entsprechenden Werkzeuge bereitstellen.

    Dieser Bericht zeigt Ihnen, wie Sie mit Typedef verschachtelte Makrosubstitutionen "debuggen" können, die Variablentypen verstehen (die in modernen C ++ oft "verborgen" sind), verschiedene Zweige des Präprozessors oder Operatorüberlastungen debuggen und vieles mehr mit Hilfe von wirklich intelligent IDE. Einige Funktionen sind bereits in CLion und ReSharper C ++ verfügbar, und andere sind nur interessante Ideen für die Zukunft, die mit dem Publikum diskutiert werden könnten.

    Evgeny Lukyanets. Docker Build mit Conan



    Die C ++ - Projektassembly kann in den Docker-Container verschoben werden. Statt die erforderlichen Bibliotheken und Abhängigkeiten im Hostsystem zu installieren, kann sie entweder direkt im Docker-Image (z. B. Cuda) oder mithilfe des C ++ - Managers der Conan-Bibliothek installiert werden (z. B. Boost). Dies führt zu einer isolierten, kontrollierten (und immer gleichen) Umgebung für die Assembly, in die der Conan-Cache eingefügt werden kann, sodass für verschiedene Projekte, die dieselben Bibliotheken verwenden, dieselben Assemblys verwendet werden. Dadurch entfällt auch die Abhängigkeit der Assembly von der Linux-Distribution, in der das Projekt zusammengestellt ist. Hauptsache, Sie können Docker für diese Distribution ausführen.

    Denis Panin. Praktische Metaprogrammierung: Schreiben einer heterogenen Hashtabelle



    Während des Vortrags werden wir eine kleine Bibliothek für die Arbeit mit std :: tuple schreiben. Mit Hilfe dieser Bibliothek erstellen wir eine heterogene Hashtabelle zur Kompilierzeit. Als nächstes - auf dieser Grundlage - werden wir ein kleines RPC-Framework schreiben, wobei wir die Tatsache verwenden, dass wir keine Typenlöschung haben.

    Es wird eine Menge von Constexpr-Berechnungen, Vorlagen und neuen Funktionen von C ++ 17 geben (insbesondere wenn es sich um Constexpr handelt).

    Dmitry Sokolov. Kodogeneratsiya als Reflexion für die Armen



    Zur Verallgemeinerung der Serialisierungsalgorithmen ist häufig eine Reflexion erforderlich. Implementierung verschiedener Protokolle, Arbeiten mit Datenbanken. Um solche Probleme zu lösen, haben wir den homebrew IDL-Compiler geschrieben, um C ++ - Strukturen und eine Bibliothek für die Interaktion mit dem Ergebnis zu generieren. Protobuf mit Pedalen und ob es sich gelohnt hat.

    Daveed Vandevoorde. Reflektierende Metaprogrammierung in C ++



    Vor einiger Zeit gründete das C ++ - Standardisierungskomitee eine Untergruppe «SG-7», um zu untersuchen, wie der Sprache Reflektionsfunktionen hinzugefügt werden können. In jüngerer Zeit hat diese Gruppe «Metaprogrammierung» hinzugefügt und einige wichtige Entscheidungen bezüglich der Form der möglichen Lösung getroffen. In diesem Vortrag betrachtet der Autor die Vergangenheit, die uns hierher gebracht hat, und untersucht einen möglichen Weg für C ++ 'erstklassige Unterstützung der «reflektierenden Metaprogrammierung».

    Dietmar Kühl. Concept Based Testing



    Da der nächsten Version von C ++ Konzepte hinzugefügt werden, wird erwartet, dass neue Konzepte definiert werden. Jedes Konzept definiert eine Reihe von Operationen, die von generischem Code verwendet werden. Eine solche Verwendung könnte ein generischer Test sein, der überprüft, ob alle Teile eines Konzepts definiert sind, und generische Interaktionen zwischen den Operationen eines Konzepts überprüft. Idealerweise arbeitet ein solcher Test sogar mit Klassen, die nur teilweise ein Konzept modellieren, um die Implementierung von Klassen zu steuern.

    Diese Präsentation verwendet nicht die eigentlichen Konzepterweiterungen, sondern zeigt, wie generische Tests mit den Funktionen von C ++ 17 erstellt werden können. Bei den generischen Tests werden mit dem Erkennungs-Idiom und mit constexpr ermittelt, ob die erforderlichen Operationen verfügbar sind und ob die Operationen ordnungsgemäß ausgeführt werden. Die generischen Tests sollten in der Lage sein, Grundlagen der Klassen zu erarbeiten, die ein Konzept modellieren. Natürlich erfordert ein bestimmtes Verhalten für Klassen immer noch entsprechende Tests.

    Simon Brand. Moderne C ++ - Parallelität von der CPU zur GPU



    Parallele Programmierung kann verwendet werden, um Multi-Core- und heterogene Architekturen zu nutzen und die Leistung von Software erheblich zu steigern. Modernes C ++ hat die parallele Programmierung einfacher und zugänglicher gemacht. Bereitstellung von Abstraktionen auf hoher und niedriger Ebene. In C ++ 17 wird dies durch die Bereitstellung von parallelen Algorithmen auf hohem Niveau weiter ausgeführt. In C ++ 20 wird noch viel mehr erwartet. Dieser Vortrag gibt einen Überblick über die derzeit verfügbaren Parallelitätsdienstprogramme und zeigt, wie GPUs und heterogene Systeme durch neue Standardbibliotheksfunktionen und andere Standards wie SYCL unterstützt werden können.

    Andrey Karpov Effektives C ++ (Myers hat nichts damit zu tun :)



    Die C ++ - Sprache und die dazugehörige Infrastruktur werden ständig weiterentwickelt, sodass diese Sprache derzeit zu den effektivsten Werkzeugen zählt. Ich möchte drei Faktoren hervorheben, die die C ++ - Sprache jetzt so attraktiv machen.

    • Die erste: Neuerungen in der Standardsprache, um effektiven Code schreiben zu können.
    • Zweitens: die Reife der Entwicklungswerkzeuge und die Beschleunigung der Projektmontage.
    • Drittens: ausgereifte Supporttools, mit denen Sie die Qualität des Codes und andere Aspekte des Projektlebenszyklus steuern können.

    Dieser Bericht ist eine Ode an die Programmiersprache C ++!

    Ivan Puzyrevsky. Asynchronität bei der Programmierung



    Im Bereich der Entwicklung von Multithreaded-Anwendungen mit hoher Last oder verteilten Anwendungen kann man häufiger Gespräche über asynchronen Code hören, einschließlich Spekulationen über die Notwendigkeit (keine Notwendigkeit), Asynchronität im Code, Klarheit (Unverständlichkeit) des asynchronen Codes, seine Wirksamkeit (Ineffizienz) zu berücksichtigen. In diesem Bericht werden wir versuchen, tiefer in den Themenbereich einzutauchen: Analyse der Asynchronität; wenn es entsteht; Wie wirkt es sich auf den Code aus, den wir schreiben, und welche Programmiersprache wir verwenden. Wir werden versuchen herauszufinden, worum es in den Zukunftsversprechen und Versprechungen geht, lassen Sie uns ein wenig über die Corutines und Schauspieler sprechen. Lassen Sie uns auf JavaScript und Betriebssysteme eingehen. Der Zweck des Berichts besteht darin, die Kompromisse deutlicher zu machen, die sich aus einem bestimmten Ansatz bei der Entwicklung von Multithread-Software oder verteilter Software ergeben.

    Pavel Bulatov. Umstellung auf WebAssembly: Ist das Spiel die Kerze wert?



    In dem Bericht wird der aktuelle Status von WebAssembly in Bezug auf reale Produkte beschrieben. Wir informieren Sie über unsere Erfahrungen beim Portieren einer Anwendung, welche Probleme aufgetreten sind und wie wir sie gelöst haben.

    Themen werden behandelt:

    • Standardunterstützung für Plattformen und Browser.
    • Leistung und Baugröße im Vergleich zu asm.js.
    • Interaktion mit dem Browser.
    • Bauen Sie mit dem Benutzer kreshy auf.
    • VM-Funktionen.

    Dmitry Kozhevnikov. CMake Fallstricke und wo sie leben



    Das CMake-Build-System entwickelt sich allmählich zum De-facto-Standard für die plattformübergreifende C ++ - Programmierung. Es ist jedoch häufig fairer Kritik unterworfen, unter anderem wegen unpraktischer Skriptsprache, veralteter Dokumentation und der Tatsache, dass dieselben Aufgaben auf unterschiedliche Weise ausgeführt werden können, während es schwer zu verstehen ist, welche in einer bestimmten Situation korrekter ist. . Der Autor wird sagen:

    • häufige populäre Anti-Muster und warum sie schlecht sind
    • auf welchen Abstraktionsebenen arbeitet CMake und wann "fließen" sie,
    • Was ist Modern CMake und was sind die Vorteile?
    • wie Sie Probleme in CMake-Skripts lokalisieren und debuggen können (einschließlich eher exotischer Tools).

    Sergey Shambir Wenn das prozedurale C ++ gut ist



    Die reine Architektur des Projekts, einfache Abstraktionen auf jeder Ebene sind der Traum eines jeden Teams. Um diesen Traum zu übersetzen, wurden viele objektorientierte Techniken erfunden. Da die Entwickler von OOP mitgerissen werden, vergessen sie, die Sauberkeit des Codes an der Kreuzung von C und C ++ zu überwachen. Hier hilft der prozedurale Stil, Ordnung zu schaffen, bequeme und sichere Abstraktionen zu erstellen, die leicht mit dem objektorientierten Code des Projekts kompatibel sind. Wir werden herausfinden:

    • warum es generell notwendig ist, die API in der C-Sprache zu isolieren (wie winapi, POSIX, SQLite, OpenGL, OpenSSL)
    • Warum arbeitet die PLO in dieser Angelegenheit schlecht?
    • Wie schreibt man eine Abstraktionsebene auf die API im C-Stil?
    • wie mit Rückmeldungen, Fehlerbehandlung und Ressourcenverwaltung umzugehen ist, um traditionell komplexen und verwickelten Code auch für Jugendliche verständlich zu machen

    Jewgeni Zuev Semantische API für C ++ - Programme



    Seine beruflichen Interessen sind die Semantik von Programmiersprachen, das Design und die Implementierung von PL-Compilern sowie andere sprachorientierte Werkzeuge. Zu den wichtigsten Errungenschaften zählen die Teilnahme an Projekten wie die Erstellung eines vollständigen Standard-C ++ - Standardcompilers (Interstron, Moskau 2000), die Implementierung des Zonnon-Compilers für .NET (ETH Zürich, 2005), die Implementierung des Swift-Compiler-Prototyps für Tizen ( Samsung Research Institute, Moskau, 2015).

    Ivan Čukić. 2020: Eine void_t-Odyssee



    C ++ hatte schon immer eine mächtige Meta-Programmiersprache, die es Bibliotheksentwicklern ermöglichte, magische Kunststücke wie statische Introspektion auszuführen, um polymorhpische Ausführung ohne Vererbung zu erreichen. Das Problem war, dass die Syntax unpraktisch und unnötig wortreich war, was das Lernen von Meta-Programmierung zu einer entmutigenden Aufgabe machte.

    Mit den jüngsten Verbesserungen des Standards und mit den für C ++ 20 geplanten Funktionen wurde die Meta-Programmierung viel einfacher, und Meta-Programme wurden leichter verständlich und verständlicher.

    In diesem Vortrag stellt der Autor einige moderne Techniken der Meta-Programmierung vor, wobei der Schwerpunkt auf der magischen void_t-Meta-Funktion liegt.

    Evgeny Okhotnikov. C ++ - Schauspieler: Hat es sich gelohnt?



    Der Autor des Berichts ist seit 16 Jahren für die Entwicklung des SObjectizer-Frameworks Open-Source verantwortlich. Es ist eines der wenigen, das plattformübergreifende Actor-Frameworks für C ++ entwickelt und entwickelt. Die Entwicklung von SObjectizer begann im Jahr 2002, als C ++ zu den beliebtesten und am häufigsten verwendeten Programmiersprachen gehörte. Seitdem hat sich C ++ stark verändert, und die Einstellung gegenüber C ++ hat sich noch mehr geändert. In dem Bericht wird diskutiert, wie sich diese Änderungen auf die Entwicklung des Tools mit einer 16-jährigen Geschichte auswirkten und wie einfach und bequem es war, ein solches Tool für die C ++ - Sprache zu erstellen. Und ob es allgemein notwendig war, ein solches Tool für C ++ zu erstellen.

    Rainer Grimm Best Practices für Parallelität in modernem C ++



    Mit der Standardisierung von C ++ 11 haben wir in C ++ eine Multithreading-Bibliothek und ein Speichermodell erhalten. Die Bibliothek enthält die grundlegenden Bausteine ​​wie Atomics, Threads, Tasks, Sperren und Bedingungsvariablen. Das Speichermodell garantiert die Thread-sichere Verwendung dieser grundlegenden Bausteine.

    Sieben Jahre später gibt es viele Best Practices, um Multithreading und das Speichermodell auf sichere Weise anzuwenden. In dem Vortrag des Autors geht es genau um diese Best Practices, um allgemeine Regeln für Parallelität, spezielle Regeln für die Multithreading-Bibliothek und spezielle Regeln für das Speichermodell. Der Schwerpunkt dieser Best Practices liegt weit über C ++ hinaus.

    Alexey Malov Erfahrung mit dem Einsatz von modernem C ++ bei der Entwicklung von Desktop-Anwendungen



    Es werden C ++ - Tools und Boost- und STL-Bibliotheken sowie Architekturansätze für die Erstellung von GUI-Anwendungen behandelt, mit denen wir ein Tool zur Erstellung von Videolektionen entwickelt haben.

    • Die Praxis der Verwendung des Musters Model-View-Presenter
    • Document Lifecycle Management
    • Dateispeicher auf intelligenten Zeigern

    Sergey Vasiliev Statische Analyse: Auf der Suche nach Fehlern ... und Schwachstellen?



    Hier und dort werden regelmäßig Neuigkeiten über die nächste gefundene Schwachstelle angezeigt. Die Sicherheitenverluste von $ sind normalerweise kolossal. Anstatt Schwachstellen zu beheben, sollten Sie sie daher nicht zulassen.

    Eine Möglichkeit, mit Fehlern im Code umzugehen, ist die statische Analyse. Aber wie eignet es sich, um Schwachstellen zu finden? Und gibt es einen großen Unterschied zwischen einfachen Fehlern und Schwachstellen in Bezug auf den Code?

    Wir werden diese Fragen im Verlauf des Berichts diskutieren und gleichzeitig über die Verwendung der statischen Analyse sprechen, um den größtmöglichen Nutzen daraus zu ziehen.

    PS

    Ich möchte Ihre Aufmerksamkeit auf die kleine Intrige um std :: string lenken, die mit den Berichten meines Kollegen Andrei Karpov in Verbindung steht. Also in der Reihenfolge:

    1. Fragment des Andrei-Berichts (C ++ Russia 2016) „Private Stories von Code-Analyzer-Entwicklern“ vom 30:05 - link .
    2. Einfaches Trolling, wie wir es von Anton Polukhin (C ++ Russia 2017) im Bericht "Wie man es nicht macht: C ++ - Radsportbau für Profis" von 2:00 - link .
    3. Andreys Geschichte auf der C ++ Russia 2018 Konferenz, dass wir keine Dinosaurier sind und Neues lernen: "Effective C ++" von 12:21 - link .

    Das ist alles Haben Sie eine nette Bekanntschaft mit den Berichten.

    Jetzt auch beliebt: