Файл: История возникновения и развития языка программирования С++ и java.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 98

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

2. Особенности происхождения и развития языка программирования C++

2.1 История зарождения языка программирования C++

Язык Simula был разработан в первой половине 1960-х годов Кристеном Нюгордом (Kristen Nygaard) и Оле-Йоханом Далем (Ole-Johan Dahl) в Норвежском вычислительном центре (Norwegian Computing Center) и университете Осло (Oslo University). Язык Simula несомненно принадлежит семейству языков Algol. Фактически язык Simula является практически полным надмножеством языка Algol-60. Однако мы уделили особое внимание языку Simula, потому что он является источником большинства фундаментальных идей, которые сегодня называют объектно-ориентированным программированием. Он был первым языком, в котором реализованы наследование и виртуальные функции. Слова class для пользовательского типа и virtual для функции, которую можно заместить и вызвать с помощью интерфейса базового класса, пришли в С++ из языка Simula. [7, с.833]


Как уже было упомянуто выше, основной причиной возникновения такого языка как C++ стала растущая сложность новых технологий программирования. Одной из таких технологий является объектно-ориентированное программирование, поддержка которого стало основным новшеством языка C++.

Чтобы узнать одну из основных причин актуальности C++, можно обратиться к книге Г.Шилдта «С++: Базовый курс».

Если на вашем компьютере установлена система Windows, и ваша цель – создание Windows-ориентированных программ, вы сделали правильный выбор, решив изучать C++, поскольку C++ - это родной язык для Windows. [10, c.18]

Язык C++ был изобретен Бьярне Страуструпом в 1979 г., о чем он сам упоминает в своей книге «Программирование: принципы и практика использования С++». С++ появился во время его работы в компании Bell Laboratories в городе Мюррей-Хилл, шт. Нью-Джерси. Вначале Страуструп назвал новый язык “С with Classes” (“С с классами”). Однако в 1983 г. это название было изменено на C++.

Название С++ было придумано Риком Маскитти летом 1983г. Это название отражает эволюционный характер изменений языка С. Обозначение ++ относится к операции наращивания С. Чуть более короткое имя С+ является синтаксической ошибкой. Кроме того, оно уже было использовано как название совсем другого языка. Знатоки семантики С находят, что С++ хуже, чем ++С. Язык не получил название D, поскольку он является расширением С, и в нем не делается попыток решить какие-либо проблемы за счет отказа от возможностей С. [6, c.14]

Язык C по мнению Страуструпа являлся лучшей основой для создания нового языка программирования, так как он универсален, прост, переносим, быстр и функционален в исполнении многих задач, стыкуется со средой программирования UNIX. Страуструп добавил к С возможность работы с типами данных (классами) и объектами. Благодаря быстродействию С практические задачи моделирования оказались доступными для решения по времени разработки и вычислений. В первую очередь в C были добавлены типы данных, их наследование, проверка типов и аргументы по умолчанию. Первые версии языка, изначально называвшегося Си с классами, стали доступны с 1980 года. Затем Страуструп создал компилятор cfront, который перерабатывал код С++ в код простого С, что позволило сразу применять его на практике.

Еще одним интересным фактом является то, что возможность в С++ перегрузки операций и свобода размещения описаний всюду, где может встречаться оператор, напоминают язык Алгол-68.


2.2 Особенности развития языка программирования C++

С++ быстро стал невероятно популярен. К 1983 году в него были добавлены различные константы, виртуальные функции, ссылки, перегрузка функций и операторов, контроль пользователя над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев. В 1985 году вышло издание Языка программирования C++, это было первое описание языка, что из-за отсутствия официального стандарта было очень важно. В 1989 году состоялся выход второй версии C с новыми возможностями наследования, функциями и классами. В 1998 году был утвержден международный стандарт языка C++. Он является свободным, никто не обладает правом на владение им.

Стандарт C++ состоит из двух основных частей: описание стандартного сборника подпрограмм или объектов, используемых для разработки программ, и описание ядра языка. Кроме того, что в программах на C++ можно использовать многие библиотеки C, существует еще огромное количество нестандартных библиотек C++ .

В 1985 году произошел первый коммерческий выпуск C++ и язык приобрел современное название. А уже в следующем году вышло первое издание книги Страуструпа «The C++ Programming Language»

Сам Страуструп всегда довольно равнодушно относился к попытке полной стандартизации языка. Он больше пропагандировал реализации, в которых базовые возможности языка должны были расширяться средствами и библиотеками характерными только для данной реализации.

Основными нововведениями С++ в сравнении с C были: новые типы данных, поддержка объектно-ориентированного программирования, поддержка обобщенного программирования, исключения – реакции программы на ошибки, пространства имен (хранилища для группировки уникальных идентификаторов), встраиваемые функции, перегрузка операторов (существование в одной области видимости нескольких различных вариантов применения оператора), перегрузка имен функции, ссылки и операторы управления свободно распределяемой памятью, дополнения к стандартной библиотеке.

Наиболее значительным событием в истории языка C++ спустя десять лет после его появления стала стандартная библиотека контейнеров и алгоритмов – STL. [7, c.841]

В 1989 году вышла новая версия языка C++: 2.0. В нее вошли такие новшества, как множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищенные члены.

Работа по стандартизации C++, которая началась в конце 1989 году, осложнялась тем, что язык долгое время был открыт для расширений. Формулировки правил ARM были недостаточно конкретны, а потому часто требовали уточнений. В итоге язык стал довольно громоздким, и сейчас ни один человек не может точно запомнить все его детали и тонкости. Также с момента стандартизации сама идеология C++ изменилась. Если изначально возможность использования средств динамического определения типов (rtti) отвергалась самим автором языка, то в текущем проекте стандарта эти средства есть.


Одним из важнейших этапов в развитии языка стала публикация в 1990 году его подробного описания, которое назвали «Комментированное справочное руководство по C++». Сокращенно эту книгу часто называют ARM. Впоследствии она была положена в основу стандарта.

Вместе с самим C++ развивалась и его стандартная библиотека. Сначала к стандартной библиотеке добавили потоки ввода-вывода, которые позволяют получить средства, заменяющие традиционные функции C printf и scanf. А позже в стандартную библиотеку включили Стандартную библиотеку шаблонов, что стало самым значительным этапом в ее развитии.

Непосредственный предшественник C++ - язык C с классами – появился в 1979 году, а в 1997 году был принят международный стандарт C++, который фактически подвел итоги его 20-летнего развития. Принятие стандарта обеспечило единообразие всех реализаций языка C++. [8, c.13]

В 1998 году стандарт языка ISO/IEC 14882:1998 (известный как C++98) был опубликован.

Работы над «Стандартом» велись в течение нескольких лет, и его промежуточные варианты были постоянно доступны для пользователей языка и для авторов компиляторов. Это привело к замечательному результату: не произошло задержки между утверждением «Стандарта» и его практическим внедрением. Современные версии компиляторов реализуют практически все возможности, заложенные в язык C++. К счастью для программистов, «Стандарт» и компиляторы обеспечили и преемственность средств языка. Программы, написанные до официального утверждения «Стандарта», сохраняют работоспособность и при тех требованиях, которые предъявил к текстам программ на С++ утвержденный «Стандарт». [4, c.3]

Фирма Inprice, подразделением которой стала фирма Borland, сосредоточила свое внимание на разработке инструментария для работы с базами данных. Выпущенный ею продукт C++ Builder 4 ориентирован на проектирование клиентских и серверных компонентов распределенных программ, основанных на объектных архитектурах COM(Component Object Model) и CORBA(Common Object Request Broker Architeсture ). [5, c.2]

В 2003 году был опубликован стандарт языка ISO/IEC 14882:2003, где были исправлены выявленные ошибки и недочёты предыдущей версии стандарта. 

В 2005 году был выпущен отчёт Library Technical Report 1 (кратко называемый TR1). Данный отчет не является официально частью стандарта, но описывает расширения стандартной библиотеки, которые, как ожидалось авторами, должны быть включены в следующую версию языка C++. На данном этап стала улучшаться степень поддержки TR1 практически во всех поддерживаемых компиляторах языка C++. 


С 2009 года велась работа по обновлению предыдущего стандарта, предварительной версией нового стандарта сперва был C++09, а спустя год C++0x. В итоге в 2011 году вышел новый стандарт C++11, куда были включены дополнения в ядро языка и расширение стандартной библиотеки, в том числе большая часть TR1. 

В пересмотренном стандарте С++ ISO/IEC 14882:2011 (C++11) библиотека STL была дополнена рядом новых возможностей. [1, c.5]

Именно в С++11 появились важные фичи, благодаря которым, во-первых, C++11 можно считать практически новым языком по сравнению с предыдущим стандартом, а во-вторых, теперь на C++ можно писать такой же чистый и безопасный код, как и в случае других современных языков программирования.

Новшества стандарта C++11.

  • auto: в C++11 auto позволяет не указывать тип переменной явно; компилятор сам определяет тип исходя из типа инициализируемого значения;
  • nullptr: ключевое слово nullptr имеет свой собственный тип std:nullptr_t, что позволяет избежать проблем, которые возникали из-за используемого ранее макроса NULL (который является нулем, т.е. целым типом);
  • новые идентификаторы: override и final, которые позволили избавиться от ошибок, связанные с использованием виртуальных функций и переопределения;
  • strongly-typed enums: новая категория перечислений в C++11 помогла устранить проблемы, которые возникали при экспорте значений перечислений в окружающую область видимости (из-за чего происходил конфликт имен), при преобразовании перечислений в целый тип (т.е. они не могли иметь определенный пользователем тип).
    Новые перечисления определяются ключевым словом enum class. Они больше не экспортируют свои перечисляемые значения в окружающую область видимости, больше не преобразуются неявно в целый тип и могут иметь определенный пользователем тип (эта опция так же добавлена и для «традиционных» перечислений").;
  • интеллектуальные указатели: особенную ценность получили указатели с подсчетом ссылок и автоматическим освобождением памяти;
  • лямбда-выражения;
  • функции begin() и end(), которые работают со всеми контейнерами STL и могут быть расширены для работы с любым типом;
  • static_assert: проверяет утверждение во время компиляции;
  • семантика перемещения: 1 пример: позволяет изменять rvalue(объект, у которого нет имени), что раньше считалось невозможным, 2 пример: конструктор копирования выполняет поразрядное копирование переменных.