РГ21 С++ — российская рабочая группа, организованная для сбора и обсуждений предложений к стандарту C++, а также для подготовки их презентации и защиты на общих собраниях Международной организации по стандартизации (ISO).
Группа создана 28 марта 2016 года в рамках подкомитета 122 «Языки программирования, их окружение и системы программных интерфейсов» ТК 22 Федерального агентства по техническому регулированию и метрологии. РГ зарегистрирована Росстандартом — федеральным агентством, представителем России в ISO. О создании группы «Яндекс» объявил 24 мая 2016 года, идея создания принадлежит сотрудникам корпорации - Александру Фокину, Антону Полухину и Наталии Макаровой.
Первая открытая встреча рабочей группы состоялась 5 октября 2016 года.
По заявлению технического директора Яндекса Михаила Парахина, рабочая группа станет связующим звеном между российскими экспертами и международным комитетом в обсуждении стандарта.
Заседания комитета проходят три раза в год, каждое проводится в новом городе и длится неделю. На июль 2018 года РГ21 посетила пять заседаний, на которых было принято шесть предложений рабочей группы.
Предложения от РГ21
РГ21 C++ разрабатывает предложения по улучшению работы с языком и выносит их на обсуждении Международного комитета по стандартизации. Принято 6 внесенных предложений, 9 находятся на рассмотрении.
Принятые
- Constexpr категория итераторов
Многие методы std::basic_string_view и std::array помечены как constexpr. Однако, constexpr для begin()/end() и подобных методов не гарантирует, что полученный итератор можно будет использовать в constexpr контексте. В данном предложении предлагается исправить этот недочёт и получить полнофункциональные контейнеры, которые можно использовать в constexpr контексте.
- Constexpr для begin/end/reverse_iterator/move_iterator и базовых методов array
Пометить часть простых методов и классов как constexpr.
- Constexpr для std::char_traits и std::string_view
Пометить часть методов std::char_traits как constexpr и убедиться в том, что данное изменение можно произвести, не пожертвовав производительностью.
- Не создавать constexpr версии для всех стандартных контейнеров.
- Constexpr для std::complex
Пометить большую часть методов std::complex как constexpr.
- Constexpr для алгоритмов из <algorithm>, не выделяющих память.
- Constexpr для всех методов std::char_traits
Пометить все методы стандартного класса std::char_traits как constexpr, что даст возможность использовать std::string_view в constexpr контексте.
- Классы для получения backtrace
Добавить в стандарт классы для получения стека вызовов и работы с ним.
В работе
- Атрибут visible, упрощающий создание динамических библиотек
Добавить единый атрибут visible, которым будут помечаться экспортируемые и импортируемые из динамической библиотеки символы.
- Принять в стандарт RAII класс для работы с динамическими библиотеками
Стандартизировать Boost.DLL, чтобы можно было с лёгкостью делать плагины и импортировать функции из динамических библиотек.
- ConcurrentHashMap для C++
Добавить в стандарт реализацию thread-safe хеш-таблицы, которая будет удовлетворять требованиям эффективности достаточно широкого круга задач.
- Добавить constexpr к __func__
Сделать возможным использование имени функции в constexpr выражениях.
- Copy elision для подобъектов
Добавить больше разрешающих правил для copy elision или разрешить copy elision для всех случаев, когда копируемый объект или подобъект не используются после копирования.
- Добавить inline constexpr для объекта std::nothrow.
- constexpr std::regex
Множество языков программирования в данный момент компилируют регулярные выражения ещё перед запуском программы. Таким образом, когда программа стартует, все регулярные выражения уже преобразованы в оптимизированный конечный автомат. Предлагается добавить подобную возможность и для C++.
- Добавить возможности кортежей к агрегатам - named tuples
Предложение позволит добавить функциональность кортежей к простым C++ структурам - агрегатам. Таким образом, разработчики C++ получат возможность работать с полями структур используя инексы, .
Мероприятия
Летом 2016 года РГ21 С++ впервые участвовала во встрече международной рабочей группы WG21 по стандартизации C++. На ней был утвержден черновой вариант C++17 со множеством новых классов, методов и полезных нововведений языка. Следующая подобная встреча состоялась весной 2017 года.
24-25 февраля 2017 РГ21 С++ приняла участие в конференции «C++ Russia», организованной сообществом С++ User Group Russia в Москве.
В августе 2017 года рабочая группа участвовала в конференции С++ Siberia в Томске.
РГ21 С++ регулярно проводит открытые встречи, на которых проходят обсуждения перспектив развития С++, предложений от России, новостей с заседания Комитета, дальнейших планов рабочей группы.