Со времён С++98 стандартные контейнеры и идиома RAII позволяли избегать использования оператора delete, что делало код более безопасным. С приходом С++11 и умных указателей отпала необходимость использовать оператор new, что позволило практически полностью переложить управление памятью на плечи компилятора. В докладе объясняется идеология управления памятью и ресурсами в современном С++.
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
Предлагаемый подход позволяет без труда получить параллельную асинхронную обработку данных без явного использования средств синхронизации, по максимуму задействуя доступные вычислительные ресурсы. Использование сопрограмм значительно упрощает написание многопоточного кода. Это дает возможность сконцентрироваться непосредственно на задаче обработки данных, не занимаясь вопросами синхронизации различных операций, включая асинхронную работу с сетью.
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
За время работы над проектом был разработан удобный фреймворк для написания асинхронного кода. В докладе будет рассмотрено то, как он устроен и как со временем эволюционировал. Разберемся, как с помощью наших примитивов решать проблемы, часто встречающиеся в асинхронном программирование; будут примеры удачного и неудачного использования. Отдельно остановимся на сравнении получившихся средств с тем, что было добавлено в С++11.
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Григорий Демченко, “Асинхронность и сопрограммы: обработка данных“Platonov Sergey
Предлагаемый подход позволяет без труда получить параллельную асинхронную обработку данных без явного использования средств синхронизации, по максимуму задействуя доступные вычислительные ресурсы. Использование сопрограмм значительно упрощает написание многопоточного кода. Это дает возможность сконцентрироваться непосредственно на задаче обработки данных, не занимаясь вопросами синхронизации различных операций, включая асинхронную работу с сетью.
Павел Сушин «Асинхронное программирование на С++: callbacks, futures, fibers»Platonov Sergey
За время работы над проектом был разработан удобный фреймворк для написания асинхронного кода. В докладе будет рассмотрено то, как он устроен и как со временем эволюционировал. Разберемся, как с помощью наших примитивов решать проблемы, часто встречающиеся в асинхронном программирование; будут примеры удачного и неудачного использования. Отдельно остановимся на сравнении получившихся средств с тем, что было добавлено в С++11.
Обобщенное программирование в C++ или как сделать свою жизнь проще через стра...corehard_by
Обобщенное программирование - это подход к программированию, когда алгоритм пишется без указания конкретных типов данных. Используя данный подход можно значительно увеличить количество повторно используемого кода. В C++ данный подход реализуется за счет механизма шаблонов. В данном докладе рассмотрим некоторые возможности по обобщенному программированию, которые предоставляет C++. На конкретных примерах рассмотрим, как они могут упростить нам жизнь и с какими трудностями приходится сталкиваться при их использовании.
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
Дмитрий Прокопцев, Яндекс
Речь пойдёт о, наверное, одном из самых важных и в то же время сложных нововведений в С++11 — R-ссылках (rvalue references). Мы рассмотрим базовые правила работы с такими ссылками и связанные с ними новые концепции языка: перемещение классов, универсальные ссылки и перенаправление вызовов.
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Догнать и перегнать boost::lexical_castRoman Orlov
Разбор нестандартной реализации преобразования целого числа в строку без использования циклов и рекурсивных вызовов времени исполнения - только рекурсия на этапе компиляции
ЛЕКЦИЯ 4. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
Лекция для студентов АлтГТУ, проведенная 04.03.2015. В ходе лекции рассматривались следующие ключевые моменты:
1) Lambda project
2) Steam API
3) Date API
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Лекция для сотрудников фирмы Soft-logic, проведенная 13.11.2014. В ходе лекции рассматривались следующие ключевые моменты:
1. Назначение lambda-выражений
2. Синтаксис lambda-выражений
3. Функциональные интерфейсы
4. Default и статические методы в интерфейсах
5. Ссылки на методы
6. Область действия переменных
7. Трансляция lambda-выражений
8. Сериализация lambda-выражений
ЛЕКЦИЯ 7. Многопоточное программирование без блокировок. Модель потребитель-производитель. Потокобезопасный стек: проблема ABA, указатели опасности, сборщики мусора, счётчик ссылок, применение модели памяти С++.
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
GoITeens: Дети, которые изменят мир. Как воспитать будущих IT гениев?GoIT
24.05.15 в уютном офисе Digital Future прошла по-семейному тёплая встреча от проекта GoITeens. На ней родители получили ответы на актуальные вопросы:
+ Стоит ли воспитывать в ребёнке ITшника и к чему это приведёт?
+ Почему Soft skills важно развивать с раннего возраста и как это делать?
+ Как мотивировать ребенка учиться с удовольствием?
+ Чему обучает образовательный центр GоITeens?
+ Как организован наш процесс обучения?
Помогли разобраться в этих несложных вопросах наши спикеры:
1. Нана Коренева — автор проекта GoITeens. Основатель robotics.GE — детского/юношеского развивающего центра в Тбилиси, обучающего робототехнике и программированию.
2. Дмитрий Шоломко — генеральный директор Google Ukraine с 9-ти летним опытом работы на этой позиции. До этого руководил собственной консалтинговой компанией, специализирующейся на информационной и консультационной поддержке крупнейших украинских компаний, работающих в сферах IT и телекоммуникаций.
3. Андрей Светлов — украинец, создающий самый популярный язык программирования — Python (знаком с Python уже 15 лет). Начал программировать в 12 лет. Имеет опыт работы в компаниях SoftLine и LevelUP. Три года проработал в США на HedgeServ, после чего вернулся в Украину. Считает свою работу самым увлекательным занятием.
4. Владимир Шиманский — создатель hackerspace в GlobalLogic, разработчик украинского продукта Blynk. Имеет многократный опыт коучинга и преподавания программирования. Преподаватель и заведующий учебной частью в GoITeens. Отлично ладит с детьми :)
4.Иван Пасечник — со-основатель и СЕО Ecois.me. Один из основателей Киевского хакерспейса. Разработчик первого в Украине 3D принтера. Имеет более 5 лет опыта в работы в производстве.
Родители б�
Доклад о дизайне кода в функциональном стиле на C++, представленный вниманию плюсовиков на C++ User Group Novosibirsk 2014.
В качестве демонстрационного проекта была реализована игра "Амбер" по мотивам "Хроник Амбера" Р. Желязны.
https://github.com/graninas/Amber
Дмитрий Прокопцев, Яндекс
Речь пойдёт о, наверное, одном из самых важных и в то же время сложных нововведений в С++11 — R-ссылках (rvalue references). Мы рассмотрим базовые правила работы с такими ссылками и связанные с ними новые концепции языка: перемещение классов, универсальные ссылки и перенаправление вызовов.
Python&Printer / Андрей Пучко / penta.byPython Meetup
Андрей рассказал о личном опыте сражений за печать отчетов из программ на Python. Речь шла о полезных инструментах и форматах документов (PDF, RTF, DOCX, XLS, ODT, HTML) которые можно готовить к печати при помощи Python.
Быстрые конструкции в Python - Олег Шидловский, Python Meetup 26.09.2014Python Meetup
В своем докладе Олег расскажет о замене стандартных функций на более быстрые и об ускорении работы python. Также продемонстрирует несколько примеров быстрых конструкций python.
ЛЕКЦИЯ 5. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - осень 2014 - Лекция 5 - Многопоточное программирование в языке С++. Р...Alexey Paznikov
ЛЕКЦИЯ 5. Многопоточное программирование в языке С++. Работа с потоками. Защита данных. Синхронизация. Будущие результаты
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Рассмотрены известные автору подходы к реализации как lock-free, так и fine-grained lock-based set/map: хеш-таблицы, деревья. Что из подходов STL может быть реализовано в lock-free манере, а что принципиально нет. Подводные камни lock-free и их нейтрализация.
Догнать и перегнать boost::lexical_castRoman Orlov
Разбор нестандартной реализации преобразования целого числа в строку без использования циклов и рекурсивных вызовов времени исполнения - только рекурсия на этапе компиляции
ЛЕКЦИЯ 4. Шаблоны многопоточного программирования
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
Лекция для студентов АлтГТУ, проведенная 04.03.2015. В ходе лекции рассматривались следующие ключевые моменты:
1) Lambda project
2) Steam API
3) Date API
Tech Talks @NSU: Как приручить дракона: введение в LLVMTech Talks @NSU
http://techtalks.nsu.ru
Видеозапись: http://www.youtube.com/watch?v=v7uBLSm6ft8
06 октября 2015. Как приручить дракона: введение в LLVM (Дмитрий Кашицын, HDsoft)
«В этом докладе мы кратко расскажем о таком звере, о котором много кто слышал, но немногие щупали. Что такое компилятор на самом деле? Чем LLVM отличается от других компиляторов? Как в LLVM происходит компиляция программы, как работают оптимизации? Наконец, какой путь проходит программа от разбора исходного текста до генерации исполняемого файла?
Лекция будет обзорной и не потребует от слушателей глубоких знаний теории компиляторов.»
Лекция прочитана в рамках проекта Tech Talks @NSU – серии открытых лекций о разработке ПО и карьере в IT, проводимых в Новосибирском государственном университете.
Подробности: http://techtalks.nsu.ru
Лекция для сотрудников фирмы Soft-logic, проведенная 13.11.2014. В ходе лекции рассматривались следующие ключевые моменты:
1. Назначение lambda-выражений
2. Синтаксис lambda-выражений
3. Функциональные интерфейсы
4. Default и статические методы в интерфейсах
5. Ссылки на методы
6. Область действия переменных
7. Трансляция lambda-выражений
8. Сериализация lambda-выражений
ЛЕКЦИЯ 7. Многопоточное программирование без блокировок. Модель потребитель-производитель. Потокобезопасный стек: проблема ABA, указатели опасности, сборщики мусора, счётчик ссылок, применение модели памяти С++.
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
GoITeens: Дети, которые изменят мир. Как воспитать будущих IT гениев?GoIT
24.05.15 в уютном офисе Digital Future прошла по-семейному тёплая встреча от проекта GoITeens. На ней родители получили ответы на актуальные вопросы:
+ Стоит ли воспитывать в ребёнке ITшника и к чему это приведёт?
+ Почему Soft skills важно развивать с раннего возраста и как это делать?
+ Как мотивировать ребенка учиться с удовольствием?
+ Чему обучает образовательный центр GоITeens?
+ Как организован наш процесс обучения?
Помогли разобраться в этих несложных вопросах наши спикеры:
1. Нана Коренева — автор проекта GoITeens. Основатель robotics.GE — детского/юношеского развивающего центра в Тбилиси, обучающего робототехнике и программированию.
2. Дмитрий Шоломко — генеральный директор Google Ukraine с 9-ти летним опытом работы на этой позиции. До этого руководил собственной консалтинговой компанией, специализирующейся на информационной и консультационной поддержке крупнейших украинских компаний, работающих в сферах IT и телекоммуникаций.
3. Андрей Светлов — украинец, создающий самый популярный язык программирования — Python (знаком с Python уже 15 лет). Начал программировать в 12 лет. Имеет опыт работы в компаниях SoftLine и LevelUP. Три года проработал в США на HedgeServ, после чего вернулся в Украину. Считает свою работу самым увлекательным занятием.
4. Владимир Шиманский — создатель hackerspace в GlobalLogic, разработчик украинского продукта Blynk. Имеет многократный опыт коучинга и преподавания программирования. Преподаватель и заведующий учебной частью в GoITeens. Отлично ладит с детьми :)
4.Иван Пасечник — со-основатель и СЕО Ecois.me. Один из основателей Киевского хакерспейса. Разработчик первого в Украине 3D принтера. Имеет более 5 лет опыта в работы в производстве.
Родители б�
Статический и динамический полиморфизм в C++, Дмитрий ЛевановYandex
На примере некоторых архитектурных решений Крипты Дмитрий расскажет о способах реализации полиморфного поведения в программах на C++, о преимуществах и недостатках этих способов, а также о новых возможностях C++11.
Utah Code Camp, Spring 2016. http://utahcodecamp.com In this presentation I describe modern C++. Modern C++ assumes features introduced in the C++11/14 standard. An overview of the new features is presented and some idioms for mdoern C++ based on those features are presented.
C++ provides backwards compatability with C, but you will have an easier time if you stay away from certain C-style programming habits. This presentation outlines traps and pitfalls from C style programming in C++ and recommends pure C++ alternatives that lead to fewer surprises, fewer errors and better code. This presentation hasn't been updated for C++11 and is based on C++03.
Со времён С++98 стандартные контейнеры и идиома RAII позволяли избегать использования оператора delete,
что делало код более безопасным. С приходом С++11 и умных указателей отпала необходимость использовать оператор new, что позволило практически полностью переложить управление памятью на плечи компилятора. В
докладе объясняется идеология управления памятью и ресурсами в современном С++.
Im alltäglichen Einsatz verwenden wir eine potentiell steigende Anzahl an immer größeren Bibliotheken. Diese helfen uns schneller und effizienter unsere Ziele zu erreichen, werden ständig gewartet und ersparen nebenbei auch jede Menge Fehlerlösungs- und Dokumentationsaufwand. Gleichzeitig bedeuten sie jedoch einen unmittelbar höheren Aufwand für das Build und Dependency Management. Wie bekommt man dieses Problem in den Griff?
In der letzten Dekade hat das BuildSystem CMake diesbezüglich große Fortschritte bei der schnellen und alltäglichen Wiederverwendbarkeit von C++ Code bewirkt. So fördert zum Beispiel die Unabhängigkeit von spezifischen BuildSystemen zusammen mit Git und innovativen Hostern wie GitHub insbesondere die Entstehung und Verwendung von OpenSource
Software. Wie sieht die Zukunft aus?
Dependency Manager wie biicode zeigen einen noch komfortableren Weg auf, mit eigenem oder Drittanbieter Code zu arbeiten. Download, Build und Einbindung von Dependencies wird damit so einfach wie das Installieren einer App aus dem AppShop. Doch welche Vor- und Nachteile hat dieses System? Welche Alternativen gibt es?
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
Доклад с митапа MSK .NET Community (http://mskdotnet.org).
Поговорим о самом мощном отладчике для Windows – WinDbg. Разберем как начать использовать этот отладчик, чем он может быть полезен для .NET разработчиков. Подробней остановимся на практических моментах его применения, зачем он прикладным программистам, web-разработчикам. Посмотрим и на другие инструменты отладки, которые занимают нишу между интуитивно управляемым комбайном Visual Studio и легким, но крайне аскетичным WinDbg.
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данныхNikolay Samokhvalov
Shared_buffers = 25% – это много или мало? Или в самый раз? Как понять, подходит ли эта – довольно устаревшая – рекомендация в вашем конкретном случае?
Пришло время подойти к вопросу подбора параметров postgresql.conf "по-взрослому". Не с помощью слепых "автотюнеров" или устаревших советов из статей и блогов, а на основе:
строго выверенных экспериментов на БД, производимых автоматизированно, в больших количествах и в условиях, максимально приближенных к "боевым",
глубокого понимания особенностей работы СУБД и ОС.
Используя Nancy CLI (https://gitlab.com/postgres.ai/nancy), мы рассмотрим конкретный пример – пресловутые shared_buffers – в разных ситуациях, в разных проектах и попробуем разобраться, как же подобрать оптимальную настройку для нашей инфраструктуры, БД и нагрузки.
https://pgconf.ru/2019/242809
Слайды одноименного доклада с конференции "C++ Russia 2018". В докладе речь идет о том, насколько C++ мешает и насколько C++ помогает в разработке акторного фреймворка для C++.
Павел Артёмкин — Разработка C++ API для реализации алгоритмов на больших графахYandex
В докладе рассказано о вычислительной модели на графах, в основе которой лежит механизм передачи сообщений между вершинами, а также о реализации в рамках данной модели API для написания алгоритмов на C++.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"Fwdays
Let's calculate an average of one column for each key, like the following query: SELECT key, avg(value) FROM table GROUP BY key. What can be more simple? But the question is: what is the most efficient way to do it? How to write code to achieve maximum performance on a variety of hardware?
Всё о статическом анализе кода для Java программистаAndrey Karpov
Этот доклад для тех, кто не знаком со статическими анализаторами кода, или знаком, но ещё не внедрил эти инструменты в процесс разработки. Будет описана методология статического анализа и как она используется для выявления ошибок и запахов кода. Будут кратко рассмотрены некоторые популярные инструменты статического анализа для языка Java, а также платформа SonarQube способная объединить и визуализировать отчёты различных анализаторов. Немного заглянем внутрь и поговорим о технологиях, используемых в современных статических анализаторах кода и позволяющих находить разнообразнейшие паттерны ошибок. Затронем вопрос, почему несмотря на уже существующие инструменты наша команда решила сделать ещё один: PVS-Studio for Java :). В конце рассмотрим важный вопрос интеграции инструментов статического анализа в большие старые проекты и почему так важно регулярное использование подобных инструментов.
Similar to Михаил Матросов, “С++ без new и delete” (20)
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
В своих прошлых докладах (http://cpp-russia.ru/?p=198, и http://cpp-russia.ru/?page_id=1239) я рассказывал о C++ без исключений, как с эти жить, как работать. Этот доклад является продолжением этой серии. Я рекомендую освежить в памяти предыдущие доклады, чтобы наша работа была более продуктивной. Мы обсудим механизмы создания, копирования и перемещения объектов, механизмы аллокации и деаллокации памяти, а также обработку ошибок и исключений. Также мы обсудим проблемы и неудобства, которые испытывает программист, когда пишет код без исключений. В конце, я попытаюсь показать, как можно проектировать структуры данных, контейнеры для удобной работы в средах с исключениями и без исключений.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
QML\Qt Quick это превосходный декларативный язык программирования, призванный сильно упростить создание и дальнейшую поддержку пользовательских интерфейсов.В докладе я расскажу что из себя представляет QML, попробуем разобраться в вопросе “Где и как уместно использовать QML\Qt Quick” и приведу краткий обзор полезных инструментов для разработки QML\Qt Quick приложений.
Доклад посвящён алгоритмам и структурам данных рендеринга автомобильных маршрутов в ГИС приложениях. Так же будут затронуты особенности и проблемы, возникающие при написании единого кода визуализации для нескольких программно-аппаратных платформ (Android, Windows Phone, iOS, Windows Desktop, Linux Desktop).
Мало кто отчетливо представляет, как работают исключения в С++.
Автор пытается восполнить этот пробел, заодно пытаясь выяснить, почему всё устроено так как оно устроено и нельзя ли там чего-нибудь улучшить.
1) Две основные проблемы - как обустроить раскрутку стека
и как осуществить передачу управления при возникновении исключения
2) Раскрутка стека - GCC LDSA, MSVC32, MSVC64
3) Передача управления - SJLJ, DW2, MSVC
4) Раскручиваем стек своими руками
Как мы уменьшили количество ошибок в Unreal Engine с помощью статического ана...Platonov Sergey
Размер и сложность проектов растёт. С кодом всё сложнее совладать, поэтому статический анализ всё больше набирает популярность. А лидеры отрасли все чаще внедряют такие инструменты у себя. Мы расскажем об использования статического анализатора кода в игровой индустрии на примере работы с проектом Unreal Engine 4. Про это на сайте компании Epic Games можно найти статью. Но одно дела статья, а другое дело живой рассказ. Вы услышите интересные истории, увидите примеры ошибок в коде Epic Games, да и просто пообщаетесь с участниками внедрения анализатора. Если вы ещё не решили, нужен ли статический анализатор вашему проекту, обязательно приходите послушать наш доклад.
Дракон в мешке: от LLVM к C++ и проблемам неопределенного поведенияPlatonov Sergey
В этом докладе Дмитрий кратко рассказывает о таком звере, как LLVM, о котором много кто слышал, но немногие щупали.
Что такое компилятор на самом деле? Как происходит компиляция программы, как работают оптимизации и, наконец, откуда берется неопределенное поведение в детерменированных программах на C++?
One definition rule - что это такое, и как с этим житьPlatonov Sergey
В докладе будет разобрано, что-же такое ODR, какие ошибки могут быть из-за нарушения этого правила. Также будет представлен Proof-of-concept утилиты на базе clang tooling по автоматическому поиску таких ошибок.
В докладе рассказывается об особенностях подхода к dependence injections в C++. Посмотрим какие подходы, в чем их плюсы и минусы. Также затрагивается тема Inversion of Control контейнеров.
C++ богат различными инструментами, при разработке на C++ используется множество различных подходов. Но можно ли пользоваться ими во всех случаях или бывают ситуации, когда стоит воздержаться или ограничить их использование?
В докладе пойдет речь о том, какие существуют ограничения при разработке браузера и откуда они взялись. Почему мы живем без исключений или RTTI, к чему это ведет. Как мы используем стандартную библиотеку и сторонние модули.
1. C++ без new и delete
Матросов Михаил
mikhail.matrosov@gmail.com
Russian C++ User Group, Саратов, 2014
2. Вместо содержания
• Что?
– Писать код без new и delete в современном С++
• Как?
– Контейнеры STL
– std::make_shared, std::make_unique
– Cвои обёртки для своих умных указателей
• Почему?
– new и delete увеличивают сложность кода
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
2
3. Современный С++
• Современный С++ включает
– Возможности стандарта С++14
– Современные best practices
• C++14 is done!
– Рабочий черновик стандарта ISO/IEC
14882:2014(E) единогласно одобрен
– Полностью или частично поддерживается
всеми мажорными компиляторами
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
3
4. Что и как?
Общие рекомендации
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
4
5. Объекты в С
typedef struct ObjectTag
{
// Object members
} Object;
int InitObject(Object* io_pObject);
int UseObject(Object* io_pObject);
int ClearObject(Object* io_pObject);
void ObjectsInC()
{
Object* pObject;
pObject = malloc(sizeof(Object)); // Allocate memory
InitObject(pObject); // Establish invariants and acquire resources
UseObject(pObject); // Do the work
ClearObject(pObject); // Release resources
free(pObject); // Release memory
// By the way: error handling :-/
}
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
5
6. Объекты в С++
• Инкапсуляция:
– Конструкторы
– Деструкторы
– Методы
class Object
{
// Object members
public:
Object(); // Establish invariants and acquire resources
~Object(); // Release resources
void Use(); // Do the work
};
• Обработка ошибок:
– Исключения
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
6
7. Объекты в С++
• 2 лучше, чем 1
– управление ресурсами
// 1. Naive C++ style
Object* p = new Object(); // Allocate memory
p->Use(); // Do the work
delete p; // Release memory
• 3 лучше, чем 2
– unique_ptr делает всё, что и
auto_ptr, только лучше
• 4 лучше, чем 3
– основная тема доклада
// 2. More secure C++98 with RAII
std::auto_ptr<Object> ap(new Object()); // Allocate memory
ap->Use(); // Do the work
// 3. More secure C++11 with RAII
std::unique_ptr<Object> up(new Object()); // Allocate memory
up->Use(); // Do the work
// 4. New bullet-proof modern C++
auto up2 = std::make_unique<Object>(); // Create unique object
up2->Use(); // Do the work
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
7
8. Разделяемые объекты в С++
void UseObject(Object*); // Shall retain the object
void AcceptObject(Object*); // Shall delete the object
void ShareObject(std::shared_ptr<Object>); // Both cases
// Naive C++
Object* p = new Object();
p->Use();
UseObject(p); // Want to use object after call
p->Use();
AcceptObject(p); // No longer need the object
// C++98 & RAII
/* No way to say this! */
// Modern C++
auto sp = std::make_shared<Object>();
sp->Use();
ShareObject(sp); // Want to use object after call
sp->Use();
ShareObject(std::move(sp)); // No longer need the object
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
8
9. Объекты со счётчиком ссылок в С++
// Naive C++ (not used)
RefCounted* p = new RefCounted();
p->AddRef();
p->Use();
p->Release();
// C++98 & RAII
RefPtr<RefCounted> rp = new RefCounted();
rp->Use();
// Modern C++
auto rp2 = MakeRefPtr<RefCounted>();
rp2->Use();
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
9
10. Динамические массивы в С++
void UseArray(int*);
int n = 100;
// Naive C++
int* p = new int[n];
UseArray(p);
delete[] p;
// C++98 & RAII
std::vector<int> v(n);
UseArray(&v[0]);
// Modern C++
std::vector<int> v2(n);
UseArray(v2.data());
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
10
12. Лучше == проще
• Немного авторитета:
– Главный технический императив разработки ПО –
управление сложностью [McConnel2004]
– Make Simple Tasks Simple! [Stroustrup2014]
– ≈99.9998% разработчиков – не эксперты [Sutter2014]
– Принцип KISS (Keep It Simple, Stupid)
• Что значит проще?
– Простые задачи должны решаться просто
– Сложные – не сложнее, чем необходимо
– Сначала – простота, затем – производительность
• Как сделать проще?
– Принцип DRY (Don’t Repeat Yourself)
– Принцип «по умолчанию» [Sutter2014]
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
12
13. Принцип «по умолчанию»
• Основная мысль:
– Известная задача ⇒ известное решение
• Преимущества:
– Взаимопонимание с другими разработчиками
– Уменьшение порога входа для новичков
– Меньше думать – продуктивная лень
– Все те же, что и для правил кодирования
• “A tour of C++” [Stroustrup2013]
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
13
14. std::make_unique<T>() vs.
std::unique_ptr(new T)
int GenerateId();
std::pair<std::unique_ptr<Object>, int> MakeObjectWithIdWrong()
{
return std::make_pair(
std::unique_ptr<Object>(new Object()),
GenerateId());
}
std::pair<std::unique_ptr<Object>, int> MakeObjectWithIdRight()
{
return std::make_pair(
std::make_unique<Object>(), // Safe
GenerateId());
}
Дублирование
имени типа. DRY!
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
14
// May throw
// May leak!
15. std::make_shared<T>() vs.
std::shared_ptr(new T)
std::shared_ptr<Object> sp(new Object());
counter
Object
sp
Два выделения
памяти
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
15
16. std::make_shared<T>() vs.
std::shared_ptr(new T)
auto sp = std::make_shared<Object>();
Одно выделение памяти.
Оптимизация We Know Where
You Live [Lavavej2012].
counter Object
sp
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
16
17. std::make_shared и std::make_unique
• Плюсы обоих:
– Безопасность при исключениях
– Нет дублирования имени типа
• Плюсы std::make_shared:
– Одно обращение к менеджеру памяти
• Минусы есть, но несущественные:
– Нет формы для указания собственного аллокатора для std::unique_ptr
(для std::shared_ptr это std::allocated_shared)
– Опасность false sharing объекта и счётчика ссылок
[см. вопрос на StackOverflow]
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
17
18. Обобщаем
• delete по умолчанию не используется со
времён RAII и стандартных контейнеров
• new по умолчанию не используется при работе
со стандартной библиотекой
• Постараемся не использовать new при работе
с другими библиотеками
– Свои объекты со счётчиком ссылок
– Свои умные указатели
– Своё управление памятью
• Теперь и new по умолчанию не используется
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
18
19. Как?
Некоторые подробности использования
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
19
20. Объекты со счётчиком ссылок
• OpenSceneGraph
– Открытый 3D-движок под OpenGL на С++
– osg::Referenced – класс со счётчиком ссылок,
базовый для большинства классов
• ref() увеличивает счётчик
• unref() уменьшает счётчик и удаляет объект если
счётчик становится равен нулю
– osg::ref_ptr<T> – умный указатель
• вызывает ref() в конструкторе
• вызывает unref() в деструкторе
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
20
21. OSG: C++ & RAII
• Пример кода из [Wang2010, стр. 78]
• Идеально подходит для апгрейда
– Может быть выполнен автоматически
osg::ref_ptr<osg::Vec3Array> vertices = new osg::Vec3Array;
// Init vertices
osg::ref_ptr<osg::Vec3Array> normals = new osg::Vec3Array;
// Init normals
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
geom->setVertexArray(vertices.get());
geom->setNormalArray(normals.get());
// Further init geometry and use it
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
21
22. OSG: Modern C++
namespace osg
{
template<typename T, typename... Args>
osg::ref_ptr<T> make_ref(Args&&... args)
{
return new T(std::forward<Args>(args)...);
}
}
auto vertices = osg::make_ref<osg::Vec3Array>();
// Init vertices
auto normals = osg::make_ref<osg::Vec3Array>();
// Init normals
auto geom = osg::make_ref<osg::Geometry>();
geom->setVertexArray(vertices.get());
geom->setNormalArray(normals.get());
// Further init geometry and use it
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
22
23. Своё управление памятью
• Qt
– Cross-platform application and UI framework
– QObject – класс, устанавливающий отношение
родства, базовый для большинства классов
• Имеет список детей, удаляет их в своём деструкторе
• Имеет ссылку на родителя, которая может быть null
• Может менять родителя в процессе жизни
– QSharedPointer – аналог std::shared_ptr
• Предоставляет QSharedPointer<T>::create() по
аналогии с std::make_shared<T>()
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
23
24. QObject
• Сценарии использования:
– Создание объекта в стеке
• Удаляется при выходе из блока
– Динамическое создание объекта с родителем
• Удаляется родителем
– Динамическое создание объекта без родителя
• Нужно указать родителя или удалить вручную
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
24
25. Qt::MakeChild
• Обёртка для безопасного сценария (см.
обсуждение).
• Теперь new означает небезопасный сценарий
namespace Qt
{
template<class T, class... Args>
T* MakeChild(Args&&... args)
{
T* pObject = new T(std::forward<Args>(args)...);
Q_ASSERT(pObject->parent() != nullptr);
return pObject;
}
}
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
25
26. Qt::MakeChild
MyWidget::MyWidget()
{
// Safe, created on the stack
QProgressDialog progress("In progress...", "Cancel", 0, 100);
// Safe, parent is specified
{
// Regular, valid since C++98
QPushButton* pButton = new QPushButton("Push me", this);
// Proposed, modern C++ style
auto pButton2 = Qt::MakeChild<QPushButton>("And me", this);
}
// Unsafe, parent is null, need manual delete
m_pDialog = new QDialog();
}
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
26
27. Необходимые возможности С++14
• Возможности языка:
– Точная передача (perfect forwarding)
– Шаблоны с переменным количеством
параметров (variadic templates)
• Возможности стандартной библиотеки:
– Умные указатели
– std::make_shared, std::make_unique
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
27
Можно обойтись
и без них
Можно написать
самому
28. Заключение
• Хороший код – простой код
• Принцип «по умолчанию» для упрощения
• Проблемы с delete давно известны
• Для стандартной библиотеки код без new
лучше, это объявляется подходом по
умолчанию – для упрощения
• new и delete теперь ассоциируются с
небезопасными операциями
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
28
29. Спасибо за внимание!
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
29
30. Библиография
[McConnell2004] McConnell, Steve, and Detlef Johannis. Code
complete. Vol. 2. Redmond: Microsoft press, 2004.
[Wang2010]Wang, Rui, and Xuelei Qian. OpenSceneGraph 3.0:
Beginner's guide. Packt Publishing Ltd, 2010.
[Lavavej2012] Lavavej, Stephan. STL11: Magic && Secrets. Going
Native, 2012.
[Stroustrup2013] Stroustrup, Bjarne. A Tour of C++. Addison-
Wesley, 2013.
[Stroustrup2014] Stroustrup, Bjarne. Make Simple Tasks Simple!
CppCon, 2014.
[Sutter2014] Sutter, Herb. Back to the Basics! Essentials of
Modern C++ Style. CppCon, 2014.
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
30
31. Принцип «по умолчанию»
Задача Решение по умолчанию
Передача параметров в функцию Pass by value or const&
См. [Sutter2014]
Возврат параметров из функции Return by value
См. [Sutter2014]
Массив произвольного размера?
Массив изменяющегося размера?
Список произвольных объектов?
std::vector
Массив фиксированного размера std::array
Действие над каждым элементом
контейнера
range-based for
Автоматическое управление
динамической памятью
std::make_unique или std::make_shared
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
31
32. Выражение намерения
• Что сделать, а не как сделать
• Более высокоуровневый код
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
32
33. Память – ресурс
std∷make_unique
new/delete
=
new/delete
malloc/free
=
std∷fstream
fopen/fclose
Матросов Михаил, С++ без new и delete,
Russian C++ User Group, Саратов, 2014
33