четверг, 23 июля 2009 г.

[comp.prog] C++0x: Concepts R.I.P.

Небольшая хронология событий:

  • сначала мне попадается статья о ситуации с развитием стандарта C++0x. В которой говорилось, что ни в одном из распространенных C++ компиляторов реализация концептов не сможет начаться раньше 2010-го года. Т.е. даже при самом удачном стечении обстоятельств, концепты реально появились бы только в 2011;
  • затем в news-группе digitalmars.D.announce Вальтер Брайт (автор компилятора Digital Mars C++ и языка D) сказал, что есть слухи о намерении выбросить концепты из языка. Вообще
  • ну и в завершении появились сообщения о том, что концепты таки выбросили (вот и вот).

Вот такие дела. С одной стороны грустно, т.к. огромный кусок работы был выброшен (пока, по крайней мере). Но с другой стороны:

  • я очень зауважал комитет по стандартизации C++. Люди сумели принять очень трудное решение;
  • это так же свидетельствует о том, что в комитете преобладает здравый смысл, а это вселяет надежду;
  • появляются шансы на более скорый выход как самого C++0x, так и компиляторов, в достаточной степени C++0x реализующих.

На мой взгляд, история с концептами доказала одну простую истину. Она была озвучена, если мне не изменяет мой склероз, Гради Бучем в книге по объектно-ориентированному анализу и проектированию: любая работающая сложная система может вырасти только из работающей простой системы. Т.е. для программного обеспечения есть только один путь развития – эволюционный. Революции не проходят. А добавление концептов в стандарт языка без наличия хотя бы одного работающего прототипа этой идеи – это как раз революция.

Хочется надеяться, что люди из комитета учтут опыт создания стандартов 1998-го года и C++0x в дальнейшем будут идти другим путем: небольшие ревизии стандарта каждые 3-5 лет, вместо больших ревизий раз в десять лет.

Ну и еще один вывод, уже личный. Приятно, что в этот раз я не пытался “бежать впереди поезда” и изучать стандарт до его принятия.

В заключение ссылки на описания концептов от Бъярна Страуструпа:
Specifying C++ Concepts
Symplifying the use of concepts

Update. Статья Б.Страуструпа о произошедшем: The C++0x "Remove Concepts" Decision. В ней так же можно найти ссылки на различные версии описаний концептов. И список того, что же будет в C++0x (т.е. уже в C++1x).

Еще один update: What Happened in Frankfurt? от Дуга Грегора (разработчика ConceptGCC, источник тут). Из его рассказа у меня сложилось впечатление, почему с концептами ничего не вышло -- было два разных направления, каждое из которых тянула и развивала своя группа. А компромиса в условиях комитета достичь не удалось (если такое вообще возможно).

Отправить комментарий