РГ21 С++

03.02.2021

РГ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 С++ регулярно проводит открытые встречи, на которых проходят обсуждения перспектив развития С++, предложений от России, новостей с заседания Комитета, дальнейших планов рабочей группы.