Файл: История возникновения и развития языка программирования Си (С++) и Java.(История возникновения языка C).pdf
Добавлен: 24.04.2023
Просмотров: 237
Скачиваний: 1
Ниже на рисунке 1 представлена иллюстрация истории языка С.
Язык В (1970)
Кен Томпсон
BPCL (1967)
Мартин Ричардс
ALGOL (1960)
Международная
группа
ANSI C (1989)
Объединение ANSI
K&RC (1978)
Керниган и Ритчи
Язык С (1972)
Деннис Ритчи
С11 (2011)
Объединение по стандартизации
С99 (1999)
Объединение по стандартизации
ANSI/ISOC (1990)
Стандартизация качества
Рисунок 1 – Иллюстрация истории языка С
C стал крайне успешным проектом, намного превосходящим любые ожидания. Несомненно, успех самого Unix оказался самым важным фактором; это сделало язык доступным для сотен тысяч людей. И наоборот, конечно, использование UnixC и его переносимость на самые разные машины оказались важны для успеха системы. C остается простым языком, переводимым с помощью простых и небольших компиляторов. Его типы и операции хорошо описываемы для людей с алгоритмическим мышлением, а кроссплатформенность позволяет использовать решения на совершенно различных машинах и платформах.
Не менее важно, что C и его поддержка центральной библиотеки всегда оставались на связи с реальной средой. Он был разработан для взаимодействия с операционной системой, как инструмент для написания полезных программ. Язык C все это время оставался удивительно стабильным и унифицированным, а его высокая академичность вырастила не одно поколение программистов. Тем не менее, пришло время уступить место более совершенным языкам и фреймворкам.
2. История возникновения языка C++
Бьерн Страуструпизобрел С++, написал его первые определения и создал его первую реализацию. Он выбрал и сформулировал критерии проектирования для С++, разработал основные языковые функции, разработал или помогал разрабатывать многие ранние библиотеки и в течение 30 лет отвечал за обработку предложений по расширению в комитете по стандартам С++[1].
С++ был разработан для предоставления возможностей Simula по организации программ в сочетании с эффективностью и гибкостью С для системного программирования. Язык программирования Simula был первоначальным источником механизмов абстракции С++. Понятие класса (с производными классами и виртуальными функциями) было заимствовано именно из него. Однако позже в С++ появились шаблоны и исключения с совсем другими источниками вдохновения.
Эволюция С++ всегда находилась в контексте его применения. Страуструп провел много времени, слушая пользователей и выясняя мнения опытных программистов. В частности, его коллеги из AT&TBellLaboratories были просто необходимы для развития С++ во времена его первого десятилетия.
Первоначально Страуструп разработал и реализовал язык, потому что хотел распределить службы ядра Unix по многопроцессорным и локальным сетям (которые в 2019 году называются многоядерными и кластерными). Для этого ему нужно было точно указать части системы и то, как они взаимодействовали и нужно было иметь дело непосредственно с аппаратным обеспечением, предоставить высокопроизводительные механизмы параллельного программирования, для которых С был бы идеальным, если бы не его слабая поддержка модульности и проверки типов. Результат добавления классов в стиле Simula к С дал «С с классами», который использовался для крупных проектов, в которых его возможности для написания программ, минимально использующих время и память, были подвергнуты жестким испытаниям. В нем отсутствовали перегрузка операторов, ссылки, виртуальные функции, шаблоны, исключения и многие другие детали. Первое использование С++ вне исследовательской организации началось в июле 1983 года[2].
Название «С++» было придумано Риком Маскитти летом 1983 года и выбрано Страуструпом в качестве замены названия «С с классами». Название обозначает эволюционную природу изменений от предшественника, ведь "++" – это оператор инкремента в С. Немного более короткое имя "С+" является синтаксической ошибкой; кроме того, оно уже использовалось как название языка, не связанного с С++. Язык не был назван «D», потому что был расширением С, не пытался исправить проблемы, удаляя функциональные возможности, и уже существовало несколько потенциальных наследников С с именем «D».
С++ был разработан прежде всего для того, чтобы не приходилось программировать на ассемблере, С или различных модных на то время языках высокого уровня. Его основная цель состояла в том, чтобы сделать написание хороших программ проще и приятнее для программиста. В первые годы не было никакого проекта С++ на бумаге; проектирование, документирование и реализация выполнялись одновременно. Не было ни «проекта С++», ни комитета по разработке С++. На протяжении всего времени С++ развивался, чтобы справляться с проблемами, с которыми сталкиваются пользователи, и в результате дискуссий между моими друзьями, моими коллегами и мной.
Первый дизайн С++ включал объявления функций с проверкой типов аргументов и неявными преобразованиями, классы с различием между publicинтерфейсом и privateреализацией, производные классы, а также конструкторы и деструкторы. Страуструписпользовал макросы для обеспечения примитивной параметризации. В конце 1980 года он смог представить набор языковых средств, поддерживающих согласованный набор стилей программирования и считает наиболее важным введение конструкторов и деструкторов. В этом – корень стратегий С++ по управлению ресурсами (вызвавших потребность в исключениях) и ключ ко многим технологиям, делающим код пользователя коротким и понятным. Если в то время и были другие языки, которые поддерживали несколько конструкторов, способных выполнять общий код, Страуструпих не знал. Деструкторы оказались новинкой С++.
С++ был выпущен в продажу в октябре 1985 года. К тому времени Страуструп добавил встраивание, const, перегрузку функций, указатели, перегрузку операторов и виртуальные функции. Из этих возможностей, безусловно, наиболее противоречивой была поддержка полиморфизма времени выполнения в форме виртуальных функций. Страуструп долго не мог убедить программистов в его ценности. Системные программисты склонны рассматривать косвенные вызовы функций с подозрением, а людям, знакомым с другими языками, поддерживающими объектно-ориентированное программирование, было трудно поверить, что виртуальные функции могут быть достаточно быстрыми, чтобы быть полезными в системном коде. И наоборот, многим программистам с объектно-ориентированным опытом пришлось привыкнуть (а многие до сих пор испытывают трудности) к идее, что вызовы виртуальных функций используются только для выражения выбора, который должен быть сделан во время выполнения. Сопротивление виртуальным функциям может быть связано с сопротивлением идее о том, что регулярная структура кода даст лучший результат.
В ранних документах С++ описывался следующим образом:
С++ – язык программирования общего назначения, который
- лучше С;
- поддерживает абстракцию данных;
- поддерживает объектно-ориентированное программирование.
Обратите внимание: не «С++ является объектно-ориентированным языком программирования». Здесь «поддерживает абстракцию данных» означает сокрытие информации, классы, не являющиеся частью иерархии классов, и обобщенное программирование. Изначально обобщенное программирование поддерживалось очень слабо, с использованием макросов. Шаблоны и концепты появились намного позже.
Во второй половине 1980-х годов Страуструппродолжал добавлять языковые возможности в ответ на комментарии пользователей. Наиболее важными из них были шаблоны и обработка исключений, которые на момент начала разработки стандарта считались экспериментальными. При разработке шаблонов он был вынужден выбирать между гибкостью, эффективностью и ранней проверкой типов. В то время никто не знал, как одновременно получить все три свойства. Страуструп чувствовал, что, чтобы конкурировать с кодом в стиле С для требовательных системных приложений, он должен был выбрать первые два свойства. Проектирование исключений было сосредоточено на многоуровневом распространении исключений, передаче произвольной информации обработчику ошибок и интеграции исключений и управления ресурсами с использованием локальных объектов с деструкторами для представления и освобождения ресурсов[3].
Страуструпобобщил механизмы наследования С++ для поддержки нескольких базовых классов. Это называлось множественным наследованием и считалось трудным и противоречивым. Он считал эту возможность гораздо менее важной, чем шаблоны или исключения. Многократное наследование абстрактных классов (часто называемых интерфейсами) в настоящее время широко распространено в языках, поддерживающих статическую проверку типов и объектно-ориентированное программирование.
Взрывной рост использования С++ вызвал некоторые изменения. В 1987 году стало ясно, что неизбежна формальная стандартизация С++. Результатом стало сознательное стремление поддерживать связь между разработчиками компиляторов С++ и их основными пользователями. Это было сделано с помощью бумажной и электронной почты и личных встреч на конференциях по С++ и в других местах.
AT&TBellLabs внесла большой вклад в развитие С++, позволив Страуструпу поделиться проектами пересмотренных версий справочного руководства по С++ с разработчиками и пользователями. Комитет X3J16 ANSI был созван в декабре 1989 года по инициативе Hewlett-Packard. В июне 1991 года ANSI (американская национальная) стандартизация С++ стала частью ISO (международной) стандартизации С++. Комитет ISO С++ называется "WG21". С 1990 года эти совместные комитеты по стандартам С++ стали основным форумом для развития С++ и уточнения его определения.
Проект стандарта С++11 значительно увеличил стандартную библиотеку и способствовал завершению разработки набора функциональных возможностей, необходимых для стиля программирования, который представляет собой синтез парадигм и идиом, оказавшихся успешными в С++98.
Основными целями С++11 были:
- сделать С++ лучшим языком для системного программирования и построения библиотек;
- сделать С++ проще для обучения и изучения[4].
Принятый трехлетний цикл обновления стандарта предопределил вектор развития C++. Так, сначала С++14, а затем С++17 становится основным диктатом функционального набор языка. Следующий раз комитет соберется для пересмотра стандарта в 2020 году.
Стандарт говорит о том, что будет работать и как именно. С ростом языка и его стандартной библиотеки проблема популяризации эффективных стилей программирования стала критической. До сих пор есть люди, которые считают С++ незначительным дополнением к С, и люди, которые считают объектно-ориентированные стили программирования 1980-х годов, основанные на массивной иерархии классов, вершиной развития. Многие пытаются использовать С++11 в средах с большим количеством старого кода С++. С другой стороны, есть также много тех, кто с энтузиазмом использует новые возможности. Например, некоторые программисты убеждены, что истинным С++ является только код, использующий огромное количество шаблонного метапрограммирования.
В настоящее время С++– очень широко используемый язык программирования. Количество его пользователей быстро увеличилось с одного в 1979 году до 400 тысяч в 1991 году, т.е. число пользователей удваивалось примерно каждые 7,5 месяца в течение более десяти лет. Естественно, с момента первоначального всплеска роста темпы роста замедлились, но, по моим оценкам, в 2019 году имеется около 4,5 миллиона программистов на С++. Большая часть этого роста приходится на время после 2005 года, когда экспоненциальный рост скорости процессора прекратился, так что очень важным фактором стала производительность языка. Этот рост был достигнут без какого-либо маркетинга или организованного сообщества пользователей.
Ниже на рисунке 2 представлена иллюстрация истории языка С++.
(1985)
Первая коммерческая редакция
(1984)
Официальное имя С++
(1982)
Публикация
языка С с классами
(2003)
Выход С++ 3.0 c исправлениями
(1997)
Сертификация ISO
C++ 98 ISO
(1989)
Выход С++ 2.0
(2014)
Выход С++ 14
(2011)
Выход С++ 11
(2009)
Выход С++ OX
(2020)
Разработка С++ 20
(2017)
Выход С++ 17