Файл: История возникновения и развития языка программирования Си (С++) и 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