Инструкция

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

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

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

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

Это не так уж трудно сделать, но нужно знать кое-какие особенности процесса.

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

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

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

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

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

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

  • 1

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

  • 2

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

  • 3

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

  • 4

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

  • 5

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

  • 6

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

  • 7

    Позже, когда всё будет в целом готово, вам понадобится дать ему настоящий уникальный номер с цифрами вместо знаков вопроса. Чтобы получить такой номер, напишите В Телеграмм @antoshkka или воспользуйтесь англоязычной инструкцией для получения номера.

  • 8

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

  • 9

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

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

    • SG1 Concurrency
      если ваша идея касается многопоточности, асинхронности, параллелизма или векторного выполнения
    • SG7 Reflection
      если речь о рефлексии и метапрограммировании
    • SG6 Numerics
      если вы пишете о работе с числами
    • SG14 Low Latency
      если вы предлагаете поменять основополагающие механизмы языка С++ для повышения производительности
    • Evolution Incubator
      если ваша идея меняет что-то в ядре языка С++ (например, добавляет новые конструкции языка или новые операторы)
    • Library Evolution Incubator
      если вы хотите добавить новые классы или доработать старые

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

  • 10

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

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

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

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

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

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

  • 11

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

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

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

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

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