Файл: История возникновения и развития языка программирования С++ и java.pdf
Добавлен: 01.04.2023
Просмотров: 97
Скачиваний: 2
СОДЕРЖАНИЕ
1. Особенности возникновения и развития языка программирования Java.
1.1 История возникновения языка Java
1.2 Эволюция языка программирования Java
1.3 Современное состояние языка программирования Java
2. Особенности происхождения и развития языка программирования C++
2.1 История зарождения языка программирования C++
2.2 Особенности развития языка программирования C++
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 пример: конструктор копирования выполняет поразрядное копирование переменных.