В докладе посмотрим на старые проверенные контейнеры из С++03, на новые из С++11/14, обсудим, какими контейнерами когда и зачем стоит пользоваться. Вместе с контейнерами взглянем на их окружение – алгоритмы и итераторы
National Customer Service Week Presidential ProclamationNoreen Seebacher
National Customer Service Week, which runs the first week of October, was established by the International Customer Service Association in 1984 and proclaimed a national event by the US Congress in 1992.
No one likes the idea of being pigeonholed by others. Pigeonholing yourself, on the other hand, is one of the best things you can do for your business. Follow along as Jonathan teaches attendees how to create a laser-focused positioning statement and how to use that statement to attract better clients, close more deals, and ultimately make more money.
Не всегда задачи решаются в терминах языка программирования. И когда дело доходит до реализации, иногда "волосы становятся дыбом" от мысли, как это придется делать на конкретном языке. В данном докладе автор "изольет душу" на тему идиом в языках программирования, чем они отличаются от паттернов проектирования, рассмотрит преимущества и недостатки их использования, а также подробно рассмотрит несколько наиболее популярных идиом для C++.
National Customer Service Week Presidential ProclamationNoreen Seebacher
National Customer Service Week, which runs the first week of October, was established by the International Customer Service Association in 1984 and proclaimed a national event by the US Congress in 1992.
No one likes the idea of being pigeonholed by others. Pigeonholing yourself, on the other hand, is one of the best things you can do for your business. Follow along as Jonathan teaches attendees how to create a laser-focused positioning statement and how to use that statement to attract better clients, close more deals, and ultimately make more money.
Не всегда задачи решаются в терминах языка программирования. И когда дело доходит до реализации, иногда "волосы становятся дыбом" от мысли, как это придется делать на конкретном языке. В данном докладе автор "изольет душу" на тему идиом в языках программирования, чем они отличаются от паттернов проектирования, рассмотрит преимущества и недостатки их использования, а также подробно рассмотрит несколько наиболее популярных идиом для C++.
В докладе рассказывается о грядущих мажорных изменениях языка, которые, вероятно, не войдут в Стандарт 17-го года, оставшись в Technical Specifications, но будут ждать своего мержа в следующий (C++20 или С++19), будучи уже реализованными в некоторых компиляторах. Осветятся также минорные, уже одобренные фичи следующего Стандарта, как языковые, так и библиотечные. Антон расскажет об их целях, покажет методы использования, а также осветит некоторые гайдлайны и трики.
Тестирование графического интерфейса пользователя является одним из основных видов тестирования графических приложений. В докладе будут рассмотрены задачи и особенности такого тестирования.
Далее будут рассмотрены плюсы и минусы использования стандартной Qt библиотеки QTest, и представлен проект QSpec, как альтернатива QTest. Также будут представлены примеры использования QSpec и дальнейшие планы по развитию этого проекта.
Адрес проекта: https://github.com/ugeneunipro/QSpec
Модели памяти в С++ – Ordnung muss sein. Почему неправильно приготовленный поток может завершить приложение, и как этого избежать – рецепты от потоковедов. Как договариваться о совместном использовании ресурсов, и как избежать сторонних эффектов и подводных камней этих договоренностей. Обзор инструментария для изготовления многопоточных приложений.
Использование GMock для обеспечения спокойной и сытой жизни разработчика. Обзор как верхушки так и некоторых подводных частей GMock. Разбор возможностей фреймворка на примерах.
Gor Nishanov, C++ Coroutines – a negative overhead abstractionSergey Platonov
C++ coroutines are one of the few major features that may land in C++17. We will look at the current standardization status, available experimental implementations and develop a small coroutine adapter over raw C networking APIs that will beat hand-crafted state machine in performance.
Daden Emerging Technology Seminars - Daden Limited is a Virtual Worlds and artificial intelligence solution provider.
Our focus is on using virtual worlds, and virtual personalities to deliver more efficient and effective enterprise systems, saving our clients money, time and carbon, and delivering better understanding and collaboration.
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
Антон Потапов, Intel
Стандартная библиотека С++ содержит набор наиболее распространённых контейнеров для организации данных. С++11 предоставляет минимальные гарантии безопасности работы с контейнерами в многопоточной среде, но зачастую этого недостаточно для эффективного их использования в параллельных программах. В докладе речь пойдёт о современных подходах к реализации эффективных «конкурентных» контейнеров, а также основных возникающих при этом проблемах и способах их решения.
В докладе рассказывается о грядущих мажорных изменениях языка, которые, вероятно, не войдут в Стандарт 17-го года, оставшись в Technical Specifications, но будут ждать своего мержа в следующий (C++20 или С++19), будучи уже реализованными в некоторых компиляторах. Осветятся также минорные, уже одобренные фичи следующего Стандарта, как языковые, так и библиотечные. Антон расскажет об их целях, покажет методы использования, а также осветит некоторые гайдлайны и трики.
Тестирование графического интерфейса пользователя является одним из основных видов тестирования графических приложений. В докладе будут рассмотрены задачи и особенности такого тестирования.
Далее будут рассмотрены плюсы и минусы использования стандартной Qt библиотеки QTest, и представлен проект QSpec, как альтернатива QTest. Также будут представлены примеры использования QSpec и дальнейшие планы по развитию этого проекта.
Адрес проекта: https://github.com/ugeneunipro/QSpec
Модели памяти в С++ – Ordnung muss sein. Почему неправильно приготовленный поток может завершить приложение, и как этого избежать – рецепты от потоковедов. Как договариваться о совместном использовании ресурсов, и как избежать сторонних эффектов и подводных камней этих договоренностей. Обзор инструментария для изготовления многопоточных приложений.
Использование GMock для обеспечения спокойной и сытой жизни разработчика. Обзор как верхушки так и некоторых подводных частей GMock. Разбор возможностей фреймворка на примерах.
Gor Nishanov, C++ Coroutines – a negative overhead abstractionSergey Platonov
C++ coroutines are one of the few major features that may land in C++17. We will look at the current standardization status, available experimental implementations and develop a small coroutine adapter over raw C networking APIs that will beat hand-crafted state machine in performance.
Daden Emerging Technology Seminars - Daden Limited is a Virtual Worlds and artificial intelligence solution provider.
Our focus is on using virtual worlds, and virtual personalities to deliver more efficient and effective enterprise systems, saving our clients money, time and carbon, and delivering better understanding and collaboration.
Антон Потапов — С++ контейнеры и многопоточность: вместе или врозь?Yandex
Антон Потапов, Intel
Стандартная библиотека С++ содержит набор наиболее распространённых контейнеров для организации данных. С++11 предоставляет минимальные гарантии безопасности работы с контейнерами в многопоточной среде, но зачастую этого недостаточно для эффективного их использования в параллельных программах. В докладе речь пойдёт о современных подходах к реализации эффективных «конкурентных» контейнеров, а также основных возникающих при этом проблемах и способах их решения.
Метапрограммирование в C++11/14 и C++17. Новые инструменты - новые проблемы.Roman Orlov
В докладе будут затронуты принципиальные вопросы — зачем нам программировать на шаблонах, как мы это делаем в C++11/14 и как будем это делать в C++17. Проведем параллель с функциональными языками (привет Haskell!). На примере реального кода разберем fold-expressions и увидим, чем опасен constexpr-if. А также взглянем на метапрограммирование в стиле C++11/14 и C++17 глазами компилятора.
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"Yandex
В докладе пойдёт речь о методе сериализации произвольных данных, который применяется в Яндексе. Этот метод основан на отображаемых в память (mmapped) файлах и не требует операции декодирования. Мы рассмотрим его преимущества и недостатки, поговорим об общих принципах такой сериализации и об устройстве отображаемых аналогов стандартных контейнеров.
Мы уже около 3-х лет используем HandlerSocket в нашей инфраструктуре сайта badoo.com. За это время мы накопили опыт решения характерных для Handlersocket проблем, появляющихся при использовании.
Несколько команд внутри Баду активно используют HS для решения разноплановых задач мобильных и настольных приложений Баду. Где-то мы используем HS как замену Memcached, где-то как простой поисковый механизм, где-то как хранилище типа ключ-значение. Наш HS-кластер содержит более 30 серверов, обрабатывая порядка 8000 запросов/сек.
Я также предоставлю написанный мной код библиотеки-клиента для Handlersocket на PHP.
Про что доклад:
* что это вообще такое;
* чем является HS и чем не является;
* внутреннее устройство и работа HS;
* протокол;
* примеры использования в Баду, с цифрами и графиками;
* особенности: шардирование, Percona Server, постоянные соединения (бенефиты, проблемы и их решения), tips & tricks;
полезные сслыки, ответы на FAQ.
Доклад рассчитан на highload-разработчиков, работающих с реляционными БД.
Сложность: выше среднего.
C++ CoreHard Autumn 2018. Создание пакетов для открытых библиотек через conan...corehard_by
Использование сторонних библиотек в языке C++ никогда не было простым - необходимо было правильно собрать их, имея дело с различными системами сборки, но с появлением пакетного менеджера conan.io процесс стал намного проще, так что теперь осталось только сделать пакеты для нужным библиотек, и в этом поможет команда bincrafter-ов.
C++ CoreHard Autumn 2018. Actors vs CSP vs Tasks vs ... - Евгений Охотниковcorehard_by
На предыдущих конференциях C++ CoreHard автор доклада рассказывал про Модель Акторов и опыт ее использования в C++. Но Модель Акторов -- это далеко не единственный способ борьбы со сложностью при работе с многопоточностью. Давайте попробуем поговорить о том, что еще можно применить и как это может выглядеть в C++.
C++ CoreHard Autumn 2018. Знай свое "железо": иерархия памяти - Александр Титовcorehard_by
Если вам важна скорость работы ваших программ, то вы обязаны понимать, как работает ваше "железо". Современный процессор -- это сложное устройство, многие механизмы которого могут неочевидным образом влиять на скорость исполнения вашего кода. В докладе дается обзорное представление основных структур современного процессора и подробно рассматривается работа иерархии памяти. Будут освещены следующие темы: организация кэш-памяти, принцип локальности, предподкачка данных, нежелательное общее владение данными, а также программные техники для эффективной работы с памятью.
C++ CoreHard Autumn 2018. Информационная безопасность и разработка ПО - Евген...corehard_by
Информационная безопасность все больше из отдельной сферы плавно перетекает в разработку ПО. А значит «обычным» программистам приходится понимать те требования и терминологию, которые специалисты по безопасности уже давно знают и используют. CWE, CERT, MISRA, SAST– для «обычных» программистов это непонятные аббревиатуры. Поэтому в обзорном докладе мы попробуем рассказать простым языком об этих понятиях так, чтобы все разработчики начали уверенно ориентироваться в этой теме.
C++ CoreHard Autumn 2018. Заглядываем под капот «Поясов по C++» - Илья Шишковcorehard_by
Вот уже более двух лет мы создаём онлайн-специализацию по С++ на платформе Coursera. Её цель — обучить языку C++ с нуля до уровня, достаточного для решения практических задач, с которыми приходилось сталкиваться авторам в своей практике. В своём докладе я расскажу, как мы создаём наши онлайн-курсы, и уделю особое внимание техническим проблемам, которые нам пришлось решить в процессе создания автоматической системы проверки программ студентов.
C++ CoreHard Autumn 2018. Ускорение сборки C++ проектов, способы и последстви...corehard_by
В докладе обсуждаются способы улучшения времени сборки C++ проектов, опыт полученный в ходе ускорения сборки клиента и тулов World Of Tanks. Также описывается эффект, который они оказывают на организацию кодобазы (как позитивный, так и негативный) и затраты, которые необходимы для поддержки этих решений, т.к. не все они бесплатны. Методики, описываемые в докладе: ускорение линковки (Incremental Linking, Fastlink), ускорение компиляции(Include what you use, использование precompiled headers).
C++ CoreHard Autumn 2018. Метаклассы: воплощаем мечты в реальность - Сергей С...corehard_by
Доклад посвящён вопросам реализации пропозала Герба Саттера PR0707 (метаклассы в С++) за пределами компилятор - в виде отдельной утилиты. Будет продемонстрированы варианты использования метаклассов в реальной жизни, затронуты вопросы их реализации на базе Clang Frontend, а также возможные перспективы развития технологии и методики.
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
C++ CoreHard Autumn 2018. Кодогенерация C++ кроссплатформенно. Продолжение - ...corehard_by
В докладе будет рассмотрена генерация кода при компиляции различных языковых конструкций, как простых, так и сложных, на различных платформах, как общераспространённых x86/x64, так и тех, которым уделяется меньше внимания: ARM, AVR. Также будут встречаться примеры для совсем экзотических процессоров вроде PowerPC и даже MicroBlaze. Основной упор будет делаться не на обработку данных, а именно на сопоставление различных конструкций кода с инструкциями целевых платформ.
C++ CoreHard Autumn 2018. Concurrency and Parallelism in C++17 and C++20/23 -...corehard_by
What do threads, atomic variables, mutexes, and conditional variables have in common? They are the basic building blocks of any concurrent application in C++, which are even for the experienced C++ programmers a big challenge. This massively changed with C++17 and change even more with C++20/23. What did we get with C++17, what can we hope for with C++20/23? With C++17, most of the standard template library algorithms are available in sequential, parallel, and vectorised variants. With the upcoming standards, we can look forward to executors, transactional memory, significantly improved futures and coroutines. To make it short. These are just the highlights from the concurrent and parallel perspective. Thus there is the hope that in the future C++ abstractions such as executors, transactional memory, futures and coroutines are used and that threads, atomic variables, mutexes and condition variables are just implementation details.
C++ CoreHard Autumn 2018. Обработка списков на C++ в функциональном стиле - В...corehard_by
Язык C++, претерпев долгую эволюцию, обрёл ряд черт, характерных для функциональной парадигмы: функции стали полноправными объектами, над которыми могут выполняться операции, а аппарат шаблонов позволяет проводить вычисления на типах на этапе компиляции. Математический фундамент этих двух главных аспектов составляют, соответственно, ламбда-исчисление и теория категорий. Расширение языка этими средствами способствовало реализации на языке C++ ряда инструментов, известных из функционального программирования. Некоторые из этих реализаций вошли в стандартную библиотеку (std::function, std::bind), другие - в сторонние библиотеки, в том числе в коллекцию библиотек Boost (functional, hana). Важную роль в арсенале функционального программирования играют операции свёртки и развёртки, которые очевиднее всего определяются для списков, но также естественным образом обобщаются на другие индуктивные и коиндуктивные структуры данных. Например, суммирование списка чисел можно представить себе как свёртку списка по операции сложения, а построение списка простых множителей заданного целого числа - как развёртку. Обобщения свёртки и развёртки известны как анаморфизмы и катаморфизмы. Также в функциональном программировании находит применение понятие гиломорфизма - композиция развёртки некоторого объекта в коллекцию с последующей свёрткой её в новый объект. В докладе продемонстрировано, что свёртки, развёртки и их композиции допускают довольно простую реализацию на языке C++.
C++ Corehard Autumn 2018. Обучаем на Python, применяем на C++ - Павел Филоновcorehard_by
Доклад посвящен часто используемому шаблону в моих проектах по анализу данных, когда обучение и настройка моделей происходят с использованием python, а вот их запуск в промышленное использование на языке C++. Предлагается рассмотреть несколько учебных примеров реализации такого подхода, от простой линейной регрессии до обработки изображений с помощью нейронных сетей.
C++ CoreHard Autumn 2018. Asynchronous programming with ranges - Ivan Čukićcorehard_by
This talk will be about the design and implementation of a reactive programming model inspired by ranges that allows easy implementation of asynchronous and distributed software systems by writing code that looks like a sequence of ordinary range transformations like filter, transform, etc. This programming model will be demonstrated along with the implementation of a simple asynchronous web service where the whole system logic is defined as a chain of range transformations.
C++ CoreHard Autumn 2018. Debug C++ Without Running - Anastasia Kazakovacorehard_by
Macros, templates, compile-time evaluation and code generation, reflection and metaclasses – C++ tends to hide the final code passed to the compiler under the tons of various names and aliases. Add here the preprocessor that shadows the actual running curve of your program with dozens of alternatives mixed in a non-trivial way. While this allows to avoid boilerplate code and reduce copy-paste and other errors, such an approach demands better tooling support to make the debugging process easier. To find an error in such a code, one has to continuously read-fix-run it and compare the results with some etalon, or to debug in order to find actual substitutions. But should you really wait until your code is run or even compiled to debug it? Or how to deal with the situations when the code can’t be run on the local machine? A text editor with code completion won’t help, while a smart IDE that “gets” your code can do a better job. In this talk we’ll see interesting approaches to solving cases like macro and typedef ‘debug’, understanding types when auto/decltype hide them, dealing with different code branches depending on the preprocessor’s pass-through, and other ideas. Some suggestions are already implemented as ready-to-use features in CLion and ReSharper C++, tools for C++ from JetBrains (that means I can show it in action), others are planned for the future. The aim of this talk is to share the workflows supported by the tools that can help C++ developers create better modern C++ code.
C++ CoreHard Autumn 2018. Полезный constexpr - Антон Полухинcorehard_by
В C++11 добавили новое ключевое слово - constexpr. Выглядит оно весьма невзрачно, да и на первый взгляд кажется, что смысла в нём маловато... Для чего же оно нужно, какие у него есть тайные супер способности и какую роль оно сыграет в дальнейшем развитии языка C++ - обо всём об этом мы и поговорим.
C++ CoreHard Autumn 2018. Text Formatting For a Future Range-Based Standard L...corehard_by
Text formatting has been a favorite problem of C++ library authors for a long time. The standard C++ iostreams have been criticized for being difficult to use due to their statefulness and slow due to runtime polymorphism. Despite its age, printf is still popular because of simplicity and speed. The Boost library offers two more alternatives, Boost.Format and Boost.LexicalCast. And finally, the P0645 standard proposal sponsored by Facebook is currently finding its way through the C++ committee. All these approaches are still firmly based on standard containers and iterators. But the Standard Library is changing radically with the advent of ranges, range adaptors and functional style programming in C++. Generating optimized code with metaprogramming is becoming standard fare. In this talk, I want to convince you that the combination of ranges with a bit of metaprogramming makes for a very elegant solution to the text formatting problem. We introduce a form of ranges with internal iteration, which are generating their elements one by one rather than exposing external iterators. We can use these generator ranges to represent the values to be formatted, conceptually turning them into lazily evaluated strings. These can be used just like regular strings are used today: in function returns; as standard algorithm input; embedded into other, equally lazily evaluated strings; and so on, before they are finally expanded for display. By choosing the right interfaces, we can optimize this expansion at compile-time, making it no less pretty to write, but more efficient to expand than any text formatting approaches that rely on format strings that must be parsed at runtime. I believe that this approach is the natural extension of a range-based future standard library to text formatting.
Исключительная модель памяти. Алексей Ткаченко ➠ CoreHard Autumn 2019corehard_by
Память в компьютере - это не только гигабайты оперативной памяти в слоте, но и занятная абстракция. В докладе мы рассмотрим, как можно эту абстракцию использовать необычным образом для моделирования других абстракций - регистровых файлов периферийных устройств. Доклад будет полезен не только embedded-разработчикам, но и, возможно, заставит переосмыслить свой взгляд на память.
Как помочь и как помешать компилятору. Андрей Олейников ➠ CoreHard Autumn 2019corehard_by
Как правило, можно положиться на то, что компилятор оптимизирует результирующий бинарный файл так, чтобы она работала максимально быстро. Но компилятор не знает на каких данных и на каком железе программа будет запущена. Плюс хотелось бы, чтобы компиляция занимала приемлемое время. Из-за этого результат может оказаться субоптимальным. Предлагаю на примерах для LLVM посмотреть как можно подсказать компилятору как оптимизировать программу и сделать результат лучше или хуже.
Мы напишем простейший веб-сервис из клиента и сервера на C++. На этом C++ часть закончится, и пойдет настройка окружения и инфраструктуры. Мы обеспечим детерминируемость сборки и прогона тестов. Облегчим последующее обновление зависимых библиотек. Автоматизируем статические проверки, верификацию кода, прогон тестов. Обеспечим доступность сервиса, настроим инфраструктуру, сбалансируем нагрузку, добавим автоматическое и ручное масштабирование. И под конец мы настроим continious delivery таким образом, что код будет на продакшене через 5 минут после реквеста, при этом даже невалидные изменения и ошибки программиста не смогут повлиять на его работу.
2. Хитрости STL контейнеров
Знакомимся?
Максим, старший инженер-разработчик в компании EPAM
Systems.
В настоящее время участвую в разработке системы
иерархического хранения и репликации данных.
6. Хитрости STL контейнеров
Последовательные контейнеры
● template<class T, class Allocator = std::allocator<T>>
class vector;
● template<class T, class Allocator = std::allocator<T>>
class list;
● template<class T, class Allocator = std::allocator<T>>
class forward_list;
● template<class T, class Allocator = std::allocator<T>>
class deque;
7. Хитрости STL контейнеров
Упорядоченые ассоциативные контейнеры
● template<class Key, class Compare, class Allocator> class set;
● template<class Key, class Compare, class Allocator> class
multi_set;
● template<class Key, class T, class Compare, class Allocator>
class map;
● template<class Key, class T, class Compare, class Allocator>
class multi_map;
8. Хитрости STL контейнеров
Неупорядоченые ассоциативные контейнеры
● template<class Key, class Hash, class KeyEqual, class Allocator>
class unordered_set;
● template<class Key, class Compare, class Allocator> class
unordered_multiset;
● template<class Key, class T, class Hash, class KeyEqual,
class Allocator> class unordered_map;
● template<class Key, class T, class Hash, class KeyEqual,
class Allocator> class unordered_multimap;
9. Хитрости STL контейнеров
Адаптеры контейнеров
● template<class T, class Container> class stack;
● template<class T, class Container> class queue;
● template<class T, class Container, class Compare>
class priority_queue;
10. Хитрости STL контейнеров
Почти контейнеры
● template<class T, std::size_t N> struct array;
● T[N]
● template<class C, class Traits, class Allocator> class
basic_string;
● string, wstring, u16string, u32string
● vector<bool>
● template<std::size_t N> bitset;
20. Хитрости STL контейнеров
remove, remove_if, unique
не изменяют размер последовательности
new_end = remove_if(c.begin(), c.end(), pred);
c.erase(new_end, c.end());
21. Хитрости STL контейнеров
Советы
● не полагаться на оценки - измерять
● выбирать контейнер исходя из операций
● для ассоциативных - unordered_*, если не нужен порядок
● по умолчанию использовать вектор
● …
● PROFIT!