Сотрудники Яндекса будут представлять Россию в комитете по стандартизации C++
Хочу поделиться с вами радостной новостью: теперь мы можем влиять на развитие C++! Под «мы» я имею в виду всех российских программистов, работающих с C++.
Но обо всем по порядку.
Язык программирования C++ развивается не стихийно. Его развитие контролирует международная организация ISO/IEC, а точнее, рабочая группа внутри этой организации ISO/IEC JTC1/SC22/WG21 C++. В её обязанности входит рассмотрение предложений по улучшению языка и стандартной библиотеки, голосование по предложениям и написание коротких отзывов по ним (почему предложение не прошло голосование, что именно не понравилось в предложении и т. д.). Причём большую часть предложений, как правило, вносят сами же члены комитета.
Ради славы и денег :) А ещё ради того, чтобы писать код было удобнее и работало всё быстрее.
Начнём с простоты написания кода. Чем больше отличных решений будет внутри стандартной библиотеки, тем меньше велосипедов надо будет изобретать для типовых задач. Раньше не было std: thread — и всем приходилось писать свои классы для кроссплатформенной работы с потоками. Раньше не было std: array — и мало кто знал как вернуть массив из функции. std: atomic избавил людей от необходимости опускаться до ассемблерного кода или до использования специфичных для компилятора расширений.
Теперь о быстродействии. Можно зафиксировать в стандарте наиболее оптимальные решения, либо добавить новые возможности, ускоряющие код «из коробки». Например rvalue-references позволили ускорить некоторые приложения, не меняя пользовательский код. std: string с недавнего времени обзавёлся возможностью хранить небольшие строки без динамических аллокаций памяти, что также положительно повлияло на производительность приложений.
Ну, а теперь о славе и деньгах. Представьте диалог при приёме на работу:
— Вы работали с компонентом стандартной библиотеки std: что-то-там?
— Да, это я придумал std: что-то-там и занимался его продвижением языка C++.
— Вы приняты!
C++ является одним из основных языков разработки в Яндексе. Недавно мы подумали, что хорошо бы иметь больший контроль над таким важным для нас инструментом. Так мы начали копать в сторону создания рабочей группы по C++. Цели были амбициозные: разобраться в том, как всё устроено в комитете по стандартизации C++, создать рабочую группу из людей, которым данная тема близка, дать возможность российским разработчикам влиять на развитие языка, получить возможность переносить наши удачные разработки в стандарт и т.д.
Так сотрудники Яндекса копали, копали и случайно докопались до меня, который к тому моменту уже работал в Яндексе.
Как вам, возможно, известно, в свободное от работы время я занимаюсь разработкой библиотеки Boost, активно помогаю людям по всему миру с написанием предложений по улучшению стандарта, имею несколько собственных предложений по улучшению стандарта C++, находящихся в рассмотрении.
— Стоп, стоп, стоп! — заметит тут читатель. — Если предложения по C++ можно принимать и без Яндекса, зачем нам Яндекс?
Всё очень просто. Вы можете написать предложение по улучшению языка C++, но есть несколько нюансов.
- Нужно быть сильно «в теме» и знать, что именно писать в предложении, чтобы не пришлось его десять раз переписывать.
- Вам придется либо самому оказаться на заседании WG21, либо найти человека, который поедет на заседание комитета в Америке или Европе и будет отстаивать там ваше предложение и отвечать на вопросы.
- Некоторые удачные предложения были приняты с перевесом в один голос, так что неплохо иметь союзников в комитете.
- На заседаниях порой «не хватает рук». Если в заседаниях будут участвовать представители Яндекса, можно будет либо рассмотреть больше заявок, либо подробнее расписать авторам предложений, что необходимо доработать.
Именно с этими проблемами мы и должны будем помогать. Помимо меня, группой будет руководить Александр Фокин, который руководит одной из команд, разрабатывающих Поиск, и активно помогает в модернизации кодовой базы и внедрении в рабочую практику возможностей новых стандартов C++.
В данный момент мы в самом начале пути. Мы создали рабочую группу (РГ21) на основе сотрудников Яндекса, группа является национальной зеркальной рабочей группой ISO/IEC JTC1/SC22/WG21 C++.
Нам еще необходимо доразобраться в бюрократических вопросах, познакомиться с членами WG21, поучаствовать в нескольких заседаниях и влиться в рабочий процесс. Вдобавок на носу C++17, и все сейчас загружены подготовкой финальной версии стандарта. Но если все пойдет по плану, то в декабре этого года мы уже начнем помогать российским разработчикам с предложениями по развитию языка C++.
Нас очень интересует стандартизация плоских контейнеров, наподобие boost: container: flat_set и boost: container: flat_map. Это сложная работа и проводить её надо аккуратно, консультируясь с ведущими разработчиками подобных контейнеров.
Ещё у нас есть ряд компонентов, которые широко используются в нашем коде и которые будут полезны множеству разработчиков. Первое, что приходит на ум, это класс для вывода stack trace. Чтобы включить наши компоненты в стандарт, надо много чего: перевести наименования в нижний регистр, оторвать от класса компоненты, которых нет в стандарте, добавить интеграцию с классическими потоками ввода/вывода, выложить в открытый доступ, получить отзывы и т. д.
Мы также надеемся, что начнётся работа над предложениями по Dynamic Library Load — P0275R0 и P0276R0. Раньше подобные предложения отклонялись из-за их сложности, но в этот раз получилось свести изменения в ядре языка к минимуму.
Также есть идеи по крайне проблемным для продвижения вещам, таким как интерфейсные классы, доступ к полям структур по индексу и базовая рефлексия.
Мы создали рассылку cpp-proposals@yandex-team.ru — свои предложения, идеи и пожелания присылайте на нее. Постараемся ответить как минимум на самые интересные и многообещающие. Как максимум — на все.
Мы тут подготовили небольшой опросник, чтобы оценить объём предстоящих работ и заинтересованность людей.