Исторические Замечания
Исторические Замечания
Безусловно, С++ восходит главным образом к 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).
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
4.1. Исторические сведения и терминология
4.1. Исторические сведения и терминология В «недобрые старые дни» становления компьютерных технологий, примерно совпадающие по времени с периодом использования перфокарт, существовало множество наборов символов. К счастью, с появлением кода ASCII в 1970-х годах эти дни
Исторические стили
Исторические стили Античный стильАнтичный стиль — это образ греческой колонны, стремящейся ввысь, к свету и совершенству. Под античностью понимают архитектуру древней Греции и Рима. Древнегреческая архитектура, возникшая на островах Эгейского моря, была настолько
Замечания по Реализации
Замечания по Реализации Во время написания этой книги все реализации С++ использовали версии единственного интерфейсного компилятора*. Он используется на многих архитектурах, включая действующие версии системы операционной системы UNIX на AT amp;T 3B, DEC VAX, IBM 370 и Motorolla 68000.
Философские Замечания
Философские Замечания Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели
Замечания для Программистов на C
Замечания для Программистов на C Чем лучше кто-нибудь знает C, тем труднее окажется избежать писания на С++ в стиле C, теряя, тем самым, некоторые возможные выгоды С++. Поэтому проглядите, пожалуйста, раздел «Отличия от C» в справочном руководстве (#с.15). Там указываются области,
4.5.4. Заключительные замечания
4.5.4. Заключительные замечания Три решения задачи о восьми ферзях показывают, как к одной и той же задаче можно применять различные подходы. Мы варьировали также и представление данных. В одних случаях это представление было более экономным, в других — более наглядным и,
14.7. Заключительные замечания
14.7. Заключительные замечания Нашу оболочку экспертной системы можно развивать в целом ряде направлений. В данный момент уместно сделать несколько критических замечаний и высказать предложения по усовершенствованию нашей программы.В нашей программе, являющейся
16.4. Заключительные замечания
16.4. Заключительные замечания Нашего простого интерпретатора было вполне достаточно для того, чтобы проиллюстрировать некоторые идеи, лежащие в основе программирования в терминах образцов. Применение этого интерпретатора для более сложных приложений потребовало бы
5.6 Исторические справки
5.6 Исторические справки Документация, требуемая в качестве исторической справки по проекту. Данная документация может помочь в переносе и переводе программного обеспечения в новое
Библиографические замечания
Библиографические замечания Ряд материалов этой лекции представлен в докладах на форумах OOPSLA 95 и TOOLS PACIFIC 95, а также опубликован в [M 1996a]. Ряд обзорных материалов заимствован из статьи [M 1989e].Понятие автоматического выведения типов введено в [Milner 1989], где описан алгоритм
Библиографические замечания
Библиографические замечания Проблемы перечислимых типов были изучены в работах [Welsh 1977] и [Moffat 1981]. Некоторые приемы, рассмотренные в этой лекции, впервые представлены в [M
Полезные замечания
Полезные замечания Чтобы выяснить, какие устройства подключены к компьютеру, и убедиться, что эти устройства работают нормально, проще всего воспользоваться Диспетчером устройств. Некоторые внешние устройства операционная система подключает и показывает в Диспетчере
1.3. Исторические традиции в веб-искусстве
1.3. Исторические традиции в веб-искусстве Понятно, что никакой глубокой истории веб-дизайн – столь молодое направление в искусстве, находящееся еще на стадии полуремесла, – не имеет. Однако он имеет солидную предысторию. Если судить по общим тенденциям развития