Подготовка предложения в стандарт C++. Инструкция.

Язык C++ постоянно меняется, чтобы отвечать современным требованиям. Международная организация по стандартизации — ISO — собирает идеи специалистов и учитывает их при подготовке очередного стандарта.

Каждый разработчик-эксперт может вписать своё имя в историю разработки языка, официально представив своё предложение. Это не так уж трудно сделать, но нужно знать кое-какие особенности процесса.

Мы — российская рабочая группа — поддержим вас на всех этапах: обсудим вашу идею, поможем оформить «кирпич», отвезём его в ISO и защитим на заседании. А чтобы вы ясно представляли себе весь путь, составили простую пошаговую инструкцию.

Прежде чем начать писать

Прежде всего стоит как следует обсудить вашу идею: вначале на этом сайте, затем в Google-группе «ISO C++ Standard — Future Proposals». Иначе вы рискуете потерять время, так как:

  • Возможно, вашу идею кто-то уже проработал — и даже уже имеет готовый proposal.
  • Незначительные изменения можно быстро вносить в стандарт без написания предложения через механизм defect report — во время обсуждения вам на это укажут.
  • Ваша идея может не соответствовать общему направлению развития С++.
  • Скорее всего, в вашем предложении есть много недочётов, из-за которых процесс принятия сильно затянется, — а обсуждение позволит их быстро устранить.
  • Возможно, ваша идея в её нынешнем виде ломает уже написанный код.
  • Наконец, вполне вероятно, что вы не учли какие-то важные требования к предложениям, — коллеги вам укажут это.

После обсуждения стоит написать прототип, если это возможно. Предложения с прототипами ISO рассматривает быстрее. Кроме того, во время написания прототипа вы можете обнаружить недочёты вашей идеи или придумать, как то же самое сделать проще.

Начинаем писать

Proposal пишут по-английски. Не стесняйтесь писать совсем простым языком, если вам так удобнее.

У документа должен быть заголовок, шапка, и, собственно, описание предложения к стандарту.

Заголовок пишите так, чтобы он описывал вашу идею.

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

В шапке укажите имена авторов предложения и контактную информацию.

Затем впишите номер документа. Пока предложение находится на стадии проработки, ему хватит универсального номера D????R0.

Позже, когда всё будет в целом готово, вам понадобится дать ему настоящий уникальный номер с цифрами вместо знаков вопроса. Чтобы получить такой номер, напишите нам на cpp-proposal@yandex-team.ru.

Когда же предложение обретёт окончательный вид, перед отправкой финальной версии замените D (draft) на P (proposal): P9999R0.

После номера укажите подгруппу, в которую собираетесь направить предложение:

SG1 Concurrency — если ваша идея касается многопоточности, асинхронности, параллелизма или векторного выполнения.

SG6 Numerics — если вы пишете о работе с числами.

SG7 Reflection — если речь о рефлексии.

SG14 Low Latency — если вы предлагаете поменять основополагающие механизмы языка С++ для повышения производительности.

Library Evolution — если вы хотите добавить новые классы или доработать старые.

Evolution — если ваша идея меняет что-то в ядре языка С++ (например, добавляет новые конструкции языка или новые операторы).

Если вы не можете выбрать подгруппу, обратитесь к нам за помощью.

Собственно текст предложения мы рекомендуем начинать с раздела «Introduction and Motivation» с коротким (буквально один-два абзаца) описанием вашей идеи и примером того, как она упростит людям жизнь.

Уже затем опишите её во всех деталях.

После детального описания мы советуем поместить вот такие разделы:

  • Impact on the Standard — с описанием того, какие заголовочные файлы предложение меняет, меняет ли ядро языка и от каких ещё не принятых предложений зависит.
  • Design Decisions — почему именно так стоит решать проблему.
  • Feature-Testing Macro — название и описание макроса, проверяющего компиляторы на предмет поддержки вашего предложения. Это нужно авторам библиотек.
  • Acknowledgements — не забудьте перечислить тех, кто вам помогал, но не попал в соавторы.

Вы можете добавить и любые другие разделы на своё усмотрение.

Если почувствуете в себе силы на это, приложите к proposal перечень конкретных поправок, которые нужно внести в стандарт. Для этого возьмите текущий черновик на сайте eel.is/c++draft и подготовьте наглядный документ (пример). Если у комитета не будет нареканий по существу, готовые поправки помогут ускорить принятие идеи.

ISO принимает файлы в формате PDF или HTML.

Быстрый старт и готовые примеры

Вот пример proposal в формате HTML с автоматической подсветкой подсветкой синтаксиса C++:

https://github.com/apolukhin/apolukhin.github.io/raw/master/papers/wide_int_r1.html

Открывайте текстовым редактором, убирайте лишнее и дописывайте своё :)

Другие примеры предложений всегда можно найти на сайте open-std.org. Вам нужны документы с номерами вида P????R0.