Проверяет ли комитет по С ++ свои новые спецификации проекта с помощью своего рода компилятора прототипов, прежде чем выпускать новый стандарт? Или они выпускают стандарт, который, по сути, является только теоретическим, пока крупные компиляторы не реализуют его?
c++
language-design
standards
Мэтью Джеймс Бриггс
источник
источник
boost::shared_ptr
>std::shared_ptr
.boost.lambda
=> C ++ 11 лямбда-выражений).Ответы:
Стандартный комитет C ++ имеет устав и правила, но большинство из них сосредоточено вокруг структуры организации, как представить предложения, голосование, публикацию стандарта, и т.д. , и не столько на технических деталях самого стандарта или как его может быть проверено.
Насколько я знаю, формального требования для «тестирования» функции или ее дизайна не существует. C ++ также несколько уникален тем, что здесь нет ссылочной или «первичной» реализации (например, Microsoft CLR, Oracle JDK, Zend PHP). Однако члены комитета состоят из многих организаций с глубокими знаниями языка и реализацией компилятора. Например, если вы перейдете по этой предыдущей ссылке, вы увидите представителей Microsoft и Intel, которые имеют уважаемые компиляторы C ++. Red Hat и несколько других компаний, которые вносят свой вклад в GCC, также участвуют.
Предлагая новую функцию, члены комитета уже имеют довольно хорошее представление о том, выполнимо ли это, может ли это вступить в конфликт с другими функциями или привести к неоднозначности грамматики таким образом, что излишне усложняет анализ. ( вот хороший вопрос о грамматике C ++ )
Краткий ответ: «Нет, комитет не требует тестирования своих проектов с использованием прототипов». Однако в этом нет особой необходимости, потому что члены комитета являются экспертами в C ++, которые понимают все мелкие детали на уровне, которого не знает подавляющее большинство программистов. Помните, что эти люди - языковые архитекторы, которые являются экспертами по теории языка и проектированию компиляторов.
Учитывая участие поставщиков компиляторов в этом процессе, вполне возможно, что один или несколько из них могут создать прототип новой функции, но опять же, формального требования для этого нет, и это не то, о чем я читал в общедоступных документах из Комитет C ++.
Они также имеют тенденцию быть очень консервативными, постепенно добавляя новые функции, которые востребованы в реальном мире, без указания большого количества новых функций, которые могут оказаться рискованными. Фактически, в последние годы они добавили новые функции, которые существовали как собственные расширения или библиотеки с открытым исходным кодом, которые уже работают в реальном мире. Например, C ++ 11 и C ++ 14 включают в себя части Boost , которые уже были протестированы в реальном мире в нескольких компиляторах и средах исполнения. Нет необходимости проверять то, что уже проверено.
источник