|
Программирование >> Полиморфизм без виртуальных функций в с++
руководство и поручило написать его одной из своих сотрудниц - Маргарет Эл-лис (Margaret Ellis). В этой связи вполне естественным казалось объединить усилия, сов.местно выпустить руководство и передать его внешни.м рецензента.м. Мне также представлялось очевидным, что публикация такого труда с некоторой дополнительной информацией будет способствовать принятию нового определения и широкому распространению С++ в целом. Вот так появилась книга The Annotated С++ Reference Manual [ARM] - Аннотированное справочное руководство по С++ . Вот несколько строк из нее: ...чтобы заложить твердые основы для дальнейшей эволюции С++... [и] стать отправной точкой для его формальной стандартизации... собственно справочное руководство по С++ и является полным определением языка, но сжатый стиль такого рода документов оставляет многие вопросы без ответа. Обсуждение того, что не входит в язык, почему те или иные средства определены именно так, а не иначе, и как можно было бы реализовать различные возможности, остается за ромками справочного руководства, но тем не менее представляет интерес для большинства пользователей. Такие замечания приводятся в аннотациях и комментариях. Комментарии также помогут читателю разобраться во взаимосвязях между разными частями языка. В них подчеркнуты те моменты и последствия, на которые можно было бы не обратить внимания при чтении самого руководства. Примеры и сравнения с языком С делают книг/ более легкой для чтения, чем сухое справочное описание . После ряда мелких стычек с людьми, отвечавшими за выпуск книги, было решено, что мы включим в ARM (так в обиходе называлась The Annotated С++ Reference Manual ) полное определение С++, с шаблонами и обработкой исключений, а не только определение подмножества, реализованного в последней версии AT&T. Тем самым постулировалось, что язык как таковой отличается от любой его конкретной реализации. Об этом заложенном с са.мого начала принципе приходилось часто напо.минать, поскольку пользователи, разработчики компиляторов и продавцы никак не могли его запомнить. На само справочное руководство были получены рецензии примерно от ста человек из двух десятков организаций. Имена большинства из них указаны в разделе благодарностей ARM. Кроме того, многие внесли свой вклад в содержание ARM. Особо хочу отметить помошь Брайана Кернигана, Эндрю Кенига и Дуга Макилроя. Часть ARM, составляюшая собственно справочное руководство, была принята за основу стандарта ANSI С++ в марте 1990 г. В ARM не рассказывается о приемах, поддерживаемых языковыми средствами: эта книга не ставит себе целью научить программированию на С++; в ней объясняется, что такое язык, а не как им пользоваться [ARM] . Рассказ об использовании С++ был отложен до выхода второго издания книги Язык програ.ммиро-вания С++ [2nd]. К сожалению, некоторые проигнорировали это предупреждение. В результате С++ часто воспринимают как набор непонятных и не связанных между собой деталей, а потому и не могут написать на нем красивой и легкой для сопровождения программы (см. раздел 7.2). 5.3.1. Обзор ARM В ARM представлены некоторые не очень сушественные возможности, которые были реализованы только в версии 2.1 от AT&T и в более поздних компиляторах других производителей. Са.мая очевидная возможность - вложенные классы. К первоначальному определению их областей действия мне настоятельно рекомендовали вернуться внешние рецензенты. К тому же я и сам отчаялся найти для областей действия в С-1-+ непротиворечивые правила, так что пока действуют принятые в С (см. раздел 2.8.1). Более важными из новых возможностей были шаблоны (см. главу 15) и обработка исключений (см. главу 16). Кроме того, в ARM описывалась независимая перегрузка операций префиксного и постфиксного инкремента (++) - раздел 11.5.3. В целях сов.местимости с ANSI С была разрешена инициализация локальных статических массивов. С этой же целью введен модификатор volatile, облегчающий труд разработчиков компиляторов. Я вовсе не уверен, что семантическое сходство служит оправданием для синтаксических параллелей с const, однако не вижу причин для попыток изменить решения комитета ANSI С в этом вопросе. Итак, в ARM были представлены следуюпше возможности: □ все, что вошло в версию 2.0 (см. раздел 5.2.1); □ шаблоны (см. главу 15); □ исключения (см. главу 16); □ вложенные классы (см. раздел 13.5); □ раздельная перегрузка префиксных и постфиксных операций ++ и - (см. раздел 11.5.3); □ volatile; □ локальные статические массивы. Все описанные в ARM возможности, кроме исключений, получили широкое распространение вместе с версией Cfront 3.0 в октябре 1991 г. Полная реализация воз.можностей, упо.мянутых в ARM, впервые появилась в ко.мпиляторах фирм DEC и IBM в начале 1992 г. 5.4. Стандартизация ANSI и ISO с 1990 г. основные усилия для завершения С+-1- прилагались в комитете по стандартизации ANSI/ISO. Инициатива начать формальную стандартизацию С-ы- исходила от компании Hewlett-Packard совместно с AT&T, DEC и IBM. Важную роль в этом сыграл Ларри Рослер из Hewlett-Packard. Именно он связался со мной ближе к концу 1988 г., и между нами состоялся разговор о необходимости формальной стандартизации. Основной проблемой было время. Выражая интересы крупных пользователей, Ларри выступал за срочность, я же хотел оттянуть начало стандартизации, пока пе будет накоплен достаточный опыт. Взвесив все не очень ясные технические и коммерческие факторы, мы пришли к выводу, что к стандартизации нужно приступить в течение года, если мы вообще рассчитываем на успех. Как мне помнится, первая техническая встреча ко.митета ANSI состоялась за три дня до истечения этого срока (в марте 1990 г.). Предложение по стандартизации для комитета ANSI написал Дмитрий Ленков из компании Hewlett-Packard [Lenkov, 1989]. В нем приведено несколько причин, почему стандартизацию следует начинать немедленно: В июле 1994 г. ко.митет проголосовал за CD registration* - так называется первый этап завершающей процедуры ISO. Планирование работы над стандартом - дело нелегкое. В частности, такие детали , как решение вопроса о том, что представляет собой стандарт и как его принимать, не стандартизованы и меняются, похоже, каждый год. □ С++ завоевывает массовое признание значительно быстрее, чем большинство других языков; □ задержка процесса приведет к появлению диалектов; □ С++ нуждается в детальном проработанном определении, которое бы полностью описывало семантику каждого языкового средства; □ языку недостает нескольких важных возможностей, в том числе обработки исключений, некоторых особенностей множественного наследования, средств для поддержки параметрического полиморфизма и стандартных библиотек. В этом предложении была также подчеркнута необходимость сохранения совместимости с ANSI С. Организационное собрание комитета ANSI С++ X3J16 состоялось в декабре 1989 г. в Вашингтоне. На нем присутствовали 40 человек, в том числе все принимавшие участие в стандартизации С, те, кого называли старой гвардией С , и другие. Дмитрий Ленков был избран председателем, а Джонатан Шопиро - редактором комитета. Первое техническое заседание состоялось на территории компании AT&T в Сомерсете в марте 1990 г. AT&T удостоилась этой чести не из-за вклада в создание С++, а потому что мы (члены комитета X3J16, присутствовавшие на встрече в Вашингтоне) решили, что планирование места проведения заседаний на первые несколько лет будет зависеть от климатических условий местности в то или иное время года. Так, второе заседание состоялось в помещении Microsoft в Сиэтле в июле, а третье - в Hewlett-Packard в Пало-Альто в ноябре. Таким образом, нам всегда сопутствовала прекрасная погода, а заодно удалось избежать соперничества компаний. Сейчас в комитет входит более 250 человек, из которых около 70 посещают заседания регулярно. Первоначальной целью комитета была выработка предварительного стандарта, который предполагалось передать на суд общественности в конце 1993 г. или начале 1994 г. Была надежда, что еще через пару лет после этого можно будет принять официальный стандарт (довольно оптимистичный прогноз для стандартизации языка общего назначения). Для сравнения напомню, что стандартизация С заняла семь лет. В тот момент мы планировали опубликовать предварительный стандарт в апреле 1995 г. На заседаниях комитета ANSI С++ присутствовали и представители других стран (Канада, Дания, Франция, Япония, Швеция, Великобритания). В Лунде (Швеция) в июне 1991 г. собрались члены комитета WG21 по стандартизации C++ при ISO, и обе структуры решили проводить совместные заседания, начав их незамедлительно, прямо в Лунде. Стоит отметить, что большинство участников из других стран уже давно использовали С++. Перед комитетом по С++ стояли довольно трудные задачи: □ определение языка должно быть точным и полны.м; □ необходимо принять во внимание совместимость с С;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |