Б. Страуструп - Дизайн и Эволюция C++. 2006 (1160775), страница 36
Текст из файла (страница 36)
5.4. Стандартизация АМ51 и!50 С 1990 г. основные усилия для завершения С++ прилагались в комитете по стандартизации АХ51/150. Инициатива начать формальную стандартизацию С++ исходила от компании Нею 1е11-Раскагс1 совместно с АТЬТ, 1)ЕС и 1ВМ. Важную роль в этом сыграл Ларри Рослер из Неч')е11-Раскагб. Именно он связался со мной ближе к концу 1988 г., и между нами состоялся разговор о необходимости формальной стандартизации. Основной проблемой было время. Выражая интересы крупных пользователей, Ларри выступал за срочность, я же хотел оттянуть начало стандартизации, пока не будет накоплен достаточный опыт. Взвесив все не очень ясные технические и коммерческие факторы, мы пришли к выводу, что к стандартизации нужно приступить в течение года, если мы вообще рассчитываем на успех. Как мне помнится, первая техническая встрсча комитета АХ51 состоялась за три дня до истечения этого срока (в марте 1990 г.).
Предложение по стандартизации для комитета АХ51 написал Дмитрий Ленков из компании Неч! еи-Раск агд [(.епкок 19891. В нем приведено несколько причин, почему стандартизацию следует начинать немедленно: К первоначальному определению их областей действия мне настоятельно рекомендовали вернуться внешние рецензенты. К тому же я и сам отчаялся найти для областей действия в С++ непротиворечивые правила, так что пока действуют принятые в С (см. раздел 2.8.1). Более важными из новых возможностей были шаблоны (см. главу 15) и обработка исключений (см.
главу 16). Кроме того, в АКМ описывалась независимая перегрузка операций префиксного и постфиксного инкремента (++) — раздел 11.5.3. В целях совместимости с АН51 С была разрешена инициализация локальных статических массивов. С этой же целью введен модификатор чо1ас11е, облегчающий труд разработчиков компиляторов. Я вовсе не уверен, что семантическое сходство служит оправданием для синтаксических параллелей с сопя С, однако не вижу причин для попыток изменить решения комитета АЫ51 С в этом вопросе.
Итак, в АКМ были представлены следующие возможности: о все, что вошло в версию 2.0 (см. раздел 5.2.1); о шаблоны (см. главу 15); о исключения (см. главу 16); о вложенные классы (см. раздел 13.5); о раздельная перегрузка префиксных и постфиксных операций ++ и — (см. раздел 11.5.3)„. о чо1аст1е; о локальные статические массивы. Стандартизация АИ5! и!5О ИИИИИИКИ ' В июле 1994 г, комитет проголосовал за «С1З гея|зггаГюп» вЂ” так называется первый этап завершающей процедуры 180. Планирование работы пал стандартом — дело нелегкое.
В частности, такие «летали», как решение вопроса о том, что представляет собой ставларт и как его принимать, ве станлартизованы и меняются, похоже, каждый гол. а С++ завоевывает массовое признание значительно быстрее, чем большинство других языков; гт задержка процесса привепет к появлению Лиалектов; ш С++ нуждается в летальном проработанном определении, которое бы полностью описывало семантику каждого языкового срепства; а языку недостает нескольких важных возможностей, в том числе обработки исключений, некоторых особенностей множественного наслелования, средств лля поддержки параметрического полиморфизма и станлартпых библиотек. В этом предложении была также полчеркнута необходимость сохранения совместимости с АН51 С.
Организационное собрание комитета АН51 С++ ХЗ)16 состоялось в декабре 1989 г. в Вашингтоне. На нем присутствовали 40 человек, в том числе все принимавшие участие в станлартизации С, те, кого называли «старой гварлией С», и другие. Дмитрий Ленков был избран прелселателем, а Джонатан Шопиро — редактором комитета. Первое техническое заседание состоялось на территории компании АТ4 Т в Сомерсете в марте 1990 г.
АТЛЕТ удостоилась этой чести не из-за вклада в созлание С++, а потому что мы (члены комитета ХЗ)16, присутствовавшие на встрече в Вашингтоне) решили, что планирование места проведения заседаний на первые несколько лет булет зависеть от климатических условий местности в то или иное время гола. Так, второе заседание состоялось в помещении М1сгозо(1 в Сиэтле в июле, а третье — в Нетч1егг-Раскап( в Пало-Альто в ноябре. Таким образом, нам всегла сопутствовала прекрасная потопа, а заодно удалось избежать соперничества компаний. Сейчас в комитет вхолит более 250 человек, из которых около 70 посещают заселания регулярно. Первоначальной целью комитета была выработка прелварительного стандарта, который предполагалось передать на сул общественности в конце 1993 г.
или начале 1994 г. Была надежда, что еще через пару лет после этого можно будет принять официальный стандарт (ловольно оптимистичный прогноз лля стандартизации языка общего назначения). Для сравнения напомню, что стандартизация С заняла семь лет. В тот момент мы планировали опубликовать прелварительный станларт в апреле 1995 г. ' На заседаниях комитета АН51 Сч-+ присутствовали и представители других стран (Канала, Дания, Франция, Япония, Швеция, Великобритания).
В Лунце (Швеция) в июне 1991 г. собрались члены комитета %С21 по стандартизации С++ при 150, и обе структуры решили проводить совместные заседания, начав их незамеллительно, прямо в Лунле. Стоит отметить, что большинство участников из лругнх стран уже давно использовали С++ Перел комитетом по С++ стояли ловольно трупные задачи: гз опрелеление языка должно быть точным и полным; ст необхолимо принять во внимание совместимость с С; ПИИИИ>ИП Хронология 1985-1993 гг. о нужно рассмотреть расширения, выходяШие за пределы текущей практики применения С++; О должны быть рассмотрены библиотеки.
Ко всему прочему сообщество пользователей С++ было очень неоднородным и совершенно неорганизованным, поэтому комитету по стандартизации пришлось стать его центром. В краткосрочной перспективе именно это и было самой важной его целью: «Комитет по С++ — зто место, где разработчики компиляторов и инструментальных средств, их коллеги и предсгаеители могут обсудить проблемы определения языка и — насколько позволяет коммерческая конкуренция — его реализации. Таким образом, комитет уже сослужил добрую службу сообщестеуг помог сблизить различные реализации, предоставив площадку для дискуссий.
В протиеном случае разработчики компиляторов вместе с немногими коллегами или е одиночестее строили бы догадки относительно тех вопросов, на которые нет ответа я АВМ. Возможно, они связались бы со мной, но я не я состоянии один спраяиться со всеми возникающими проблемами. Отсутствие общения неизбежно ведет к появлению диалектов. Комитет противостоит таким тенденциям».
Стандартизация — непростой процесс. В комитет входили люди, стремившиеся сохранить згагпз г)цо; мечтавшие вернуться на несколько лет назад; были такие, кто хотел «порвать с проклятым прошлым» и спроектировать совершенно новый язык; те, кого волновал лишь один конкретный класс систем; люди, чьи голоса были куплены их работодателями, и представлявшие лишь самих себя; специалисты, озабоченные в основном теоретическими взглядами на программирование вообше и языки программирования в частности; нетерпеливые и требовавшие принять стандарт немедленно, даже если некоторые детали останутся неразрешенными, и наоборот, те, которых не устраивало ничего, кроме идеального определения языка.
Были такие, кто полагал, что С++ — совсем новый язык, у которого и пользователей-то почти нет, и представители организаций, написавших за минувшее десятилетие миллионы строк кода, и т.д. Но в соответствии с правилами стандартизации нам всем предстояло прийти к более или менее одинаковому мнению. Мы должны были достичь консенсуса (обычно под этим словом понимают подавляюшее большинство). Это разумные правила, они имеют национальный и интернациональный характер.
Все интересы законны, и если позволить большинству ущемлять интересы меньшинств, ~ го получится стандарт, полезный лишь ограниченному кругу пользователей. Поэтому каждому члену комитета предстоит научиться уважать другие, чуждые ему точки зрения и идти на компромиссы. И это вполне соответствует стилю С«» Совместимость с С вЂ” это первый вопрос, на котором мы споткнулись.
После длительных, иногда весьма ожесточенных споров было решено, что за стопроцентную совместимость с С бороться не стоит. Но и резкий уход от совместимости с С не годится. С++ — это самостоятельный язык, он не является строгим надмножеством А)ь)51 С, и сделать его таковым нельзя без существенного ослабления гарантий, предоставляемых системой контроля типов и не «поломав» миллионы строк написанного на С++ кода. С другой стороны, значительное уменьшение совместимости с С тоже разрушит существующий код, усложнит создание и сопровождение систем, написанных на смеси этих языков, и сделает Стандартизация АМ51 и 150 й!ИИ>ИИИБ более проблематичным переход от С к С++.
Решение, которое часто формулируют как уже упоминавшееся «настолько близко к С, насколько возможно, но не ближе», совпадает с тем, к которому снова и снова приходили все размышлявшие над языком С++ и направлениями его развития (см. раздел 3.12). Проработка деталей данного решения после независимых изменений, которые С«-~ и А)ч51 С внесли в исходное определение С, составила заметную часть работы комитета по стандартизации. Основной вклад в зто дело внес Томас Плам. 5.4.1.