- Почему C++? Плюсы, минусы.
- Как найти компилятор (поддержка в EUMM, MB, стандартные и не очень решения).
- Конфликты имён.
- Трансляция C++ исключений в Perl-исключения.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
В докладе будет рассказано о тех фундаментальных причинах, приводящих к неоптимальному коду в продукте, будет предложен подход, лишённый найденных недостатков.
Докладываемый подход опирается на технологию Expression Templates, которая позволяет уменьшить количество действий и объём ресурсов, которые требуются для выполнения неких промежуточных действий в процессе формирования каждой записи в журнал. Эта технология используется для уменьшения количества промежуточных операций при вычислении сложных математических выражений. Новизна докладываемого подхода в том, что тот же самый принцип, на котором основана технология Expression Templates можно применить для того, чтобы целенаправленно исключить те промежуточные действия, которые в конечном итоге приводят к неоптимальному коду.
Завершается доклад обсуждением полученного эффекта, путей возможного дальнейшего развития и возможностей применения этой же технологии в других задачах.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
Григорий Демченко, Асинхронность и неблокирующая синхронизацияSergey Platonov
Практика показывает, что использование подхода, основанного на колбеках для асинхронного программирования обычно не является удобным и подвержено различным ошибкам. Для упрощения написания и поддержки сложных асинхронных программ можно использовать несколько иной подход: использовать сопрограммы для переключения контекста на время ожидания события. Такой подход позволяет реализовать интересные неблокирующие примитивы, включая неблокирующее сетевое взаимодействие, неблокирующие мьютексы, а также удобное переключение между различными пулами потоков для разнесения выполнения задач, которые требуют различные ресурсы.
Оптимизация трассирования с использованием Expression templatesPlatonov Sergey
В докладе будет рассказано о тех фундаментальных причинах, приводящих к неоптимальному коду в продукте, будет предложен подход, лишённый найденных недостатков.
Докладываемый подход опирается на технологию Expression Templates, которая позволяет уменьшить количество действий и объём ресурсов, которые требуются для выполнения неких промежуточных действий в процессе формирования каждой записи в журнал. Эта технология используется для уменьшения количества промежуточных операций при вычислении сложных математических выражений. Новизна докладываемого подхода в том, что тот же самый принцип, на котором основана технология Expression Templates можно применить для того, чтобы целенаправленно исключить те промежуточные действия, которые в конечном итоге приводят к неоптимальному коду.
Завершается доклад обсуждением полученного эффекта, путей возможного дальнейшего развития и возможностей применения этой же технологии в других задачах.
Полухин Антон, Как делать не надо: C++ велосипедостроение для профессионаловSergey Platonov
В докладе перед нами откроется великолепный мир велосипедов и устаревших технологий, которые люди продолжают переносить в новые проекты и повсеместно использовать. Мы поговорим о:
Copy-On-Write
разработке без оглядки на готовые решения и к чему это приводит
force inline
оптимизациях, которые отлично себя показывают на бенчмарках и плохо себя ведут в реальной жизни
бездумно отключаемых оптимизациях компилятора
тонкостях стандартной библиотеки для повседневного использования
супер качественном велосипедостроении
Сергей Шамбир, Адаптация Promise/A+ для взаимодействия между C++ и JavascriptSergey Platonov
Шаблоны — мощный инструмент, добавляющий в язык новые возможности, а программистам в команде — новые проблемы. Доклад покажет, как тщательно продуманный шаблонный код может не усложнить, а упростить жизнь и дать надёжную абстракцию межпроцессных межъязыковых асинхронных вызовов функций. С помощью шаблонов можно:
адаптировать Promise/A+ из Javascript для C++
автоматически проверять и раскладывать динамический массив аргументов на статичные аргументы функции
сделать аналог std::bind для weak_ptr.
Эти вещи будут показаны на примере взаимных вызовов между C++ и Javascript в одном приложении с помощью CEF3.
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
Одной из проблем C++ является большое количество конструкций, поведение которых не определено или просто неожиданно для программиста. С такими ошибками мы часто сталкиваемся при разработке статического анализатора кода. Но, как известно, лучше всего находить ошибки ещё на этапе компиляции. На этом докладе мы поговорим о том, какие техники из современного C++ позволяют писать не только более простой и выразительный, но и безопасный код. Вы увидите ошибки в коде различных Open Source проектов и узнаете, как можно их избежать, используя новые стандарты
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Мало кто отчетливо представляет, как работают исключения в С++.
Автор пытается восполнить этот пробел, заодно пытаясь выяснить, почему всё устроено так как оно устроено и нельзя ли там чего-нибудь улучшить.
1) Две основные проблемы - как обустроить раскрутку стека
и как осуществить передачу управления при возникновении исключения
2) Раскрутка стека - GCC LDSA, MSVC32, MSVC64
3) Передача управления - SJLJ, DW2, MSVC
4) Раскручиваем стек своими руками
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Юнит-тестирование и Google Mock. Влад Лосев, Googleyaevents
Владимир Лосев, Google
Закончил математико-механический факультет Санкт-Петербургского государственного университета в 1995 году. Работал в компаниях Motоrola, Fair Isaac и Yahoo. С 2008 года работает в Google, в группе, занимающейся вопросами повышения производительности инженеров.
Тема доклада
Юнит-тестирование и Google Mock.
Тезисы
В модульных (юнит) тестах каждый элемент программы тестируется по отдельности, в изоляции от других. Такие тесты исполняются очень быстро, поэтому их можно запускать когда угодно, что позволяет отлавливать дефекты на самых ранних стадиях разработки. Однако для тестирования объекта в изоляции от других необходимо имитировать поведение связанных с ним объектов, что на C++ довольно утомительное занятие. Разработанная в Googlе библиотека для создания и использования mock-объектов — Google Mock — позволяет существенно упростить этот процесс и ускорить написание тестов. В докладе пойдет речь о принципах и возможностях библиотеки, примерах её использования и её внутреннем устройстве.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
В докладе будут сделаны попытки ответить на вопросы, какой тип скрывается под маской auto, почему T&& не всегда rvalue, и почему move ничего не двигает.
Studying geneva real estate prices using perl grammarsLaurent Dami
Geneva real estate transactions are published online, in free text. Perl regexes and grammars provide powerful tools to extract structured data from such free text and be able to get some trends and synthetic figures
Павел Беликов, Как избежать ошибок, используя современный C++Sergey Platonov
Одной из проблем C++ является большое количество конструкций, поведение которых не определено или просто неожиданно для программиста. С такими ошибками мы часто сталкиваемся при разработке статического анализатора кода. Но, как известно, лучше всего находить ошибки ещё на этапе компиляции. На этом докладе мы поговорим о том, какие техники из современного C++ позволяют писать не только более простой и выразительный, но и безопасный код. Вы увидите ошибки в коде различных Open Source проектов и узнаете, как можно их избежать, используя новые стандарты
Евгений Зуев, С++ в России: Стандарт языка и его реализацияPlatonov Sergey
Доклад посвящён различным аспектам компилятора С++, созданного с участием автора. В выступлении рассказывается о продвинутой архитектуре компилятора, основных проектных решениях, а также обсуждаются особенности входного языка, повлиявшие на реализацию компилятора.
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4 Dima Dzuba
Описываются возможности C++ по работе с наследованием (virtual, override, final). Описываются механизмы работы с константными переменными и методами (const, mutable, constexpr). Описываются возможности по перегрузке операторов (operator).
Мало кто отчетливо представляет, как работают исключения в С++.
Автор пытается восполнить этот пробел, заодно пытаясь выяснить, почему всё устроено так как оно устроено и нельзя ли там чего-нибудь улучшить.
1) Две основные проблемы - как обустроить раскрутку стека
и как осуществить передачу управления при возникновении исключения
2) Раскрутка стека - GCC LDSA, MSVC32, MSVC64
3) Передача управления - SJLJ, DW2, MSVC
4) Раскручиваем стек своими руками
SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотекPython Meetup
"SWIG — cоздание мультиязыковых интерфейсов для C/C++ библиотек", Алексей Черкес
Кратко рассказано о том, что такое биндинг и Pуthon c API. Краткий обзор средств биндинга для Python. SWIG: что такое, зачем нужен, особенности, схема работы утилит, порядок запуска и сборки, принципы работы, как происходит сопоставление объектных моделей С++ и целевого языка. Примеры на Python и C#. Опыт применения, плюсы/минусы.
Использование юнит-тестов для повышения качества разработкиvictor-yastrebov
В докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov Sergey
Кто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Юнит-тестирование и Google Mock. Влад Лосев, Googleyaevents
Владимир Лосев, Google
Закончил математико-механический факультет Санкт-Петербургского государственного университета в 1995 году. Работал в компаниях Motоrola, Fair Isaac и Yahoo. С 2008 года работает в Google, в группе, занимающейся вопросами повышения производительности инженеров.
Тема доклада
Юнит-тестирование и Google Mock.
Тезисы
В модульных (юнит) тестах каждый элемент программы тестируется по отдельности, в изоляции от других. Такие тесты исполняются очень быстро, поэтому их можно запускать когда угодно, что позволяет отлавливать дефекты на самых ранних стадиях разработки. Однако для тестирования объекта в изоляции от других необходимо имитировать поведение связанных с ним объектов, что на C++ довольно утомительное занятие. Разработанная в Googlе библиотека для создания и использования mock-объектов — Google Mock — позволяет существенно упростить этот процесс и ускорить написание тестов. В докладе пойдет речь о принципах и возможностях библиотеки, примерах её использования и её внутреннем устройстве.
Юрий Ефимочев, Компилируемые в реальном времени DSL для С++ Sergey Platonov
В последнее время в промышленной разработке ПО особую популярность обретают Domain-Specific Lanugages (DSL). Они драматически упрощают разработку и дают возможность “программировать” не только программистам, но и пользователям прикладных программ.
В своем докладе я расскажу об опыте использования DSL применительно к С++, причем упор будет сделан на производительность кода DSL, и его мгновенную “встраиваемость” в запущенную программу путем компиляции DSL-кода в нативный код с помощью инструментария LLVM.
Дмитрий Кашицын, Троллейбус из буханки: алиасинг и векторизация в LLVMSergey Platonov
Зачастую, знакомство с алиасингом в C++ у многих программистов начинается и заканчивается одинаково: -fno-strict-aliasing. На вопросы новичка, более опытные коллеги отвечают в стиле: «не трогай! а то все сломаешь!». Новичок и не трогает. В докладе будет предпринята попытка заглянуть под капот и понять, что же там, внутри. Что такое алиасинг, где он может быть полезен и какие реальные преимущества дает. Тема будет рассмотрена и со стороны программиста и со стороны разработчика компилятора. А по сему, вопрос «зачем?» будет центральным в повествовании.
В докладе будут сделаны попытки ответить на вопросы, какой тип скрывается под маской auto, почему T&& не всегда rvalue, и почему move ничего не двигает.
Studying geneva real estate prices using perl grammarsLaurent Dami
Geneva real estate transactions are published online, in free text. Perl regexes and grammars provide powerful tools to extract structured data from such free text and be able to get some trends and synthetic figures
This document describes an interactive multi-label image segmentation algorithm called "GrowCut" based on cellular automata. The algorithm can segment N-dimensional images with multiple labels. With modest user input of labeled pixels, GrowCut automatically segments the rest of the image in an iterative process. It requires less user effort than other techniques for moderately difficult images. The algorithm has advantages such as efficiency, parallelizability, and extensibility to generate new segmentation methods.
Perl для не программистов. Николай Мишин. Moscow.pm 4 июля 2013Moscow.pm
- Как создать презентацию не вылезая из любимого текстового редактора (notepad++, padre, vim).
- Как perl помогает автоматизировать работу без написания кода.
- Пара скриптов, которые облегчают работу на разных платформах.
- Те же скрипты на perl6.
- Автоматизация и тестирование Firefox.
Mojolicious is a pure-Perl web framework that is object-oriented and has no dependencies. It supports features like HTTP, WebSocket, SSL, and can be used with different server architectures like CGI, FastCGI, PSGI, and as a daemon. The framework includes several core modules that provide functionality like templates, JSON encoding/decoding, byte stream manipulation, and more.
Не верь никому или разработка эффективных приложений (Как писать по настоящем...Moscow.pm
Видео: http://video.mail.ru/corp/p.scherbinin/6/11.html
— Знай свою среду. Почему нужно изучать язык, на котором пишешь.
— Магии нет. Есть непонимание процессов.
— Не верь предрассудкам. Они сложились при других обстоятельствах.
— Доверяй, но проверяй. Прежде, чем использовать решение, проверь.
— Не используй не изучив. Не используй не понимая.
— Код можно менять. Как делать это с умом.
— Можно ли доверять синтетике? Синтетические тесты и реальная нагрузка.
— Немного примеров. Плохих и хороших.
This document discusses the development of high-performance services at Mail.ru for tasks like serving avatars. It describes how they use technologies like Perl, AnyEvent, IProto and Tarantool to process over 100,000 requests per second on a single server. Key points are:
1. Mail.ru uses Perl 7 with AnyEvent and IProto to build asynchronous services that can handle 40,000-120,000 requests per second per core.
2. They store data in the Tarantool NoSQL database for its performance and ability to handle multiple indexes.
3. By using these technologies like async Perl and Tarantool, they can process over 100,000 requests per second with a
Anatoly Sharifulin created a Guitar Hero radio station using Perl by scraping Wikipedia for tracklists, accessing the VKontakte API to download MP3 files, and building a Frodio radio station with the tracks. The radio station was a success, receiving over 2,000 likes on Facebook with over 70 concurrent listeners. Perl allowed Anatoly to efficiently parse data, download files within API limits, and build a functional radio station for Guitar Hero fans.
Ленивые итераторы для разбора разнородных данных. Михаил Озеров. Moscow.pm 6 ...Moscow.pm
— От циклов к коллбэкам
— От коллбэков к итераторам
— Борьба со сложностью, изоляция аспектов
— Гибкость и модифицируемость кода
— Преимущества и недостатки
The document summarizes the internals of AnyEvent, an asynchronous programming module for Perl. It provides examples of using AnyEvent to implement asynchronous I/O, timers, signals, idle callbacks, condition variables, HTTP requests and handling HTTP responses. Key classes and methods discussed include AE::io, AE::timer, AE::signal, AE::idle, AE::cv, http_request, push_read/write, on_read/eof/error.
An update of my Perl Myths talk (for http://ossbarcamp.com in Dublin, Ireland, September 2009). It covers jobs, cpan, community, best practices, power tools, and perl 6.
This document summarizes 7 tools for a DevOps stack: Puppet, MCollective, Logstash, Kibana, Graphite, Vagrant, and FPM. It provides an overview of what each tool is used for, such as configuration management with Puppet, distributed orchestration with MCollective, log aggregation with Logstash, log visualization with Kibana, metrics collection and graphing with Graphite, infrastructure automation with Vagrant, and packaging with FPM. The document also includes examples and screenshots demonstrating how some of the tools can be used.
Наталья Савенкова, ex-СТО SHOP2YOU.RU. В e-commerce файлы формата Excel – основной инструмент обмена данными. Они используются везде: для документов покупателям и транспортным компаниям, для отчетов менеджерам, для импорта и экспорта товаров в магазин, для обмена остатками между поставщиками. Их нужно уметь читать и писать. Наталья объяснит, как это делать с документами разной структуры, а также поговорит о сложностях и их решениях. Доклад посвящен классическому формату Excel 1997-2003 (XLS) и модулям: Spreadsheet::ParseExcel, Spreadsheet::WriteExcel и Excel::Template.
The document discusses various Perl modules and libraries by Mons Anderson including:
- AnyEvent modules for asynchronous programming like AnyEvent::Connection and AnyEvent::SMTP
- XML parsing modules like XML::RPC::Fast and XML::Parser::Style::EasyTree
- Testing modules like Test::Dist and Test::If
- Image processing modules like Image::JpegTran and Image::LibExif
- Daemond for daemonization and process supervision
- Devel::Rewrite for modifying code during development
- Dash::Leak for detecting memory leaks
The document also provides examples of using various modules and recommends best practices.
Построение компилятора на базе LLVM — Павел СычевYandex
Мы поговорим про компиляторы и их архитектуру. Обсудим, что же такое LLVM и зачем он нам нужен. Также рассмотрим, как написать компилятор простого языка программирования на LLVM.
Андрей Карпов
Вы узнаете, что такое статический анализ кода и историю его развития. Узнаете, как эффективно применять инструменты статического анализа в своей работе, увидите практические примеры использования этой методологии. Доклад ориентирован на программистов, использующих языки Си/Си++, но будет полезен всем
Слайды одноименного доклада с конференции "C++ Russia 2018". В докладе речь идет о том, насколько C++ мешает и насколько C++ помогает в разработке акторного фреймворка для C++.
Moscow Python Conf 2016. Почему 100% покрытие это плохо?Ivan Tsyganov
Я работаю над продуктом Max Patrol компании Positive Technologies. Кодовая база нашего проекта насчитывает более 50 тысяч строк кода. Без хороших тестов работа с таким объемом кода превратилась бы в кошмар. Многие программисты стремятся к 100% покрытию кода тестами и считают, что это избавит их от множества проблем. Я расскажу о том, с какими трудностями мы столкнулись и почему заветные 100% ничего не говорят о покрытии тестируемого кода. Я приведу примеры кода и тестов, которые показывают 100% покрытие и покажу почему это не так. Я рассмотрю как работает библиотека coverage.py и объясню почему не стоит слепо верить результатам ее работы. Так же я поделюсь идеей получения честной метрики покрытия кода тестами и представлю прототип библиотеки, в которую воплотилась эта идея.
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarova
Это моя очередная заметка о том, как PVS-Studio делает программы более надёжными. То есть где, и какие ошибки он обнаруживает. На этот раз под молоток попали примеры, демонстрирующие работу с библиотекой IPP 7.0 (Intel Performance Primitives Library).
Опыт разработки статического анализатора кодаAndrey Karpov
Один из основателей проекта PVS-Studio расскажет об опыте разработки статического анализатора кода C++. У инструментов статического анализа кода существует "проблема айсберга". От пользователей скрыты сложные механизмы анализа кода, и иногда им кажется, что статические анализаторы – это просто какие-то утилиты, ищущие опечатки с помощью регулярных выражений. Автор доклада постарается в общих чертах описать, как всё обстоит на самом деле. Он покажет на примерах, почему нормальный анализ с помощью регулярных выражений нереализуем, что такое Data Flow анализ, а также расскажет о других технологиях, применяемых при анализе кода. Вкратце будет затронут вопрос использования нейронных сетей, обсуждение которых сейчас является очень модной темой, и рассказано, почему с точки зрения анализа кода отношение к этому направлению является очень скептическим.
Статический анализ кода: Что? Как? Зачем?Andrey Karpov
Методология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
C++ CoreHard Autumn 2018. Что не умеет оптимизировать компилятор - Александр ...corehard_by
Все мы знаем, что компиляторы в настоящее время достаточно умные. И нам как программистам зачастую не нужно думать о каких-то незначительных оптимизациях - мы полагаемся на оптимизации компилятора. Что ж, настало время выяснить, действительно ли настолько компиляторы умны и узнать, в каких местах программист всё же (может быть) умнее.
Fast queue – как мы сделали свою очередь на perl и redisMoscow.pm
Иван Соколов, teamlead REG.RU. Очередь – один из наиболее используемых механизмов в программировании. Например, для интеграции с платежными системами или для обработки медиа-контента, загруженного пользователем, необходимо наличие очередей.
В REG.RU тоже не обходятся без очередей. Поэтому потребность найти решение появилась достаточно давно. Учитывая специфику компании как доменного регистратора большинство существующих решений не подходило, и программисты решили «написать свой велосипед». Иван расскажет об архитектуре их очереди, ее возможностях, и в каких задачах она используется.
Пластилиновый код: как перестать кодить и начать житьMoscow.pm
Елена Шишкина, ведущий программист Деньги Mail.Ru. Она покажет практический пример лени как двигателя прогресса в отдельно взятом веб-проекте:
- Надоело писать код? Будем думать, как его не писать!
- Боремся с однотипным кодом. Боремся с неоднотипным кодом.
- Код, которого не существует, и код, который существует.
- Следите за руками: программируем на конфигах!
- Как жить дальше?
Преобразование Perl-структур в XML. Трефилова Екатерина. Moscow.pm 6 июля 2013Moscow.pm
— Парсинг XML-документов.
— Формирование простых и сложных XML
— Немного о DOM и парсерах, основанных на событиях SAX
— Какими модулями удобно пользоваться и почему
Play Perl — распределенная социальная игра для Perl-разработчиков. Вячеслав М...Moscow.pm
Видео: http://video.mail.ru/corp/p.scherbinin/6/10.html
Расскал о том:
— Как настоящие соцсети будущего будут поощрять действие, а не потребление.
— Как геймификация изменит мир.
— Как Play Perl спасет сообщество perl-разработчиков от застоя и сделает нас всех более продуктивными.
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...Moscow.pm
Видео: http://video.mail.ru/corp/p.scherbinin/6/7.html
Tаблица символов — это только небольшой шаг в мир внутреннего устройства Perl, но и он открывает программисту огромные возможности:
— Runtime-кодогенерация.
— Генерация по запросу.
— Изменение кода сторонних модулей на лету и многое другое.
Динамический код: модифицируем таблицу символов во время выполнения. Елена Ши...
Особенности создания XS-модулей на языке C++. Владимир Тимофеев. Moscow.pm 4 июля 2013
1. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Особенности создания XS-модулей на языке
C++
Владимир Тимофеев
2013
2. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
1 Введение
2 Пример
3 Как найти компилятор
4 Конфликты имен
5 Исключения
6 Заключение
3. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
1 Введение
Почему XS
Почему C++
2 Пример
3 Как найти компилятор
4 Конфликты имен
5 Исключения
6 Заключение
4. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Почему XS?
Потому что мы хотим:
Увеличить производительность
5. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Почему XS?
Потому что мы хотим:
Увеличить производительность
Уменьшить потребление памяти
6. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Почему XS?
Потому что мы хотим:
Увеличить производительность
Уменьшить потребление памяти
Использовать сторонние компоненты
7. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Почему C++ ?
XS – кодогенератор для C. Но C++ …
Похож на C
8. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Почему C++ ?
XS – кодогенератор для C. Но C++ …
Похож на C
Сравним по скорости и потреблению памяти
9. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Почему C++ ?
XS – кодогенератор для C. Но C++ …
Похож на C
Сравним по скорости и потреблению памяти
+ Инкапсуляция
10. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Почему C++ ?
XS – кодогенератор для C. Но C++ …
Похож на C
Сравним по скорости и потреблению памяти
+ Инкапсуляция
+ STL, Boost, …
11. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
1 Введение
2 Пример
Обзор файлов
3 Как найти компилятор
4 Конфликты имен
5 Исключения
6 Заключение
12. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Пример
Makefile.PL CppStat.pm CppStat.xs typemap perlobject.map
1 use ExtUtils::MakeMaker;
3 my $CC = ’g++’;
5 WriteMakefile(
NAME = ’CppStat’,
7 VERSION_FROM = ’CppStat.pm’,
TYPEMAPS = [’perlobject.map’],
9 CC = $CC,
LD = ’$(CC)’,
11 );
13. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Пример
Makefile.PL CppStat.pm CppStat.xs typemap perlobject.map
package CppStat;
2 use strict;
use warnings;
4
our $VERSION = ’0.01’;
6
require XSLoader;
8 XSLoader::load(’CppStat’, $VERSION);
10 1;
16. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Пример
Makefile.PL CppStat.pm CppStat.xs typemap perlobject.map
34 MODULE = CppStat PACKAGE = CppStat
36 CppStat*
CppStat::new();
38
void
40 CppStat::DESTROY();
42 void
CppStat::add(double val);
44
double
46 CppStat::avg();
17. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Пример
Makefile.PL CppStat.pm CppStat.xs typemap perlobject.map
TYPEMAP
2 CppStat * O_OBJECT
18. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Пример
Makefile.PL CppStat.pm CppStat.xs typemap perlobject.map
Можно поискать в интернете
или сгенерировать с помощью модуля
ExtUtils::Typemap::ObjectMap на CPAN
или почитать perldoc perlxs
19. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
1 Введение
2 Пример
3 Как найти компилятор
CC = g++
-x c++
ExtUtils::CppGuess
Module::Build::WithXSpp
Статистика
4 Конфликты имен
5 Исключения
6 Заключение
20. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
CC = g++
use ExtUtils::MakeMaker;
2
my $CC = ’g++’;
4
WriteMakefile(
6 NAME = ’CppStat’,
VERSION_FROM = ’CppStat.pm’,
8 TYPEMAPS = [’perlobject.map’],
CC = $CC,
10 LD = ’$(CC)’,
);
Только GCC
Все файлы как C++
21. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
-x c++
1 use ExtUtils::MakeMaker;
use Config;
3
my $CCFLAGS = join(’ ’,$Config{ccflags},’-x c++’);
5
WriteMakefile(
7 NAME = ’CppStat’,
VERSION_FROM = ’CppStat.pm’,
9 TYPEMAPS = [’perlobject.map’],
LIBS = [’-lstdc++’],
11 CCFLAGS = $CCFLAGS ,
);
Компилятор тот же, что для perl
Компилятор должен понимать опцию -x (GCC,Clang)
Все файлы как C++
22. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
ExtUtils::CppGuess
use ExtUtils::MakeMaker;
2 use ExtUtils::CppGuess;
4 my $guess = ExtUtils::CppGuess -new;
6 WriteMakefile(
NAME = ’CppStat’,
8 VERSION_FROM = ’CppStat.pm’,
TYPEMAPS = [’perlobject.map’],
10 CONFIGURE_REQUIRES = {
’ExtUtils::CppGuess’ = 0,
12 },
$guess-makemaker_options ,
14 );
Компилятор тот же, что для perl
GCC,Clang,MSVC
Все файлы как C++
23. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Module::Build::WithXSpp
Использует ExtUtils::CppGuess, но...
XS++
Module::Build
24. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Статистика
Всего на CPAN: ∼ 120
CC = g++: ∼ 50
ExtUtils::CppGuess: 13
Module::Build: ∼ 15
Module::Build::WithXSpp: 6
25. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
1 Введение
2 Пример
3 Как найти компилятор
4 Конфликты имен
iostream
5 Исключения
6 Заключение
27. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
1 Введение
2 Пример
3 Как найти компилятор
4 Конфликты имен
5 Исключения
Обычная генерация Perl-исключений
Наивная реализация C++ -исключений
C++ -исключения без утечек
6 Заключение
28. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Просто и неправильно
MyClass.cc
1 void MyClass::method(int arg) {
std::vectorint tmp;
3 if (arg 0) croak(”MyClass::method: arg should
be positive”);
// ...
5 }
29. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Просто и неправильно
MyClass.cc
1 void MyClass::method(int arg) {
std::vectorint tmp;
3 if (arg 0) croak(”MyClass::method: arg should
be positive”);
// ...
5 }
Утечка памяти
30. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Просто и неправильно
MyClass.cc
1 void MyClass::method(int arg) {
std::vectorint tmp;
3 if (arg 0) croak(”MyClass::method: arg should
be positive”);
// ...
5 }
Утечка памяти
Деструктор для tmp вызван не будет
31. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Просто и неправильно
MyClass.cc
1 void MyClass::method(int arg) {
std::vectorint tmp;
3 if (arg 0) croak(”MyClass::method: arg should
be positive”);
// ...
5 }
Утечка памяти
Деструктор для tmp вызван не будет
Потому что croak реализован через longjmp
32. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Переходим к C++ исключениям
MyClass.cc
1 #include stdexcept
void MyClass::method(int arg) {
3 std::vectorint tmp;
if (arg 0) throw std::runtime_error(
5 ”MyClass::method: arg should be positive”
);
7 // ...
}
Программа упадет
Исключение надо еще перехватить
33. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Переходим к C++ исключениям
MyModule.xs
void
2 MyClass::method(int arg);
Придется переписать и обернуть в try...catch.
34. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Переходим к C++ исключениям
MyModule.xs
void
2 MyClass::method(int arg);
Придется переписать и обернуть в try...catch.
void
2 MyClass::method(int arg)
CODE:
4 try {
THIS-method(arg);
6 }
catch (const std::exception e) {
8 croak(”Ops: %s”, e.what());
}
10 catch (...) {
croak(”Ops: unknown c++ exception”);
12 }
35. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Переходим к C++ исключениям
void
2 MyClass::method(int arg)
CODE:
4 try {
THIS-method(arg);
6 }
catch (const std::exception e) {
8 croak(”Ops: %s”, e.what());
}
10 catch (...) {
croak(”Ops: unknown c++ exception”);
12 }
36. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Переходим к C++ исключениям
void
2 MyClass::method(int arg)
CODE:
4 try {
THIS-method(arg);
6 }
catch (const std::exception e) {
8 croak(”Ops: %s”, e.what());
}
10 catch (...) {
croak(”Ops: unknown c++ exception”);
12 }
И получим опять утечку памяти (хоть и мелкую)
37. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Переходим к C++ исключениям
void
2 MyClass::method(int arg)
CODE:
4 try {
THIS-method(arg);
6 }
catch (const std::exception e) {
8 croak(”Ops: %s”, e.what());
}
10 catch (...) {
croak(”Ops: unknown c++ exception”);
12 }
И получим опять утечку памяти (хоть и мелкую)
Именно в такой код наши вызовы оборачивает
ExtUtils::XSpp
38. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Вот так не течет
void
2 MyClass::method(int arg)
CODE:
4 char errmsg[1024];
errmsg[0] = ’0’;
6 try {
THIS-method(arg);
8 }
catch (const std::exception e) {
10 snprintf(errmsg, 1024, ”Ops: %s”, e.what())
;
}
12 catch (...) {
snprintf(errmsg, 1024, ”Ops: unknown c++
exception”);
14 }
if (errmsg[0]) {
16 croak(”%s”, errmsg);
}
39. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
1 Введение
2 Пример
3 Как найти компилятор
4 Конфликты имен
5 Исключения
6 Заключение
MakeMaker?
exceptions
Выводы
40. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Хотелось бы писать Makefile.PL так
1 use ExtUtils::MakeMaker;
3 WriteMakefile(
NAME = ’CppStat’,
5 VERSION_FROM = ’CppStat.pm’,
TYPEMAPS = [’perlobject.map’],
7 XS_LANG = ’c++’,
);
41. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Может быть XS может выглядеть так?
void
2 MyClass::method(int arg)
CPPCATCH: std
42. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Итого
Писать на C++ можно
43. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Итого
Писать на C++ можно
Есть поле для улучшений
44. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Итого
Писать на C++ можно
Есть поле для улучшений
Вопросы?
45. Введение Пример Как найти компилятор Конфликты имен Исключения Заключение
Итого
Писать на C++ можно
Есть поле для улучшений
Вопросы?
mailto:vovkasm@gmail.com
Эта презентация доступна на
github.com/vovkasm/using-cpp-in-perlxs-slides