Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
c++book1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
2 Мб
Скачать
☆

Исторические Замечания

Безусловно, С++ восходит главным образом к C [7]. C сох­ранен как подможество, поэтому сделанного в C акцента на средствах низкого уровня достаточно, чтобы справляться с са­мыми насущными задачами системного программирования. C, в свою очередь, многим обязан своему предшественнику BCPL [9]. На самом деле, комментарии // (заново) введены в С++ из BCPL. Если вы знаете BCPL, то вы заметите, что в С++ по-прежнему нет VALOF блока. Еще одним источником вдохновения послужил язык Simula67 [2,3], из него была позаимствована концепция класса (вместе с производными классами и функциями членами). Это было сделано, чтобы способствовать модульности через ис­пользование виртуальных функций. Возможности С++ по перегруз­ке операций и свобода в расположении описаний везде, где мо­жет встречаться оператор, похожи на Алгол68 [14].

Название С++ - изобретение совсем недавнее (лета 1983-его). Более ранние версии языка использовались начиная с 1980-ого и были известны как "C с Классами". Первоначально язык был придуман потому, что автор хотел написать событийно управляемые модели для чего был бы идеален Simula67, если не принимать во внимание эффективность. "C с Классами" использо­вался для крупных проектов моделирования, в которых строго тестировались возможности написания программ, требующих (только) минимального пространства памяти и времени на выпол­нение. В "C с Классами" не хватало перегрузки операций, ссы­лок, виртуальных функций и многих деталей. С++ был впервые введен за пределами исследовательской группы автора в июле 1983го. Однако тогда многие особенности С++ были еще не при­думаны.

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

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

В качестве базового языка для С++ был выбран C, потому что он

[1] многоцелевой, лаконичный и относительно низкого уровня,

[2] отвечает большинству задач системного программирования,

[3] идет везде и на всем и

[4] пригоден в среде программирования UNIX.

В C есть свои сложности, но в наспех спроектированном языке тоже были бы свои, а сложности C нам известны. Самое главное, работа с C позволила "C с Классами" быть полезным (правда, неудобным) инструментом в ходе первых месяцев разду­мий о добавлении к C Simula-подобных классов.

С++ стал использоваться шире, и по мере того, как воз­можности, предоставляемые им помимо возможностей C, станови­лись все более существенными, вновь и вновь поднимался вопрос о том, сохранять ли совместимость с C. Ясно, что отказавшись от определенной части наследия C можно было бы избежать ряда проблем (см., например, Сэти [12]). Это не было сделано, по­тому что

[1] есть миллионы строк на C, которые могли бы принести пользу в С++ при условии, что их не нужно было бы полностью переписывать с C на С++,

[2] есть сотни тысяч строк библиотечных функций и сер­висных программ, написанных на C, которые можно было бы ис­пользовать из или на С++ при условии, что С++ полностью сов­местим с C по загрузке и синтаксически очень похож на C,

[3] есть десятки тысяч программистов, которые знают C, и которым, поэтому, нужно только научиться использовать новые особенности С++, а не заново изучать его основы и

[4] поскольку С++ и C будут использоваться на одних и тех же системах одними и теми же людьми, отличия должны быть либо очень большими, либо очень маленькими, чтобы свести к минимуму ошибки и недоразумения.

Позднее была проведена проверка определения С++, чтобы удостовериться в том, что любая конструкция, допустимая и в C и в С++, действительно означает в обоих языках одно и то же.

Язык C сам эволюционировал за последние несколько лет, частично под влиянием развития С++ (см. Ростлер [11]). Пред­варительный грубый ANSI стандарт C [10] содержит синтаксис описаний функций, заимствованный из "C с Классами". Заимство­вание идей идет в обе стороны. Например, указатель void* был придуман для ANSI C и впервые реализован в С++. Когда ANSI стандарт разовьется несколько дальше, придет время пересмот­реть С++, чтобы удалить необоснованную несовместимость. Бу­дет, например, модернизирован препроцессор (#с.11), и нужно будет, вероятно, отрегулировать правила выполнения плавающей арифметики. Это не должно оказаться болезненным, и C и ANSI C очень близки к тому, чтобы стать подмножествами С++ (см. #с.11).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]