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

в 8:00, , рубрики: c++, C++14, c++17, IT-стандарты, standard library, standards, Блог компании Яндекс, Программирование, С++, Совершенный код, яндекс

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

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

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

Мы тут подготовили небольшой опросник, чтобы оценить объём предстоящих работ и заинтересованность людей.

Автор: Яндекс

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js