Top 10 C ++ CoreHard Herbst 2019 Konferenzbeiträge



CoreHard ist eine C ++ - Konferenz, die zweimal im Jahr im Frühjahr und Herbst in Minsk stattfindet. Seit 2015 haben wir uns von einer kleinen Community von Enthusiasten zu einer großen regionalen Konferenz entwickelt. Wir versuchen, das Wissen anerkannter Meister der C ++ - Welt mit der Entwicklung der lokalen C ++ - Bewegung zu verbinden und aktiv Sprecher lokaler belarussischer, russischer und ukrainischer Unternehmen anzuziehen.

Wir haben es eilig, mit den Khabrowsker Einwohnern die 10 besten frisch gebackenen Videos unserer kürzlich lauten Konferenz zu teilen.

Also los geht's: Die 10 besten Berichte, die von den Zuschauern bewertet wurden.

10. Außergewöhnliches Gedächtnismodell - Alexey Tkachenko


Das Konzept des Speichers in einem Computer geht weit über den Umfang eines Satzes von in einem Computer installierten „eisernen“ dynamischen Speicherchips hinaus. Speicher wird seit langem als ein adressierbarer Bereich angesehen, der vom Speicherverwaltungsmodul (MMU) verwaltet wird. Dieser Ansatz ermöglicht die Unterscheidung zwischen physischem und virtuellem Speicher, der in allen Betriebssystemen aktiv verwendet wird, die das Konzept eines Prozesses als eine Einheit des Ressourcenmanagements verwenden.

In dem Bericht werden einige ungewöhnliche Anwendungen von in der MMU implementierten Schutzmethoden behandelt, nämlich Möglichkeiten, die Interaktion von Hardware mit dem Zentralprozessor über Registerdateien zu simulieren.

Der Bericht behandelt Windows- und Linux-Betriebssysteme sowie verschiedene Architekturen.
Der Bericht ist in erster Linie für Entwickler von eingebetteter (eingebetteter) Software von Interesse. Die im Bericht beschriebenen Techniken sind jedoch für Entwickler von "großen" Computern hilfreich.


Über Sprecher

Seit mehr als 12 Jahren entwickelt Alexey Tkachenko in der Firma Peleng Software für Hardware-Software-Tests und Prüfstandskomplexe von Weltraumtechnologieprodukten. Grundlegende Arbeitswerkzeuge: C ++ für einfache Aufgaben und die Interaktion mit Hardware und C # /. NET für Client-Software. In seiner Freizeit liebt er Embedded auf bescheidenen Mikrocontrollern.



9. C ++ Taxi Tricks - Anton Polukhin


Wenn man große Frameworks schreibt, muss man sich mit typischen Aufgaben befassen, für die Lösungen schon lange bekannt sind. Diese Lösungen sind jedoch nicht effektiv genug und können viel besser durchgeführt werden.

In dem Bericht werden wir über cachefreundliche Pickel sprechen, die Protokollierung von Benutzertypen optimieren, von JSON / XML / YAML auf Benutzertypen konvertieren und andere interessante Techniken.


Über Sprecher

Anton Polukhin ist Russlands Vertreter in ISO bei internationalen Treffen der Arbeitsgruppe für Normung C ++. Der Autor mehrerer angenommener Vorschläge für den C ++ - Sprachstandard. Der Autor der Boost-Bibliotheken TypeIndex, DLL, Stacktrace und Active Maintainer Any, Conversion, LexicalCast, Variant. Er ist der Autor von Boost C ++ Application Development Cookbook und Second Edition.



8. C ++ 20: Die kleinen Dinge - Timur Doumler


C ++ 20 bringt großartige neue Funktionen in die Sprache: Module, Coroutinen, Konzepte, der Raumschiff-Operator und viele neue Bibliotheken. Darüber hinaus bietet C ++ 20 jedoch auch viele kleine Verbesserungen, die C ++ leistungsfähiger und aussagekräftiger machen und gleichzeitig sicherer und ganzheitlicher.

In diesem Bericht befassen wir uns mit kleinen Verbesserungen im Kern der Sprache, die dem Programmierer das Leben erleichtern können: Lambda-Ausdrücke, CTAD, strukturierte Bindungen, Initialisierung und vieles mehr.


Über Sprecher

Timur Doumler ist ein C ++ - Entwickler, der auf Klangverarbeitung und Synthesetechnologie spezialisiert ist, aktives Mitglied des ISO C ++ - Standardisierungsausschusses und Aktivist der # include <C ++> - Community.



7. Streben nach einer möglichst geringen Latenz - Mateusz Pusz


In diesem Bericht werfen wir einen Blick auf die C ++ - Welt in der Domäne mit niedriger Latenz. Dies ist eine Welt, in der dynamische Speicherzuordnungen und Ausnahmen nicht erwünscht sind, in der möglicherweise nicht genügend STL-Container vorhanden sind und die Entwickler häufig gezwungen sind, auf Assembler-Ebene zu wechseln, um sicherzustellen, dass der Code wirklich genau das tut, was optimal benötigt wird.


Über Sprecher

Mateusz Pusz ist Architekt, Ingenieur und Sicherheitsfachmann, Berater, Lehrer und Evangelist für modernes C ++. Mitglied der Arbeitsgruppen WG21 und SG14 des C ++ Standardization Committee.



6. Windbg: Wenn wir nicht spielen - Alexander Golovach


In der Programmierpraxis treten häufig Probleme auf, die vom Entwickler nicht reproduziert und untersucht werden können. In solchen Situationen ist es manchmal sogar unmöglich, den Fernzugriff auf das Gerät zu organisieren. In dem Bericht werden typische Aufgaben wie Abstürze, Ressourcenlecks und Synchronisationsfehler in Multithread-Anwendungen am Beispiel des Windbg-Debuggers erörtert und Tipps zum Debuggen gegeben. Der Bericht ist in erster Linie für unerfahrene Entwickler von Interesse, die mit der Windows-Plattform arbeiten.


Über Sprecher

Alexander Golovach ist ein Windows-Systemprogrammierer und Entwickler von Checkpoint Endpoint Security. Er war an der Entwicklung von Produkten wie Anti Exploit, Anti Ransomware und Endpoint Forensics beteiligt.



5. Wie das LLVM-Backend in C # funktioniert - Egor Bogatov


LLVM enthält eine Vielzahl von Optimierungen und eignet sich als Backend für viele Programmiersprachen. Bei verwalteten Sprachen und JIT-Skripten wird es jedoch etwas komplizierter. In diesem Bericht wird Yegor auf die Schwierigkeiten eingehen, mit denen C # -Entwickler bei der Implementierung des LLVM-Backends konfrontiert sind.


Über Sprecher

Egor Bogatov arbeitet im .NET / Mono-Team von Microsoft, interessiert sich für Mikrooptimierungen und LLVM.



4. Studien zur Pufferung: asynchrone Warnungen, Replikation von Aktualisierungen, Konsolidierung ausstehender Anforderungen - Vadim Vinnik


Das Entwickeln einer bestimmten Anwendung kann zu einer Beschreibung des Problems führen, die sich im reifen Denken als allgemein genug herausstellt, um sie in einer Abstraktion zu isolieren, die möglicherweise für viele verschiedene Anwendungen nützlich ist. Um eine Lösung in eine Form zu bringen, die für den wiederholten Gebrauch geeignet ist, ist im Gegensatz zu einer Lösung, die die Anforderungen einer bestimmten Anwendung erfüllt, zusätzliche mentale Anstrengung erforderlich, um die Variationsaspekte des Problems hervorzuheben und sie mithilfe der Sprache zu modellieren. Der Bericht präsentiert die Erfahrungen bei der Implementierung von drei Abstraktionen, die durch ein gemeinsames Thema vereint sind: die Datenpufferung bei der Multithread-Verarbeitung. Der Gedankengang von der Analyse der Aufgabe bis zur Implementierung mit Hilfe der Sprache C ++ 17 wird gezeigt.


Über Sprecher

Vadim Vinnik ist ein Kandidat der physikalischen und mathematischen Wissenschaften mit 10-jähriger Erfahrung im Programmierunterricht für Studenten, unter anderem an der Taras Shevchenko National University in Kiew. Über 10 Jahre Erfahrung in der industriellen Programmierung (hauptsächlich in C / C ++ / C #) mit Schwerpunkt auf Backup- und Datenwiederherstellungsdomänen. Vadim - Autor der Bücher „Algorithmische Sprachen und Grundlagen der Programmierung: C-Sprache“, „Grundlagen der objektorientierten Programmierung in C ++“; Autor von 29 wissenschaftlichen Publikationen zur Programmiertheorie; Übersetzer aus dem Englischen ins Russische der Bücher „Prinzipien der objektorientierten Programmierung“ (Anton Eliens), „Kombination von Programmiertheorien“ (Charles Hoar, Hee Jifen). Interessengebiete: Programmierung in C ++ und funktionalen Sprachen (Haskell).



3. Statisches SQL in C ++ 14 - Evgeny Zakharov


Der Redner wird über die Entwicklung der ORM-Bibliothek sqlite_orm für SQLite3 in C ++ 14 sprechen und seine Erfahrungen beim Erstellen eines ORMs teilen, mit dem Sie Textabfragen vergessen können und wie es sich mithilfe von Vorlagen an C ++ anpasst.


Über Sprecher

Evgeny Zakharov ist ein C ++ - Spieleentwickler und Autor der Bibliothek sqlite_orm.



2. Metaprogrammierung: Aufbau einer Finite-State-Maschine - Sergey Fedorov


Das Implementieren von Zustandsautomaten von Hand unter Verwendung eines Schaltergehäuses oder einer Vererbung mit virtuellen Funktionen ist sehr zeitaufwendig und fehleranfällig. In dem Bericht spricht der Sprecher über die Bibliothek der Zustandsautomaten AFSM (Another Finite State Machine), mit der Sie eine deklarative Sprache zur Beschreibung des Zustandsautomaten verwenden können. Und auch über kleine Tricks und Tricks der Metaprogrammierung an Beispielen aus dem Code dieser Bibliothek.


Über Sprecher

Sergey Fedorov, ein führender Entwickler bei Yandex.Taxi, entwickelt ein asynchrones Framework für das Taxi-Backend. Ein großer Fan von Metaprogrammierung und Open Source.



1. C ++ schützen - Pavel Filonov


C ++ wird oft mit Nunchakus verglichen: In geschickten Händen ist es ein wirksames Werkzeug, und in den Händen eines Anfängers besteht eine Gefahr für die eigene Gesundheit. Dieser Vergleich ist offensichtlich von der Meinung von C ++ als unsichere Programmiersprache inspiriert. Einige neue Sprachen verwenden diese Meinung sogar für ihre eigene Werbung. Aber welche spezifischen Gefahren stecken hinter dem Begriff „unsicher“? Die detaillierte Antwort wird offensichtlich mehrere Richtungen aufzeigen, von denen eine die Cybersicherheit sein wird. Der Bericht behandelt einfache Beispiele für die Ausnutzung von Sicherheitslücken in C / C ++ - Code: Ausführen von Shell-Code auf dem Stack, Zurückkehren zu libc, Umschreiben von vptr und Heap-Überlauf.

Das Hauptaugenmerk liegt jedoch auf dem Schutz vor solchen Angriffen: ein Kanarienvogel auf dem Stapel, ASLR, unmögliche Bereiche, Tests und Desinfektionsmittel, Fuzzing, SDL-Prozesse.


Über Sprecher

Pavel Filonov war an der Entwicklung von Max Patrol SIEM-Systemen als C ++ - Entwickler und Kaspersky MLAD als Data Scientist beteiligt. Mitglied des Programmkomitees der C ++ Russia Konferenz. Spezialisiert auf CI / ML / Performance-Themen.



Und auch einige Bonusberichte!

Automatisieren Sie es - Kirill Tikhonov


Wir werden den einfachsten Webdienst von Client und Server in C ++ schreiben. Auf diesem C ++ - Teil wird beendet, und das Einrichten der Umgebung und der Infrastruktur wird gehen. Wir sorgen für die Bestimmbarkeit der Montage und des Probelaufs. Erleichtern Sie die spätere Aktualisierung abhängiger Bibliotheken. Wir automatisieren statische Überprüfungen, Codeüberprüfungen und Testläufe. Wir werden die Verfügbarkeit des Dienstes sicherstellen, die Infrastruktur konfigurieren, die Last verteilen und automatische und manuelle Skalierung hinzufügen. Und am Ende werden wir eine kontinuierliche Lieferung einrichten, sodass der Code 5 Minuten nach der Anforderung in Betrieb ist und selbst ungültige Änderungen und Programmierfehler seine Arbeit nicht beeinträchtigen können.


Schreiben Sie immer noch Code mit Ihren Händen? Dann gehen wir zu dir! - Sergey Sadovnikov


In der Welt der C ++ - Entwicklung gibt es viele Aufgaben, bei denen Sie eine große Menge an Code schreiben müssen: Serialisierung, RPC, ORM, Skriptsprachenbindungen usw. Und natürlich gibt es viele Ansätze, die das Schreiben von Code vereinfachen, z. für die serialisierung: schreibe alles mit den händen, setze alles in makros, ziehe von hana angeführte vorlagen hinein, kombiniere eins mit dem anderen. Es gibt jedoch einen Ansatz, der letztendlich alle anderen ersetzen sollte: die Codegenerierung. json, bson, xml, yaml, protobuf - es gibt viele Optionen für Formate, in denen Sie Daten speichern können. Jedes Format hat seine eigenen Bibliotheken und keine. Bibliotheken bieten beharrlich ihre eigene Art der Datenbeschreibung an, und einige bieten eine ganze Infrastruktur, für die Sie sich anpassen und Ihren Code optimieren müssen. Und das ist nicht immer bequem, da man Freiheit will. Ich möchte, dass der Quelltext so wenig wie möglich davon abhängt, wie die Daten serialisiert werden. Und moderne Mittel zur Code-Generierung bieten diese Freiheit. Sie müssen nur wissen, wie man sie richtig einsetzt.


Die C ++ - Katastrophe auf Lebenszeit - Arno Schödl


Rvalue-Links sind in der Sprache seit C ++ 11 vorhanden. Sie wurden eingeführt, um bewegte Objekte effizienter zu gestalten. Zusammen mit solchen Optimierungen bringt diese Innovation eine Menge Nuancen in die Sprache, die jeder Programmierer mit Selbstachtung kennen muss. Tauchen Sie ein in die Welt der Rvalue-Links und schauen Sie sich diese genau an!


C ++ - Ausnahmen durch das Prisma der Compiler-Optimierung - Roman Rusyaev


In der Werft ist das 21. Jahrhundert, die unproduktive Implementierung der C ++ - Ausnahmebehandlung basierend auf setjmp / longjmp ist bereits in der Vergangenheit. Moderne Compiler wie gcc und clang verwenden eine erweiterte Implementierung von C ++ - Ausnahmen, die als kostengünstige Ausnahmebehandlung bezeichnet wird. Aber wie wahr ist diese Nullkosten? Ja, wir zahlen, indem wir die Größe der Binärdatei erhöhen, sowie in dem Fall, in dem die Ausnahme tatsächlich ausgelöst wird, den Stapelabwicklungsprozess starten, Destruktoren für lokale Objekte aufrufen usw. Aber verlieren wir die Leistung, wenn keine Ausnahme ausgelöst wird? Gibt es Einschränkungen für Compiler-Optimierungen? Dieser Bericht beschreibt, wie sich C ++ - Ausnahmen auf Compileroptimierungen auswirken. Welche Optimierungen können nicht angewendet werden, wenn die Funktion Ausnahmen auslösen kann, und welche Optimierungen sind schwieriger anzuwenden. Beispiele für die Implementierung von Ausnahmen und Compiler-Optimierungen werden auf Basis von LLVM betrachtet. Der Bericht soll den Menschen ein Verständnis dafür vermitteln, wann es sinnvoll ist, Ihre Anwendung mit -fno-exceptions zu erstellen und wann Sie alle Vorzüge der Verwendung von C ++ - Exceptions genießen können, wenn Sie wissen, dass ihr Code im Vergleich zu Code, in dem Exceptions deaktiviert sind, nicht wesentlich an Leistung verloren hat.


Generatoren, Coroutinen und andere Hirnrollsüße - Adi Shavit


C ++ 20 brachte uns die Coroutinen und damit die Fähigkeit, Generatoren, iterierbare Typen und Bereiche zu schreiben. Wir werden sehen, wie Koroutinen dazu beitragen, saubereren, besser lesbaren Code mit leichteren Abstraktionen und Verallgemeinerungen zu schreiben.


Wie man nicht an einem großen alten Projekt erstickt - Yuri Minaev


Die Welt hat sich verändert. Was vorher funktionierte, hörte nicht auf zu arbeiten, aber es wurde unzureichend. Paarprogrammierung, Codeüberprüfungen und Komponententests sind immer noch wichtig und erforderlich, können jedoch nicht mehr die Qualität und Zuverlässigkeit von C ++ - Projekten gewährleisten. Viele Projekte sind hunderte Male gewachsen. Das Wachstum verlief schrittweise und nicht jeder verstand, was passiert war. Jedes große alte Projekt besteht aus heterogenen Schichten (geologischen Ablagerungen) und vor allem weiß noch niemand, wie das alles funktioniert. Es ist an der Zeit, Tools und Methoden zur Aufrechterhaltung der Qualität und Integrität des Codes zu entwickeln: DevSecOps, statische Analyse, dynamische Analyse, Qualitätsmessplattformen.


Wie man hilft und wie man den Compiler verhindert - Andrey Oleinikov


In der Regel können Sie sich darauf verlassen, dass der Compiler die resultierende Binärdatei so optimiert, dass sie so schnell wie möglich funktioniert. Der Compiler weiß jedoch nicht, auf welchen Daten und auf welcher Hardware das Programm gestartet wird. Außerdem möchte ich, dass die Zusammenstellung eine akzeptable Zeitspanne in Anspruch nimmt. Aus diesem Grund ist das Ergebnis möglicherweise nicht optimal. Ich empfehle, Beispiele für LLVM zu verwenden, um zu sehen, wie Sie dem Compiler mitteilen können, wie das Programm optimiert und das Ergebnis verbessert oder verschlechtert werden kann.


Die nächste CoreHard (C ++ CoreHard Spring 2020 Conference) ist auf dem Weg und findet vom 10. bis 11. April 2020 in Minsk statt. Tickets und das vollständige Programm finden Sie auf der offiziellen Website.

Und Sie können hier einen Bericht einreichen (Life Hack: Der Sprecher kann das Ticket nicht bezahlen!)

Source: https://habr.com/ru/post/de483508/


All Articles