Бьерн Страуструп - Язык программирования С++. Вступление, глава 1
Страница 7. Историческая справка



                          Историческая справка


    Безусловно С++ многим обязан языку С [8], который сохраняется как его
подмножество. Сохранены и все свойственные С средства низкого уровня,
предназначенные для решения самых насущных задач системного
программирования. С, в свою очередь, многим обязан своему предшественнику
языку BCPL [13]. Комментарий языка BCPL был восстановлен в С++.  Если
читатель знаком с языком BCPL, то может заметить, что в С++ по-прежнему
нет блока VALOF. Еще одним источником вдохновения был язык SIMULA-67
[2,3]; именно из него была заимствована концепция классов (вместе c
производными классами и виртуальными функциями).  Оператор inspect из
SIMULA-67 намеренно не был включен в С++.  Причина - желание
способствовать модульности за счет использования виртуальных функций.
Возможность в С++ перегрузки операций и свобода размещения описаний всюду,
где может встречаться оператор, напоминают язык Алгол-68 [24].

    С момента выхода в свет первого издания этой книги язык С++ подвергся
существенным изменениям и уточнениям. В основном это касается разрешения
неоднозначности при перегрузке, связывании и управлении памятью. Вместе с
тем, были внесены незначительные изменения с целью увеличить совместимость
с языком С. Были также введены некоторые обобщения и существенные
расширения, как то: множественное наследование, функции-члены со
спецификациями static и const, защищенные члены (protected), шаблоны типа
и обработка особых ситуаций. Все эти расширения и доработки были нацелены
на то, чтобы С++ стал языком, на котором можно создавать и использовать
библиотеки. Все изменения описываются в [10,18,20,21 и 23].

    Шаблоны типов появились частично из-за желания формализовать
макросредства, а частично были инспирированы описанием генерических
объектов в языке Ада (с учетом их достоинств и недостатков) и
параметризированными модулями языка CLU. Механизм обработки особых
ситуаций появился отчасти под влиянием языков Ада и CLU [11], а отчасти
под влиянием ML [26]. Другие расширения, введенные за период между 1985 и
1991 г.г. (такие как множественное наследование, статические функции-члены
и чистые виртуальные функции), скорее появились в результате обобщения
опыта программирования на С++, чем были почерпнуты из других языков.

    Более ранние версии языка, получившие название "С с классами" [16],
использовались, начиная с 1980 г. Этот язык возник потому, что автору
потребовалось написать программы моделирования, управляемые прерываниями.
Язык SIMULA-67 идеально подходит для этого, если не учитывать
эффективность. Язык "С с классами" использовался для больших задач
моделирования. Строгой проверке подверглись тогда возможности написания на
нем программ, для которых критичны ресурсы времени и памяти. В этом языке
недоставало перегрузки операций, ссылок, виртуальных функций и многих
других возможностей.  Впервые С++ вышел за пределы исследовательской
группы, в которой работал автор, в июле 1983 г., однако тогда многие
возможности С++ еще не были разработаны.

    Название С++ (си плюс плюс) , было придумано Риком Маскитти летом 1983
г. Это название отражает эволюционный характер изменений языка С.
Обозначение ++ относится к операции наращивания С. Чуть более короткое имя
С+ является синтаксической ошибкой. Кроме того, оно уже было использовано
как название совсем другого языка. Знатоки семантики С находят, что С++
хуже, чем ++С. Язык не получил названия D, поскольку он является
расширением С, и в нем не делается попыток решить какие-либо проблемы за
счет отказа от возможностей С. Еще одну интересную интерпретацию названия
С++ можно найти в приложении к [12].

    Изначально С++ был задуман для того, чтобы автору и его друзьям не
надо было программировать на ассемблере, С или других современных языках
высокого уровня. Основное его предназначение - упростить и сделать более
приятным процесс программирования для отдельного программиста.  До
недавнего времени не было плана разработки С++ на бумаге. Проектирование,
реализация и документирование шли параллельно. Никогда не существовало
"проекта С++" или "Комитета по разработке С++". Поэтому язык развивался и
продолжает развиваться так, чтобы преодолеть все проблемы, с которыми
столкнулись пользователи. Толчками к развитию служат также и обсуждения
автором всех проблем с его друзьями и коллегами.

    В связи с лавинообразным процессом увеличения числа пользователей С++,
пришлось сделать следующие изменения. Примерно в 1987 г. стало очевидно,
что работа по стандартизации С++ неизбежна и что следует незамедлительно
приступить к созданию основы для нее [22].  В результате были предприняты
целенаправленные действия, чтобы установить контакт между разработчиками
С++ и большинством пользователей.  Применялась обычная и электронная
почта, а также было непосредственное общение на конференциях по С++ и
других встречах.

    Фирма AT&T Bell Laboratories внесла основной вклад в эту работу,
предоставив автору право изучать версии справочного руководства по языку
вместе с упоминавшимися разработчиками и пользователями.  Не следует
недооценивать этот вклад, т.к. многие из них работают в компаниях, которые
можно считать конкурентами фирмы AT&T.  Менее просвещенная компания могла
бы просто ничего не делать, и в результате появилось бы несколько
несогласованных версий языка.  Около ста представителей из порядка 20
организаций изучали и комментировали то, что стало современной версией
справочного руководства и исходными материалами для ANSI по стандартизации
С++. Их имена можно найти в "Аннотированном справочном руководстве по
языку С++" [4].  Справочное руководство полностью вошло в настоящую книгу.
Наконец, по инициативе фирмы Hewlett-Packard в декабре 1989 г. в составе
ANSI был образован комитет X3J16. Ожидается, что работы по стандартизации
С++ в ANSI (американский стандарт) станут составной частью работ по
стандартизации силами ISO (Международной организации по стандартизации).

    С++ развивался одновременно с развитием некоторых фундаментальных
классов, представленных в данной книге. Например, автор разрабатывал
классы complex, vector и stack, создавая одновременно возможность
перегрузки операций.  В результате этих же усилий и благодаря содействию
Д. Шапиро появились строковые и списочные классы. Эти классы стали первыми
библиотечными классами, которые начали активно использоваться. Библиотека
task, описываемая в [19] и в упражнении 13 из $$6.8 стала частью самой
первой программы, написанной на языке "С с классами". Эта программа и
используемые в ней классы были созданы для моделирования в стиле Симулы.
Библиотека task была существенно переработана Д. Шапиро и продолжает
активно использоваться до настоящего времени. Потоковая библиотека, как
указывалось в первом издании книги, была разработана и применена автором.
Д. Шварц преобразовал ее в потоковую библиотеку ввода-вывода ($$10),
используя наряду с другими приемами метод манипуляторов Э.Кенига
($$10.4.2). Класс map ($$8.8) был предложен Э.Кенигом.  Он же создал класс
Pool ($$13.10), чтобы использовать для библиотеки предложенный автором
способ распределения памяти для классов ($$5.5.6). На создание остальных
шаблонов повлияли шаблоны Vector, Map, Slist и sort, представленные в
главе 8.

 
« Предыдущая статья   Следующая статья »