Доклад о редких нестандартных расширениях языка С++, про которые никто не знает, но которые надо поддерживать в анализаторе кода.
О магии Visual C++ с файлом stdafx.h, когда проект компилируется, хотя не должен. О том как зародился viva64 (предшественник PVS-Studio) для поиска 64-битных проблем. Как и почему исчез анализ кода, который одно время существовал в компиляторе Intel C++.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
В докладе будут сделаны попытки ответить на вопросы, какой тип скрывается под маской auto, почему T&& не всегда rvalue, и почему move ничего не двигает.
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
Нет смысла говорить, что "надо писать код без ошибок". Ошибки были, есть и будут. Все хорошо понимают, что ошибки следует исправлять. Люди забывают, что ошибка должна быть исправлена с минимальными временными и денежными затратами!
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
Статический анализ появился почти 40 лет назад. В своём докладе мы хотим показать, чему за это время научились статические анализаторы. Мы рассмотрим различные методики анализа, как они появлялись и какие ошибки можно найти с помощью них. Посмотрим на примеры ошибок, найденных PVS-Studio в Open Source проектах. Поговорим о том, чем статический анализатор отличается от "линтеров" и некоторых других инструментов, а также какие проблемы решает современный статический анализатор C++ кода, помимо собственно анализа кода.
Павел Беликов
@PVS-Studio, Тула, Россия
Многие разработчики не представляют, как дорого обходятся ошибки в программах. Причем я имею в виду не падения ракет и прочие катастрофы, а обыкновенное прикладное программное обеспечение. Хочется показать всю важность нахождения ошибок на самых ранних этапах. Одним из способов выявить ошибку как можно раньше является статический анализ кода. Поговорим мы не только об этом, но и о различных приемах при написании кода, которые позволят избежать множество типовых ошибок.
В докладе будут сделаны попытки ответить на вопросы, какой тип скрывается под маской auto, почему T&& не всегда rvalue, и почему move ничего не двигает.
Поговорим о рефлексии в C++, о том, что это такое, для чего нужно и почему это вообще важно. На практическом примере с котами рассмотрим эволюцию подходов к рефлексии в рамках разных версий языка: C++03, C++11/14, C++17. Посмотрим на то, что для нас готовят разработчики нового стандарта, узнаем где и как можно "пощупать" эти новые возможности. Поделимся полезными утилитами и подходами, которые облегчат жизнь пока эти новые возможности не придут к вам на проект.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
В рамках данного выступления вас ждут:
* рассказ о полезных и интересных вещах из Boost
* новости с передовиц разработки Boost и о новинках ожидаемых в следующих версиях
* что из Boost готовится к переезду в новый стандарт С++
* как экспериментировать с Boost, имея под рукой только браузер
* что людям не нравится в Boost и как с этими людьми бороться (-:
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Слайды доклада на конференции C++ Corehard Winter 2017 (г.Минск).
Автор доклада давно и успешно использует Модель Акторов при разработке приложений на C++. В основном это был положительный опыт. Но есть некоторые неочевидные моменты, про которые было бы хорошо узнать заранее. О том, где использование Модели Акторов уместно, а где нет, на какие грабли довелось наступить, какие шишки были набиты, как можно упростить себе жизнь и пойдет речь в докладе.
Функциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
Нет смысла говорить, что "надо писать код без ошибок". Ошибки были, есть и будут. Все хорошо понимают, что ошибки следует исправлять. Люди забывают, что ошибка должна быть исправлена с минимальными временными и денежными затратами!
Как команда PVS-Studio может улучшить код операционной системы TizenAndrey Karpov
Цель: Контрактная работа команды PVS-Studio по исправлению ошибок и регулярному аудиту кода. Сейчас анализатор PVS-Studio выявляет более 10% ошибок, которые присутствуют в коде проекта Tizen. В случае регулярного использования PVS-Studio, в новом коде можно будет предотвратить около 20% ошибок.
Я прогнозирую, что команда PVS-Studio может на данный момент выявить и исправить около 27000 ошибок в проекте Tizen.
Не связывайтесь с поддержкой C++ программистов. Юрий Минаев. CoreHard Spring ...corehard_by
Немного юмористический доклад о перипетиях поддержки C и C++ программистов. На самом деле, конечно, работать с программистами в поддержке интересно и продуктивно. Они не только стек-дамп к письму приложить могут, но ещё и за тебя подумать и подсказать пути решения проблемы. Но есть и обратная сторона. Если у них проблема, то надо быть готовым к потреблению пинт кофе и ящиков печенья. Расскажем об интересном опыте поддержки наших пользователей, использующих анализатор PVS-Studio. Например, как инструмент оказывается в шоке от строковых литералов размером 26 мегабайт.
Производительность Unity3D: подводные камни / Алексей Чубарь (BIT.GAMES)Ontico
Unity3D - это внушительный набор средств для кроссплатформенной разработки игр и 3D-приложений. Однако ряд его особенностей может привести к внезапному падению производительности продукта на мобильных платформах.
Где же прячутся подводные камни? Как обеспечить оптимальный user experience на старом смартфоне? Каких "граблей" стоит избегать при написании кода и подготовке графики? Рассмотрим на примере RPG "Гильдия Героев" для Android и iOS.
Баба-Яга против! — Роман Дворнов, Ostrovok.ruYandex
В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против».
Что могут статические анализаторы, чего не могут программисты и тестировщикиAndrey Karpov
Одной из технологий выявления ошибок на ранних этапах является статический анализ кода. К сожалению, ряд инструментов реализуют анализ весьма поверхностно, что снижает доверие к методологии статического анализа в целом. Некоторые программисты начинают думать, что анализ кода — это нечто, базирующееся на регулярных выражениях и они сами легко найдут такие ошибки. На самом деле всё гораздо сложнее и интересней. Более того, многие ошибки невероятно сложно найти, если не использовать инструменты статического анализа кода. И в этом докладе будет продемонстрировано множество таких случаев. Послушав доклад, вы взглянете на статический анализ совсем по-новому. Дополнительно будет рассказано с чего начать, если вы захотите внедрить инструмент статического анализа в уже существующий процесс разработки.
В последнее время во фронтенде появляется столько нового и внедряется настолько быстро, что не все успевают осознать последствия. Хорошо это или плохо? Рассмотрим некоторые новинки с точки зрения «за», а главное – «против».
Конференция FrontTalks, Екатеринбург, 19 сентября
Видео: https://vimeo.com/107694664
Выполняет анализ кода на языках: C, C++, C++/CLI, C++/CX, C#. Plugin для Visual Studio 2010-2015. Интеграция с SonarQube, QtCreator, CLion, Eclipse CDT, Anjuta DevStudio и т.д. Быстрый старт (мониторинг компиляции). Прямая интеграция анализатора в системы автоматизации сборки и утилита BlameNotifier (рассылка писем). Режим автоматического анализа изменённых файлов. Почему нужны анализаторы кода?
Поиск уязвимостей с использованием статического анализа кодаcorehard_by
Поиск уязвимостей с использованием статического анализа кода, Андрей Карпов и Евгений Рыжков
В последнее время мы все слышим о новых и новых уязвимостях, обнаруженных в программном обеспечении. Уже стало очевидно, что писать код без уязвимостей человечество не может. Но могут ли современные инструменты разработки помочь обнаружить хотя бы некоторые ошибки? В докладе НЕ будет фраз типа «купите такой-то инструмент, чтобы не допускать уязвимостей в своем и чужом коде». На реальных примерах мы попробуем показать какие типы уязвимостей или по-другому программных дефектов могут быть найдены с помощью технологий анализа кода, а какие – пока нет. Ну и конечно как писать код так, чтобы снизить вероятность появления уязвимостей в своем коде.
Поиск уязвимостей с использованием статического анализа кодаAndrey Karpov
Уязвимости - это те же самые обыкновенные ошибки. Зачем их выделять? Делайте это, если хотите заработать больше денег. CWE - Common Weakness Enumeration. CVE - Common Vulnerabilities and Exposures. Теперь с помощью Valgrind вы ищете не утечку памяти, а отказ в обслуживании!
Язык C++ и инфраструктура вокруг него продолжает активно развиваться, что делает этот язык одним из самых эффективных инструментов в настоящее время. Хочется выделить три фактора, делающие язык C++ сейчас столь привлекательным. Первое: нововведения в стандарт языка, позволяющие писать эффективный код. Второе: зрелость инструментов разработки и увеличение скорости сборки проектов. Третье: зрелось вспомогательного инструментария, позволяющие контролировать качество кода и другие аспекты жизненного цикла проекта. Этот доклад - ода языку программирования C++!
Константин Книжник: статический анализ, взгляд со стороныTatyanazaxarova
Статья представляет интервью, взятое у Константина Книжника, сотрудником компании "Системы программной верификации" Андреем Карповым. Затронуты вопросы статического анализа кода, актуальность решений в этой области, а также перспективы использования статического анализа при разработке параллельных приложений.
Andrew Aksyonoff "Архитектура вокруг поиска"Fwdays
Начиная с определенного масштаба, вокруг любого базового поискового движка плюс рядом с ним неизбежно вырастает изрядная куча всяких интересных прослоек и сервисов. Особенно, когда одним лишь поиском по ключевым словам (либо вообще булевым, либо с простеньким ранжированием по формуле) дело ограничиваться перестает. Расскажу, как сегодня выглядит архитектура сервисов “вокруг и около поиска” у нас в Авито (числа и слова для привлечения внимания: 40M+ активных объявлений, тысячи RPS, ML ранжирование, пляски с анализом и доставкой данных, и всё такое).
Написание на C и C++ 64-битных программ, работающих с большими массивами данных, требует особой аккуратности. В 64-битном коде встречаются особые трудноуловимые ошибки, о которых редко рассказывают в книгах или на конференциях. Автор рассмотрит паттерны 64-битных ошибок и даст рекомендации, как писать код, защищённый от них.
Доклад вводит в рассмотрение универсальный адаптер, позволяющий обернуть любой класс с целью добавления новых свойств, отсутствующих в оригинальном классе. Получаемые классы могут иметь в точности такой же интерфейс, как и первоначальные, что позволяет прозрачно заменять их и оборачивать любое количество раз.
Это позволяет добавлять необходимые свойства объектам, не переписывая его с нуля. Предложенная обобщенная концепция будет последовательно введена и проиллюстрирована простыми, но интересными примерами.
На протяжении всего существования C++ тема компайл-тайм рефлексии поднимается постоянно, но, к сожалению, до сих пор Стандарт языка не дает достаточных возможностей для извлечения и манипулирования компайл-тайм информацией. Большое количество библиотек и препроцессоров было придумано для того, чтобы решить эту проблему, начиная от простых макросов и заканчивая Qt-moc или ODB. В докладе Антон расскажет о том, как на эту проблему смотрит Комитет по Стандартизации: какие решения были предложены, и какое стало доминирующим.
Evgeniy Muralev, Mark Vince, Working with the compiler, not against itSergey Platonov
The talk will look at limitations of compilers when creating fast code and how to make more effective use of both the underlying micro-architecture of modern CPU's and how algorithmic optimizations may have surprising effects on the generated code. We shall discuss several specific CPU architecture features and their pros and cons in relation to creating fast C++ code. We then expand with several algorithmic techniques, not usually well-documented, for making faster, compiler friendly, C++.
Note that we shall not discuss caching and related issues here as they are well documented elsewhere.
Василий Сорокин, Простой REST сервер на Qt с рефлексиейSergey Platonov
Библиотека Qt имеет довольно мощную систему рефлексии. На примере простого в использовании класса, позволяющего с помощью наследования быстро построить REST сервер под ваши нужды, я покажу как элегантно ее можно задействовать в реальной жизни. В заключительной части, покажу еще один пример когда рефлексия Qt помогает красиво протестировать испускание сигналов классом.
Антон Бикинеев, Writing good std::future< C++ >Sergey Platonov
В докладе Антон расскажет о грядущих мажорных изменениях языка, которые, не войдя в Стандарт 17-го года и оставшись в Technical Specifications, будут ждать своего мержа в 20-м, а также быть уже реализованными в некоторых компиляторах. Осветятся также минорные, уже одобренные фичи следующего Стандарта, как языковые, так и библиотечные. Антон расскажет об их целях, покажет методы использования, а также осветит некоторые гайдлайны и трики.
Павел Филонов, Разделяй и управляй вместе с Conan.ioSergey Platonov
Несмотря на солидный возраст С++, одной из больших проблем, возникающих при разработке с его использованием, до сих пор является управление зависимостям. Особенно остро этот вопрос возникает при наличии нескольких различных целевых платформ. В докладе будет рассмотрено, как менеджер пакетов Conan.io позволяет решить проблему управления зависимостями и, как следствие, значительно улучшить скорость разработки на C++ и повысить модульность разрабатываемых систем.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Хочется чего-то новенького, необычного? Тогда добро пожаловать в мир чудеc C++17:
if constexpr (auto& [number, ok] = variable; ok)
return "Hi"
else
return number + 42;
Вы услышите о новом стандарте C++, обнаружите для себя новые полезные классы, функции и возможности языка. Для каждой новинки я приведу примеры использования, расскажу о нюансах и подводных камнях.
А ещё вы узнаете о том, как проходят заседания комитета по стандартизации C++ и сможете задать интересующие вас вопросы связанные с нововведениями С++17 и С++Next.
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
Одной из проблем C++ является большое количество конструкций, поведение которых не определено или просто неожиданно для программиста. С такими ошибками мы часто сталкиваемся при разработке статического анализатора кода. Но, как известно, лучше всего находить ошибки ещё на этапе компиляции. На этом докладе мы поговорим о том, какие техники из современного C++ позволяют писать не только более простой и выразительный, но и безопасный код. Вы увидите ошибки в коде различных Open Source проектов и узнаете, как можно их избежать, используя новые стандарты
Тестирование графического интерфейса пользователя является одним из основных видов тестирования графических приложений. В докладе будут рассмотрены задачи и особенности такого тестирования.
Далее будут рассмотрены плюсы и минусы использования стандартной Qt библиотеки QTest, и представлен проект QSpec, как альтернатива QTest. Также будут представлены примеры использования QSpec и дальнейшие планы по развитию этого проекта.
Адрес проекта: https://github.com/ugeneunipro/QSpec
Не так давно Гор Нишанов представил свой доклад: C++ Coroutines a negative overhead abstraction. В этом докладе Гор упомянул, что предложенный дизайн корутин позволяет их использовать практически в любых окружениях, в том числе и с "бедным" C++ рантаймом.
Я решил попробовать запустить корутины в следующих окружениях: обычное приложение, драйвер ОС Windows, EFI приложение. Только в одном из этих окружений есть полноценный C++ рантайм и поддержка исключений, в остальных ничего этого нет. Более того, EFI приложение вообще выполняется до старта ОС.
Я хочу рассказать о том, как мне удалось запустить корутины в этих окружениях, поговорим о том, какие проблемы существуют в асинхронном системном программировании и как их можно обойти.
Дмитрий Демчук. Кроссплатформенный краш-репортSergey Platonov
Доклад будет посвящен возможностям библиотеки Google Breakpad по созданию краш-репорта. Посмотрим как это работает изнутри.
На примерах будут рассмотрены способы интеграции библиотеки на разных платформах Windows, Linux, Max OS.
2. О докладчике
• Карпов Андрей Николаевич, 1981
• Присутствует на Habrahabr под именем
Andrey2008 - habrahabr.ru/users/andrey2008/
• Технический директор ООО «СиПроВер»
• MVP в категории Visual C++
• Intel Black Belt Software Developer
• Один из основателей проекта PVS-Studio
(статический анализатор кода для языков
C/C++/C#).
www.viva64.com
3. Содержание
• Пункт N1
• Пункт N2
• Пункт N3
• Я буду рассказывать о том,
о чем не могу писать в
статьях.
А ведь накопилось. И о странном.
www.viva64.com
4. На экономический вопрос «Почему программное обеспечение такое
дорогое?» столь же экономическим ответом был бы такой: «Потому
что его пытаются получить при помощи дешевого труда». А почему
пытаются? Да потому, что присущие ему трудности повсеместно
сильно недооцениваются.
Эдсгер Дейкстра
Как так получилось, что требуются
вспомогательные инструменты?
www.viva64.com
5. Чувствуется пренебрежение к сложности
При сдвиге >> знакового типа
int левые биты заполняются
копией знакового бита.
На самом деле, это
implementation-defined.
www.viva64.com
6. Ещё пример из той же книги по электронике
Файлы file1.c, file2.c, file3.c
можно подключить с
помощью директивы #include
#include "file1.h"
#include "file2.h"
#include "file3.h"
#include "file1.c"
#include "file2.c"
#include "file3.c"
www.viva64.com
7. Ещё пример из той же книги по электронике
Пространство, занимаемое
структурой в памяти,
равняется сумме размеров
всех элементов.
www.viva64.com
8. Что же делать? Да здравствуют костыли!
• Мы все молодцы. Но нас заставляют делать быстро и дёшево.
• Компромисс: вспомогательные инструменты.
• Например, отладчики, статические анализаторы кода.
• Это не хорошо и не плохо. Так устроен мир.
9. Начало. Viva64
• Актуальность: нет
инструмента для поиска 64-
битных ошибок
• Казалось, надо приложить
немного усилий и будет
много денег
• Суровая реальность
www.viva64.com
10. Стартап
• Ожидание
• Я буду генерировать
интересные креативные
идеи и воплощать их в
жизнь
• Реальность
• Сгорела проводка
• Важный сотрудник
заболел
• 10 $
• 1 копейка
www.viva64.com
12. Как начать?
• "Я готов отчитаться за каждый
доллар, но не спрашивайте меня,
как я заработал первый
миллион." — Генри Форд.
• Чем только не приходится
заниматься…
• Любая подработка
• Гранты
• Аутсорсинг
www.viva64.com
17. О сравнении анализаторов
•Я не могу написать, что пришлось отбирать
проекты
• Visual Studio падал
• Cppcheck зависал
•На самом деле, всё сводится к «шарику»
www.viva64.com
18. Всегда есть кому дорого и про Хобби
Не знаю, в каком мире вы живете, но, мне кажется, что многие компании
склонны переоценивать важность своего софта.
На 9000 рублей можно кормить двух человек месяц, проехать 3000
километров, пролететь четверть земли. Купить более 20 книг, сделать
операцию на глазу.
www.viva64.com
19. Ну тупые (c) Задорнов
char m_buffer[BUF_SIZE];
memset( m_buffer, 0, sizeof(*m_buffer) );
В этой строке очищается столько байт, сколько хранится в
первом элементе массива.
Про это некрасиво писать, но программисты часто
не видят ошибки. Это грустно, так как мешает
продавать инструмент.
www.viva64.com
20. ID_INLINE mat3_t::mat3_t( float src[ 3 ][ 3 ] ) {
memcpy( mat, src, sizeof( src ) );
}
Ну тупые (c) Задорнов
V511. The sizeof() operator returns size of the pointer, and not of the array, in 'sizeof(src)' expression.
Except it doesn't. The sizeof() operator returns the size of the object, and
src is not a pointer - it is a float[3][3]. sizeof() correctly returns 36 on my
machine.
Позже: Oop - yup - I essentially tested with with "char A[100];" rather
than "void Foo(char B[100])"
www.viva64.com
21. SHFILEOPSTRUCT Data;
....
Data.pTo = L"";
Описание тоже никто не читает
V540 Member 'pTo' should point to string terminated by two 0 characters.
В C++ sizeof(*L"") == sizeof(wchar_t) == 2,
так что ошибки тут нет.
www.viva64.com
22. Тяжела и неказиста жизнь простого
продвиженца
• Помочь опубликовать я не могу, т.к. не открываю вложения
• - Так ведь в статье были ссылки.
- Я не перехожу по обернутым ссылкам. (речь про bit.ly)
• Analyzer
• https
www.viva64.com
23. Как раз там, где нужен статический анализ,
его продать невозможно
• Требуется не устранить максимальное количество ошибок, а
пройти сертификацию.
• Заземлённые указатели
www.viva64.com
24. Байки разработчика с одной из АЭС
• «Некоторые персонажи в персонале
станций могут дать фору Гомеру Симпсону»
• «Зачем нам git? Вот смотри, у меня всё в
тетрадке записано».
• Ещё пример из жизни: в конструкторе
копирования у класса происходит открытие
файла конфигурации и полный его парсинг.
www.viva64.com
25. Он иногда присылал мне примечательные
фрагменты
• В следующие две строки программист умудрился уместить
как минимум 3 WTF:
inline virtual Foo& operator=(const Foo& x) {
if (&x); return *this;
}
www.viva64.com
27. Ещё впечатления
• Рядом с этим кодом был комментарий, в котором
программист объяснял, что в новом стандарте C++ bool будет
то же самое, что и int. Год написания комментария не
известен.
#if !defined(BOOL_DEFINED)
typedef int bool;
#endif
www.viva64.com
29. Я за Си
Любой дурак может написать код, понятный компьютеру. Хорошие
программисты пишут код, понятный людям.
Мартин Фаулер
www.viva64.com
30. Я за Си (с точки зрения разработчика PVS-Studio)
31. Свой класс строки - это норма
• Рано или поздно, в любом
состоявшемся проекте появляется свой
класс строки.
• Я ждал, появится ли он в PVS-Studio.
• Он появился, и это было обосновано.
• Это нормально. Не стесняйтесь это
делать.
www.viva64.com
32. Самое сложное в статическом анализе: не
ругаться
• Испытания C++: 105 открытых проектов
• Испытания C#: 49 открытых проектов
• Пример V501
• Пример V640
33. V501.
Опасным считается инфиксная операция, если
совпадает левый и правый операнд.
while (X < X)
if (A == B || A == B)
www.viva64.com
34. V501. Дьявол кроется в деталях
• X*X
• while (*p++ == *a++ && *p++ == *a++)
• Слева и справа находятся числовые литералы
if (0 == 0)
… 15 | 15 …
• #define M1 100
#define M2 100
if (x == M1 || x == M2)
• float x = foo();
if (x == x)
www.viva64.com
35. V501. Дьявол кроется в деталях
• / или - применяются к числовым константам: 1./1.
• Строка из Zlib:
if (opaque) items += size - size; / * make compiler happy * /
• rand() - rand()
rand() % N - rand() % N
• Слева и справа от '|', '&', '^', '%' находятся классы.
if (str == str) – ищем
if (vect ^ vect) – лучше пропускать
• sizeof(__int64) < sizeof(__int64)
www.viva64.com
36. V501. Дьявол кроется в деталях
• 0 << 31 | 0 << 30 | ...
(0 << 6) | (0 << 3) | …
• '0' == 0x30 && 'A' == 0x41 && 'a' == 0x61
• Эта шаблонная функция для определения NaN чисел.
• Read(x) && Read(x)
• #define USEDPARAM(p) ((&p) == (&p)) и прочие
• Слева и справа расположен вызов функций с такими
именами как pop, _pop.
• И так далее
www.viva64.com
37. V640.
Текст оформлен так, как будто
выполняются все действия.
if (a==1)
b = c; foo(b);
if (a==1)
b = c;
foo(b);
www.viva64.com
38. Дьявол кроется в деталях
• Все выражения находятся на 1 строке: if (a==1) b = c; F(b);
• В разных строках не совпадает количество символов
табуляции
• if (a)
return x;
foo();
• else else else for(..;..;..)
foo(); foo(); foo();
foo(); foo(); foo();
• Присутствуют #if, #else, #endif, #pragma и т.п.
• И так далее.
www.viva64.com
39. Редкие ключевые слова и расширения
• Приходится поддерживать редкое или нестандартное
• Это скрыто от глаз пользователей
• Примеры
www.viva64.com
42. GCC
• struct { int a; int b; } X = { a : 0, b : 1 };
• func c_open(name *byte, mode int, perm int) int __asm__
("open");
• __is_same (type1, type2)
• Some_Class A __attribute__ ((init_priority (2000)));
Some_Class B __attribute__ ((init_priority (543)));
www.viva64.com
43. GCC (есть даже полезное для простых
программистов, но лучше не использовать)
При использовании оператора "switch", вы можете задать диапазон значений
для "case".
switch (x)
{
case 1 ... 5: Foo1(); break;
case 'A' ... 'Z': Foo1(); break;
}
a = x ?: y; a = x ? x : y;
www.viva64.com
44. GCC. Аналог
анонимных
функций для Си
int Foo(int a) {
int x = Foo1(a);
Foo2();
return x;
}
// Можно записать так:
int Foo(int a) {
return ({ int x = Foo1(a); Foo2(); x; });
}
www.viva64.com
45. Наличие подобных конструкций связано с попыткой помочь делать макросы
более безопасными. Вспомним классическую ошибку при использовании
макроса max:
#define max(a,b) ((a) > (b) ? (a) : (b))
x = max(a++, b);
Операция "++" будет выполнена 2 раза, что не соответствует задуманному
программистом. Чтобы этого избежать, предлагается написать так:
#define maxint(a,b)
({int _a = (a), _b = (b); _a > _b ? _a : _b; })
www.viva64.com
46. GCC. Вложенные функции
double square_sum (double a, double b)
{
double square (double z)
{
return z * z;
}
return square(a) + square(b);
}
www.viva64.com
47. • Ещё один пример. Перенос строки в конце файла.
• Когда люди говорят «да это максимум на неделю дел то», они
просто не понимают, о чём говорят.
• 500 т.р., это дорого! Будем писать сами.
• Программисты часто не различают «поделку» и программный
продукт.
• Работа в разных условиях
• Масштабируемость
• Интерфейс
• Документация
• И т.д.
Редкие ключевые слова и расширения
www.viva64.com
48. Разное
• Почему нет цен на сайте?
• Программисты не умеют считать
• Почему сайт www.viva64.com такой страшный?
• Зато он приносит нам деньги
• Вы ещё сайт Abraxas Software не видели http://www.abxsoft.com/
• Почему единорог?
• А вы что думаете?
www.viva64.com