Доклады конференции CppCon 2014
Недавно в городе Белвью (штат Вашингтон) прошла одна из самых больших конференций С++ разработчиков — CppCon 2014. В течение пяти дней ведущие программисты таких компаний как Microsoft, Google, Dropbox, Citrix, Embarcadero, Ubisoft, разработчики стандарта языка, создатели компиляторов С++ и члены комьюнити opensource-продуктов представляли свои доклады, делились мнениями о будущем языка, предлагали новые идеи. Ниже я представлю выборку наиболее понравившихся мне видео с небольшими комментариями от себя. Хочется отметить, что вся конференция просто пропитана духом возрождения С++ в виду распространения стандартов С++11\14, люди рассказывают почему выбор С++ оказался для них верным, как они успешно мигрировали с C#\Java\Objective-C на С++ и не пожалели об этом и т.д. Удачного просмотра!
Докладчики из Dropbox рассказывают о том, как они разрабатывают на С++ кроссплатформенные мобильные приложения.Когда-то у Дропбокса были классические мобильные приложения: Java-код для Android и Objetive-C для iOs. Однако со временем команде разработчиков надоело писать одно и то же по 2 раза на разных языках и они пришли к выводу о необходимости создания общей кодовой базы на С++. Со временем оказалось, что какую бы архитектуру не имело приложение (MVC, MVVM или что-нибудь другое), фактически весь код кроме вьюх может быть вынесен в С++. Действительно, на С++ можно реализовать модель данных, контроллеры, бизнес-логику, вспомогательные библиотеки для работы с сетью, базами данных, парсингу и т.д. Всё, что остаётся на долю Java и Objective-C — нарисовать «родные» для данной платформы кнопки\списки\лейбы на вьюхах. И этот подход существенно более прагматичен, чем писать всё дважды.
Первое видео более обзорное, второе более практическое:
[embedded content][embedded content]
Edouard Alligand рассказывает о том, как их команда начала разработку большого мультиплатформенного продукта на С++11 в 2008-ом году (не опечатка!), фокусируясь на том, какие именно плюсы и минусы им дала мультиплатформенность.Общая мысль доклада в том, что поддержка нескольких платформ может быть не такой уж сложной, если использовать нужные инструменты. Более того, требование компилироваться разными компиляторами и работать под разными ОС (от Линукса и FreeBSD до iOs и Windows) делает разработчика более дисциплинированным, заставляет его понимать, что «неопределённое поведение» может быть по-разному неопределённым на разных платформах и поэтому нужно избегать острых углов. Докладчик рекомендует всем разработчикам сразу писать код на С++ с учётом того, что он может быть скомпилированным под разные платформы, использовать проверенные мультиплатформенные библиотеки (например, Boost), выбирать в качестве билд-системы CMake и т.д.
[embedded content]
Rachel Cheng и Michael VanLoon рассказывают о библиотеке Boost — её влиянии на новые стандарты С++, о «мосте» к новым фичам для людей, застравших в силу обстоятельств на старых компиляторах. Первая половина доклада посвящена умным указателям и RAII в С++11 и Boost — хорошая возможность разобраться в теме для тех, кто ещё не в курсе. Вторая часть пробегается по некоторым возможностям Boost — работе с перечислениями, инициализации контейнеров, регулярным выражениям, потоками, сетью. Получилась такая-себе несколько идеализированная ода библиотеке Boost, но библиотека ведь и вправду отличная, так что почему бы и нет.
[embedded content]
Gor Nishanov из Microsoft рассказывает об эволюции понятия сопрограммы (coroutine) в C++, возобновляемых функциях в будущем стандарте С++17 и о том, как всё это Microsoft собирается реализовать в своём компиляторе С++. Разговор идёт о том, чем сопрограммы отличаются от потоков, на чём они экономят системные ресурсы, как это всё вписывается в С++, каким образом сопрограммы будут общаться с внешним кодом, а внешний код — с ними.
[embedded content]
Jeff Preshing из Ubisoft первые 5 минут презентации играет роль Капитана Очевидность, рассказывая о том, как за последние 10 лет процессоры компьютеров и приставок стали многоядерными, но дальше презентация идёт бодрее и рассказывается о том, как Ubisoft использует многоядерность и многопоточность в своих игровых движках в таких играх как Watch Dogs, Far Cry и Assassin’s Creed. Джефф рассказывает о том, из каких компонентов состоит движок игры, как эти компоненты могут работать параллельно, обмениваться сообщениями, совместно использовать одни и те же данные из разных потоков и как всё это выглядит на С++.
[embedded content]
Астрофизик Vincent Reverdy из Парижской обсерватории в первой половине доклада пытается минут за 15 объяснить как устроена Вселенная :) Ну вернее, как эту самую Вселенную учёные пытаются симулировать на суперкомпьютерах с как-можно более высокой степенью достоверности. Он рассказывает, что большинство научного софта всё ещё написано на Фортране и порой тяжело использовать преимущества современных архитектур и компиляторов. Дальше говорится о том, какие именно фичи С++ могут быть полезными при написании именно научных программ. Вообще, я бы не сказал, что доклад полезен в плане получения знаний по С++, но даёт неплохое понимание того, что и как делается в современном программировании в сфере науки.
[embedded content]
Lenny Maiorani из компании F5 Networks напоминает о том, что наши теоретические представления о скорости работы и потреблении памяти разными типами контейнеров могут существенно отличаться от реальности и для получения максимальной производительности нужно использовать тесты.
[embedded content]
Alisdair Meredith из комитета по стандартизации С++ рассказывает о стандарте С++14, фокусируясь на том, как проходило рассмотрение и принятие стандарта, почему были сделаны те или иные решения, что и почему вошло и не вошло в стандарт. От доклада в первые 10 минут немного веет бюрократией, но дальше становится интереснее.
[embedded content]
Как известно, все программисты делятся на тех, кто понимает, что такое Unicode и тех, кто �� ��������, ��� ����� Unicode. Именно для второго типа программистов James McNellis (ведущий разработчик из команды Microsoft Visual C++) рассказывает о кодировках, юникоде и о том, как всё это работает в С++ вообще и в Visual C++ от Microsoft в частности. Иронично, конечно, что о важности универсальных кодировок рассказывает разработчик из компании Microsoft, известной в недалёком прошлом своей страстью к велосипедостроению в данной области, но как говорится, лучше поздно, чем никогда.
[embedded content]
Ещё один доклад от разработчика из Ubisoft о том, как у них принято писать на С++. Некоторые вещи поражают своей радикальностью (например, никакого RAII, никаких STL-контейнеров, никакого Boost, использование Visual Studio, но отказ от MSBuild, своя реализация виртуальных функций), но немного подумав, становится понятно, что самая большая гейм-студия в мире, успешно выпускающая ААА-игры, наверное, понимает, что она делает.
[embedded content]
John «JT» Thomas из Embarcadero рассказывает о том, как использование CLANG и LLVM сделало их продукт лучше. Честно говоря, весь доклад меня не покидало некое чувство непонимания о чём вообще речь: в качестве CLANG и LLVM и так никто вроде бы не сомневался, а вот в чём преимущество продуктов Embarcadero на их базе так понятно и не стало. Помнится, Delphi и C++ Builder были популярными продуктами лет 10 назад, возможно, в какой-то части программерской вселенной они всё ещё рулят, но лично я от них как-то очень далёк.
[embedded content]
Борис Колпаков из Code Synthesis поразмышлял о том, как было бы классно иметь менеджер пакетов для С++. Нельзя не согласиться — было бы классно, но в докладе не было ни рассказа о попытке его создать, ни анализа чужих проектов из этой области. В общем, презентация в стиле «а давайте сделаем NuGet для С++ и добавим в него все-все С++ библиотеки» без каких-либо практических советов и выводов.
[embedded content]
Roland Bock из PPRO Financial Ltd рассказал о своих идеях насчёт расширения синтаксиса С++ (параметризации имён полей класса, расширении стандартного типа tuple, CRTP, миксинах).
[embedded content]
Совершенно не технический доклад от Jens Weller о различных конференциях С++ разработчиков. Человек посещает их около десятка в год и сам организовывает одну, так что в теме разбирается. Если выбираете, куда бы съездить — можно послушать.
[embedded content]
Nate Kohl — создатель cppreference.com (одного из самых популярных сайтов с документацией по С++) рассказывает об истории создании этого сайта, наполнении его контентом, создании пользовательского комьюнити и планах этого сайта на будущее.
[embedded content]
James McNellis и Kate Gregory из Microsoft рассказывают о красивом и уродливом коде на С++. В основном говорят достаточно известные вещи о макросах, комментариях, преобразовании типов, декомпозиции кода, велосипедостроении, но в принципе может быть полезно посмотреть и напомнить себе, что код на С++ действительно может быть простым и элегантным.
[embedded content]
Доклад Stefanus DuToit из Thalmic Labs я, честно говоря, не столько слушал, сколько смотрел как он проводит презентацию с разработанным его фирмой браслетом Myo, считывающем электрические импульсы с мышц руки для распознавания жестов. Честно говоря, выглядит несколько странно. С одной стороны — браслет действительно распознает жесты типа «листания» для управления презентацией, с другой стороны докладчику приходится 90% времени стараться держать руку неподвижно во избежание ложного срабатывания. В результате рука с браслетом смотрится как прицепленный к плечу протез, натуральность движений существенно теряется. Простите за уход от темы доклада к впечатлениям от браслета, но в этом докладе это показалось мне интереснее доклада.
[embedded content]
Остальные доклады можно посмотреть на официальном канале конференции: www.youtube.com/user/CppCon