Pull to refresh
552.29
Яндекс
Как мы делаем Яндекс

Сотрудники Яндекса будут представлять Россию в комитете по стандартизации C++

Reading time 4 min
Views 26K


Хочу поделиться с вами радостной новостью: теперь мы можем влиять на развитие C++! Под «мы» я имею в виду всех российских программистов, работающих с C++.

Но обо всем по порядку.

Рабочая группа по стандартизации C++


Язык программирования C++ развивается не стихийно. Его развитие контролирует международная организация ISO/IEC, а точнее, рабочая группа внутри этой организации ISO/IEC JTC1/SC22/WG21 C++. В её обязанности входит рассмотрение предложений по улучшению языка и стандартной библиотеки, голосование по предложениям и написание коротких отзывов по ним (почему предложение не прошло голосование, что именно не понравилось в предложении и т. д.). Причём большую часть предложений, как правило, вносят сами же члены комитета.

Зачем писать предложения и модернизировать 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 — свои предложения, идеи и пожелания присылайте на нее. Постараемся ответить как минимум на самые интересные и многообещающие. Как максимум — на все.

Вместо итогов


Мы тут подготовили небольшой опросник, чтобы оценить объём предстоящих работ и заинтересованность людей.
Only registered users can participate in poll. Log in, please.
Проверяем:
3.38% У меня есть (скоро будут) готовые предложения и прототипы для включения в стандарт C++, их надо представить на заседании. 8
12.66% У меня есть идеи для включения в стандарт C++, нужно писать предложение/прототипы, сам не справлюсь (ну или лень). 30
10.97% У меня есть пачка мелких замечаний и однострочных исправлений к стандарту. 26
88.19% Хочу класс для вывода stack trace :) 209
237 users voted. 295 users abstained.
Tags:
Hubs:
+63
Comments 128
Comments Comments 128

Articles

Information

Website
www.ya.ru
Registered
Founded
Employees
over 10,000 employees
Location
Россия
Representative