|
Программирование >> Полиморфизм без виртуальных функций в с++
5.2. Версия 2.0 к середине 1986 г. абсолютно все.м стало понятно направление развития С++. Основные проектные решения были приняты. Следующим этапом развития было внедрение параметризованных типов, множественного наследования и обработки исключений. Требовалось провести много экспери.ментов и на основе их результатов откорректировать курс, но даже это уже не могло кардинально изменить ситуацию. С++ и раньше-то не отличался эластичностью, а теперь все возможности для радикальных изменений были исчерпаны. Оставалось, однако, много непростой работы. К этому времени во всем мире языком С++ пользовались примерно 2 тыс. человек. Согласно плану, выработанному Стивом Джонсоном и мной, повседневная работа над инстру.ментарие.м (главным образом, Cfront) должна была перейти в ведение организации по разработке и технической поддержке. Это позволило бы .мне сосредоточиться на новых воз.можностях и библиотеках. Предполагалось, что сначала AT&T, а затем и другие компании начнут создавать ко.мпиляторы и инструментальные средства, которые, в конце концов, сделают Cfront ненужным. Фактически этот процесс уже начался, но хороший план пошел кувырком из-за нерешительного и неумелого руководства разработкой. Проект разработки нового компилятора С++ отвлек внимание и ресурсы от задач сопровождения и развития Cfront. Планы начать поставку версии 1.3 в начале 1988 г. провалились. В результате пришлось ждать выхода версии 2.0 в июне 1989 г., и, хотя 2.0 была лучше версии 1.2 почти во всех отношениях, в ней все же не были полностью реализованы возможности, упомянутые в статье Whatis?*- (см. раздел 3.15). Частично вследствие этого в версию 2.0 не вошли значительно улучшенные и расширенные библиотеки. Поставка такой библиотеки была вполне возможна, поскольку многое из того, что стало библиотекой Стандартных Компонентов USL, к тому времени уже использовалось внутри AT&T. Однако мое желание иметь прямую поддержку шаблонов заслонило все иные варианты. Кроме того, некоторая часть руководителей отдела разработки почему-то верила, что библиотека может быть стандартом и одновременно значительным источником дохода. Версия 2.0 стала плодом работы группы, в которую входили Эндрю Кениг, Барбара My, Стэн Липпман, Пэт Филип и я. Барбара занималась координацией. Пат - интеграцией, я и Стэн - кодированием. Мы с Кенигом рассматривали извещения об ошибках и обсуждали детали языка. Эндрю и Барбара занимались тестированием. В результате удалось реализовать все новые воз.можности и исправить 80% ошибок. Кроме того, я написал большую часть доку.ментации. Как всегда, вопросы проектирования языка и сопровождения справочного руководства лежали на моих плечах. Барбара My и Стэн Липпман возглавили команду, которая позже выпустила версии 2.1 и 3.0. USL образовалась как отделение AT&T, занимающееся технической поддержкой и дистрибуцией UNIX и соответствующих инструментальных средств. Позже она выделилась в отдельную компанию нод названием UNIX System Laboratories, а затем была куплена Novell. Многие из тех, кто оказал влияние на С with Classes и на начальный вариант С++, продолжали разными способами содействовать его развитию. Фил Браун (Phil Brown), Том Каргилл, Джим Коплиен, Стив Дьюхерст, Кит Горлен (Keith Gorlen), Лаура Иве, Боб Келли (Bob Kelley), Брайан Керниган, Энди Кениг, Арчи Лахнер, Стэн Липпман, Ларри Майка (Larry Маука), Дуг Макилрой, Пэт Филип (Pat Philip), Дейв Проссер (Dave Prosser), Пегги Куин (Peggy Quinn), Роджер Скотт (Roger Scott), Джерри Шварц, Джонатан Шопиро и Кэти Старк (Kathy Stark) -всех этих людей я с благодарностью упомянул в работе [Stroustnjp,1989b]. С наи-больши.м энтузиазмо.м язык обсуждали Дуг Макилрой, Энди Кениг, Джонатан Шопиро и я. Стабильность определения языка и его реализации были признаны самыми важными аспектами [Stroustrup, 1987с]: Подчеркнем, что эти модификоции языка - лишь расширения. С++ был и остается стабильным языком, на который можно положиться при разработке долгосрочных проектов . Не менее важной считалась роль С++ как языка общего назначения для промышленного применения [Stroustrup, 1987с]: Переносимость... некоторых реализаций С++ - важнейшая цель проектирования. Поэтому мы избегали расширений, которые могут существенно увеличить время, необходимое для переноса, или предъявить повышенные требования к ресурсам, нужным компилятору С++. Этот идеал эволюции языка противостоит внешне благовидным предложениям сделать программирование более удобным: □ за счет потери эффективности или структурированности; □ для новичков - за счет потери единого стиля; □ в конкретных предметных областях путем добавления в язык специализированных возможностей; □ путем добавления возможностей, облегчающих интеграцию с конкретной средой программирования . В версии 2.0 было много улзшений, но ничего радикально нового. В то время я, случалось, объяснял, что все возможности 2.0, включая множественное наследование, - просто снятие ограничений, которые стали нас слишко.м сильно стеснять . Это одновременно и преувеличение, и сдержанный отпор общей тенденции придавать излишне большое значение каждой новой возможности. С точки зрения проектирования языка, самым важным аспектом версии 2.0 было то, что улучшилась интеграция отдельных особенностей языка С в структуру языка. Думаю, что для пользователя самы.ми важными аспектами новой версии были более стабильный компилятор и усовершенствованная техническая поддержка. 5.2.1. Обзор возможностей Основные воз.можности версии 2.0 были впервые представлены в статье [Stroustrup, 1987с] и подытожены в пересмотренно.м варианте этой статьи [Stroustrup, 1989b], которая вошла в состав доку.ментации по 2.0: 1. Множественное наследование (см. раздел 12.1). 2. Безопасное связывание (см. раздел 11.3). 3. Улучшенное разрешение имен перегруженных функций (см. раздел 11.2). 4. Рекурсивное определение присваивания и инициализации (см. раздел 11.4.4). 5. Улзшенные средства пользовательского управления памятью (см. разделы 10.2 и 10.4). 6. Абстрактные классы (см. раздел 13.2). 7. Статические функции-члены (см. раздел 13.4). 8. Константные функции-члены (см. раздел 13.3). 9. Защищенные члены с квалификатором protected (впервые появились в версии 1.2, см. раздел 13.9). 10. Обобщенные инициализаторы (см. раздел 3.11.4). И. Инициализаторы членов базовых классов (см. раздел 12.9). 12. Перегрузка оператора -> (см. раздел 11.5.4). 13. Указатели на члены (впервые появились в версии 1.2, см. раздел 13.11). Большая часть этих расширений и улучшений отражала опыт эксплуатации С-1-+ и не могла быть добавлена раньше. Естественно, для интеграции средств пришлось много поработать, и очень печально, что этой работе был отдан больший приоритет, чем завершению построения языка в соответствии с описанием, данным в статье Whatis? (см. раздел 3.15). В основном все указанные возможности так или иначе способствовали большей безопасности языка. В Cfront 2.0 проверялась согласованность типов функций через границы единиц трансляции (типобезопасная компоновка), правила разрешения перегрузки ие зависели от порядка и больше вызовов, чем раньше, признавались неоднозначными. Определение понятия константности (const) стало более полным, указатели на члены закрыли дыру в системе контроля типов. Были введены операции явного распределения и освобождения памяти на уровне класса, что сделало ненужной технику присваивания указателю this (см. раздел 3.9). Из вышеупо.мянутых возможностей 1,3,4,5,9,10,11,12 и 13 уже использовались в Bell Labs во время моей презентации на конференции USENIX в 1987 г. (см. раздел 7.1.2). 5.3. Аннотированное справочное руководаво Приблизительно к 1988 г. стало очевидным, что C-t-+ будет стандартизован [Stroustrup, 1989]. К этому моменту уже появилось несколько независимых реализаций. Настало время составить более точное и полное описание языка. Кро.ме того, следовало сделать С++ широко доступным. Поначалу о формальной стандартизации никто не думал. Многие из тех, кто непосредственно участвовал в разработке С++, считали, что заниматься стандартизацией до накопления достаточного опыта работы с языком неразумно. Однако в одиночку написать улучшенное справочное руководство я бы не смог. Необходи.мы были мнения и отклики пользователей. Поэтому я решил переписать справочное руководство по С++ и распространить его черновой вариант среди наиболее авторитетных и опытных пользователей во все.м мире. Примерно в то же время USL - подразделение AT&T, которое занималось коммерческими продажами С++, - пожелало иметь повое, улучшенное справочное
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |