Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет21/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   17   18   19   20   21   22   23   24   ...   256
Историческая справка 
Безусловно С++ многим обязан языку С [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]. 
Изначально С++ был задуман для того, чтобы автору и его друзьям не надо было программировать на 


Бьерн Страуструп.
Язык программирования С++ 
 
15 
ассемблере, С или других современных языках высокого уровня. Основное его предназначение - 
упростить и сделать более приятным процесс программирования для отдельного программиста. До 
недавнего времени не было плана разработки С++ на бумаге. Проектирование, реализация и 
документирование шли параллельно. Никогда не существовало "проекта С++" или "Комитета по 
разработке С++". Поэтому язык развивался и продолжает развиваться так, чтобы преодолеть все 
проблемы, с которыми столкнулись пользователи. Толчками к развитию служат также и обсуждения 
автором всех проблем с его друзьями и коллегами. 
В связи с лавинообразным процессом увеличения числа пользователей С++, пришлось сделать 
следующие изменения. Примерно в 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. 


Достарыңызбен бөлісу:
1   ...   17   18   19   20   21   22   23   24   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет