Мы уже выбрали победителей и вручили призы, но вы можете ответить на вопросы викторины, чтобы проверить себя или просто развлечься.
Провели одно из самых востребованных мероприятий на онлайн-конференциях Яндекса.
Бот случайным образом подбирал пары собеседников среди участников мероприятия.
(по московскому времени, GMT+3)
Тезисы: В последние годы практически во всех язызках программирования набирают популярность асинхронные движки с корутинами. ДА давайте посмотрим, как эти движки устроены и что в них такого хорошего для I/O- bound приложений! Посмотрим, как люди жили до современных корутин, рассмотрим базовые компоненты асинхронного движка, и окунеёмся в дивныйм мир движковых оптимизаций и хитростей:
В докладе рассмотрим применение сопрограмм из нового стандарта, обозначим типичные проблемы и способы их преодоления, а также коснемся вопросов масштабируемости приложений.
Как в Яндекс.Такси, изначально реализуемом на Python, пришли к идее о необходимости С++ в стеке технологий. Что переписали первым и почему. Какие трюки в С++ помогают нам справляться с ростом.
В одной из статей Мартин Фаулер писал, что софт более высокого качества обходится дешевле в создании (а не только в поддержке, как можно было бы подумать). Отчасти поэтому сообщество C++ тепло встретило C++ Core Guidelines, представленные в 2015 году. Хотя в них не всегда четко прослеживается грань между абстрактными советами в стиле «хорошо писать хорошо» и более конкретными предложениями, которые можно реализовать в статических анализаторах, наподобие «в таких ситуациях надо проверять вот это». Что же умеют современные статические анализаторы? Какие типичные боли C++ и стилистические неточности они отлавливают? Как разработчики предпочитают взаимодействовать с подобными инструментами? В докладе поговорим об этих вопросах и даже обсудим геймификацию в анализаторах кода.
Хеш-таблицы — это королевы структур данных. Нигде не сломано так много копий, как на оптимизации хеш-таблиц.
В своем докладе я расскажу еще об одной хеш-таблице, которая используется в ClickHouse.
Я покажу, как zero-cost abstractions в современном С++ оправдывают себя и как с помощью небольших трюков можно получить разнообразные структуры данных из общей кодовой базы.
На основе общих строительных блоков мы получим быстроочищаемую хеш-таблицу, несколько видов LRU-кешей, lookup-таблицы без хешей, хеш-таблицы для строк и т. п.
Я расскажу, как получить максимальную производительность на конкретных сценариях и как не ошибиться при ее тестировании.
В моем докладе — самая мякотка низкоуровневых оптимизаций — в общем, то, что мы
любим.
Если взять случайную программу на C++ и начать ееё профилировать, то, как правило, выясняется, что наверху находится функция memcpy. Правда, это еще не значит, что memcpy тормозит. Самое безнадежное, что может начать делать разработчик на C++ (пока никто не видит), — это оптимизировать memcpy, чтобы быстрее перекладывать байты. Именно этим мы займемся.
Have you ever thought about user interface problems? Have you faced an API that you would have designed differently? Have you analyzed why one API is better than another? That’s exactly what library developers do every day. For the products we develop (oneTBB, oneDPL), API usability is our top priority. As we say within the team, never stop at a complex implementation if you see value for the user.
I’m going to tell you about one long brainstorming session we had in the past when trying to build a good API for oneTBB: we talked about templates, parameter sets, type deduction, type traits, metaprogramming, deduction guides, and more. Then, I will lead you from our initial prototype to what is currently shipped with our product (and a bit beyond). If you are not very familiar with the features I’ve listed above, don’t worry. All you need is a basic understanding of templates and I will do my best to explain the rest.
I look forward to an interesting discussion.
Для языков С/С++ хорошо известны техники атак на переполнение буфера в стеке с последующей передачей управления через ROP. Это распространенная, но далеко не единственная проблема, связанная с переполнением выделенной памяти.
Отдельный класс уязвимостей связан с переполнением памяти, выделенной в куче, и перехватом потока исполнения через модификацию памяти с помощью алгоритмов работы аллокаторов.
В докладе будут рассмотрены как простейшие примеры уязвимостей, которые относятся еще к dlmalloс, так и более современные техники.
Видеоигры, обработка аудиосигналов в режиме реального времени и другие подобные приложения низкой задержки требуют того, чтобы код был не только корректным, но также и исчислял требуемый результат надёжно в детерминированный срок выполнения. В этом докладе мы рассмотрим, в какой степени можно использовать стандартную библиотеку С++ для создания приложений с подобными «real-time» ограничениями. Какие инструменты из стандартной библиотеки можно использовать с уверенностью, что они не будут блокировать поток, ждать освобождения мьютекса, не будут выделять или освобождать память и не будут совершать другие подобные действия с недетерминированной задержкой? Каких средств из набора стандартной библиотеки следует избегать и почему? По пути мы обсудим некоторые малоизвестные и неожиданные аспекты этих привычных нам стандартных инструментов.
Перебои и ошибки в работе распределённых систем (будь то Web или IOT) совершенно обычная ситуация. Проблемы в работе с сетью, перебои в работе зависимостей и банальный человеческий фактор — та цена, которую мы платим за общую стабильность системы, лёгкую масштабируемость и гибкость в разработке.
На примере эволюции одного вымышленного (ну, почти вымышленного) сервиса по доставке напитков мы рассмотрим проблемы, с которыми он сталкивался, и решения, которые помогли с ними справиться.
Мы разберём паттерны построения отказоустойчивой системы и примеры их реализации в реальной жизни, которые позволяют нашей системе переживать самые критические моменты. Начав с простейших таймаутов, мы проделаем путь до толстых клиентов и тыкв.
Расскажу, как мы переписали с наскоку весь runtime с большого неуклюжего монолита на Node.js на микросервисы C++.
Много о хорошем:И немного о том, с какими сложностями мы столкнулись.
Уровень доклада: начальный
Доклад будет полезен начинающим разработчикам, которые хотят узнать, что такое писать сервисы на C++. Также может быть полезен разработчикам постарше, ведь в своём докладе я расскажу, как мы сэкономили железо, переиспользовав источники данных.
Возьмём простую задачу — скалярное произведение двух vector< float > — и попробуем выжать все соки для этой задачи. Обсудим вопросы использования возможностей процессора, настроек компилятора (и даже попробуем превзойти его), некоторые сопутствующие вопросы. А также обсудим правильную постановку задачи, приоритеты, выбор архитектуры (да, даже на примере столь простой задачи вопрос правильного выбора абстракций может встать).
Introduction to processor architecture (pipelining, memory latency)
Execution of branches by hardware (branch prediction, speculative execution)
Demonstration of the performance cost of branching
Branch optimization
Converting code to branchless execution
Доклад будет на английском языке.
Представитель России в международной рабочей группе по стандартизации C++ (WG21 ISO). Автор многих принятых предложений к стандарту языка C++.
Председатель российской рабочей группы по стандартизации С++ (https://stdcpp.ru/). Разрабатывает и поддерживает стандартную библиотеку GСC, библиотеки Boost. Aвтор Boost-библиотек TypeIndex, DLL, Stacktrace и активный maintainer Any, Conversion, LexicalCast, Variant.
Автор книг «Boost C++ Application Development Cookbook».
Fedor G. Pikus is a Chief Engineering Scientist in the Design-to-Silicon division of Mentor Graphics (a Siemens business). His earlier positions include Senior Software Engineer at Google and Chief Software Architect for Calibre PERC, LVS, and DFM at Mentor Graphics. He joined Mentor Graphics in 1998 when he made the switch from academic research in computational physics to the software industry. Fedor is a recognized expert in high-performance computing and C++, has presented his works at CPPCon, SD West, DesignCon, and in Software Development Journal, and is also an O’Reilly author. His responsibilities as Chief Scientist include planning the long-term technical direction of Calibre products, directing and training the engineers who work on these products, the design and architecture of the software, and conducting research on new design and software technologies. Fedor has over 25 patents and over 100 papers and conference presentations on physics, EDA, software design, and C++.
Окончил МГУ им. М. В. Ломоносова. В Яндексе с 2008 года. Руководит группой разработки СУБД ClickHouse.
Разработчик C++, специализирующийся на аудио- и музыкальных технологиях. Активный член комитета стандартизации C++.
Занимается разработкой сервисов, обслуживающих одну из самых нагруженных и комплексных частей системы — главный экран Еды. Ежедневно эти сервисы подбирают лучшие предложения для пользователей и обрабатывают трафик со всех приложений, где представлена Яндекс.Еда.
До Яндекса занимался разработкой B2B-платформы финансового моделирования для управления и оценки инвестиций в недвижимость.
В свободное время разрабатывает (но часто времени хватает только пофантазировать) узконаправленные и фановые языки программирования.
Занимается развитием Data Science команды в Kaspersky, которая предоставляет для продуктов и сервисов компании функционал на основе машинного обучения.
В роли Data Scientist участвовал в разработке Kaspersky MLAD и MDR AI Analyst.
В роли разработчика C++ участвовал в создании MaxPatrol SIEM.
В течение многих лет преподает computer science дисциплины в МГТУ ГА.
Автор серии докладов про ML, С, управление DS-проектами и развитие команды. Член ПК конференции C Russia.
23 года опыта разработки на С++, из них 16 — коммерческого. За это время успел плотно поработать с VoIP-телефонией, поучаствовать в создании DPI для магистральных каналов, спроектировать и реализовать облачное хранилище в 10Пб данных, поддерживал и развивал антивирусное SDK. Последние пять лет работает в Яндекс.Такси, где занимается инфраструктурными проектами.
Имеет опыт более 8 лет в коммерческой разработке на C и C++. В прошлом занималась встроенными системами и задачами управления сетевым трафиком, стажировалась в лаборатории Microsoft Research по направлению «Сетевой трафик» и участвовала в запуске сетей поколения 4G в компании Yota. Анастасия уверена в том, что разработка — процесс творческий, а рутинные задачи должны быть переданы «умным» инструментам. Поэтому сейчас она является частью команды JetBrains и работает менеджером по продуктовому маркетингу продуктов для разработки на C++ и .NET. Уже несколько лет занимается организацией встреч питерского сообщества разработчиков C++ (St. Petersburg C++ User Group).
Разработчик WhatsApp, разрабатываю распределенные отказоустойчивые масштабируемые сервисы на С++.
Окончил матмех Уральского федерального университета (УрФУ), там же преподавал на курсах по веб-разработке от Яндекса.
Пришёл в Яндекс четыре года назад, сейчас разрабатывает бэкенд сервиса Яндекс.Погода.
Восемь лет работает в Поиске, занимался разными задачами вокруг ранжирования, как со стороны ML, так и со стороны инфраструктуры и рантайма. Последние два года руководит небольшой группой разработки. Учёная степень по математике.
Пишу простой понятный код.
Руслан — инженер-программист, работающий в команде, специализирующейся на разработке библиотек для параллелизма.
Руслан был техническим лидером в разработке двух библиотек, применяющихся в области автономного вождения. Сейчас Руслан вносит вклад в различные продукты Intel, такие как oneTBB, oneDPL.
Также Руслан является членом рабочей группы по стандартизации С++ с фокусом на стандартную библиотеку C++ и параллелизм.