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

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

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

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

Добавлен: 06.04.2023

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

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

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

Java в целом улучшила свои эксплуатационные показатели и с современными JIT-ами она может выдавать производительность на уровне С++. Это одна из причин, почему Java так популярна и при написании высокопроизводительных систем. Хоть производительность и проигрывает в сравнении с родным языком, но вы жертвуете безопасностью, мобильностью и надёжностью ради большей скорости исполнения. Это, безусловно, было бы оправданно, если бы не одно «но»: требуется всего один неопытный С++ программист, чтобы сделать приложение медленным и ненадёжным, что в конечном итоге сведет все жертвы и компромиссы на нет.

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

2. Язык программирования C++

2.1 Краткая характеристика

С++ – язык общего назначения и, по словам создателя, задуман для того, чтобы настоящие программисты получили удовольствие от самого процесса программирования. За исключением второстепенных деталей он содержит язык С как подмножество. Язык С расширяется введением гибких и эффективных средств, предназначенных для построения новых типов. Программист структурирует свою задачу, определив новые типы, которые точно соответствуют понятиям предметной области задачи. Такой метод построения программы обычно называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. С такими объектами можно работать надежно и просто даже в тех случаях, когда их тип нельзя установить на стадии трансляции. Программирование с использованием таких объектов обычно называют объектно-ориентированным. Если этот метод применяется правильно, то программы становятся короче и понятнее, а сопровождение их упрощается.

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


В языке С++ концепции контроля типов и модульного построения программ реализованы более полно, чем в С. Кроме того, С++ содержит усовершенствования, прямо с классами не связанные: символические константы, функции-подстановки, стандартные значения параметров функций, перегрузка имен функций, операции управления свободной памятью и ссылочный тип [10]. В С++ сохранены все возможности С эффективной работы с основными объектами, отражающими аппаратную «реальность» (разряды, байты, слова, адреса и т.д.). Это позволяет достаточно эффективно реализовывать пользовательские типы.

2.2 История создания

Язык программирования С++ был создан в начале 1980-х годов, его создатель – Бьёрн Страуструп.

Бьерн Страуструп является разработчиком языка С++ и создателем первого транслятора. Он – сотрудник научно-исследовательского вычислительного центра AT&T Bell Laboratories в Мюррей Хилл (Нью-Джерси, США).Он получил звание магистра математики и вычислительной техники в университете г. Аарус (Дания), а докторское звание по вычислительной технике в Кэмбриджском университете (Англия).Он специализируется в области распределенных систем, операционных систем, моделирования и программирования. Вместе с М.А. Эллисон является автором полного руководства по языку С++ – «Руководство по С++ с примечаниями». Стоит отметить, что у языка C++ отсутствует правообладатель – язык является свободным. Однако сам документ стандарта языка (за исключением черновиков) не доступен бесплатно.

Изначально создания языка программирования C++ не планировалось, а Бъерн Страуструп лишь придумал ряд усовершенствований к существующему языку программирования C для собственных нужд. Когда в конце 1970-х годов Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения [11]. Ранние версии языка С++, известные под именем «C with classes» («Си с классами»), начали появляться с 1980 года. Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры фирмы Bell, является быстрым, многофункциональным и переносимым. Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула, и добавил к нему возможность работы с классами и объектами, тем самым зародил предпосылки нового, основанного на синтаксисе С, языка программирования. В первую очередь в C были добавлены классы (с инкапсуляцией), наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. В результате практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов), так и с точки зрения времени вычислений (благодаря быстродействию C). Синтаксис C++ был основан на синтаксисе C, так как Бьёрн Страуструп стремился сохранить совместимость с языком C.


Разрабатывая C с классами, Страуструп написал программу cfront[en] – транслятор, перерабатывающий исходный код C с классами в исходный код простого C. Это позволило работать над новым языком и использовать его на практике, применяя уже имеющуюся в UNIX инфраструктуру для разработки на C. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов. К 1983 году в язык были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Получившийся язык уже перестал быть просто дополненной версией классического C и был переименован из C с классами в «C++». Его первый коммерческий выпуск состоялся в октябре 1985 года. Имя языка, получившееся в итоге, происходит от оператора унарного постфиксного инкремента C ++ (увеличение значения переменной на единицу) и общего именования через «+», чтобы указать на расширенные возможности программы компьютера. Проще говоря, знак плюса означает усовершенствование программы и придание ей нового функционала. Название языка принадлежит Рику Маскитти (Rick Mascitti) и впервые было использовано в декабре 1983 года. По Страуструпу: «Это имя означает эволюционный характер изменения из Си». Хотя большинство C кода действительно для C++, но C не образует подмножество C++.

Некоторые программисты C отметили, что если объявить x=3; и y=x++; то при выполнении x= 4, а y = 3; так как x увеличивается после того, как его значение присваивается y. Однако, если написать y=++x; то y=4 и x=4. После таких рассуждений, более подходящее название для C++ может быть фактически ++С. Однако, C++ и ++C это увеличение C, поэтому форма C++ является более распространенной, чем ++C. Педанты могут отметить, что после введения C++, язык C сам себя не изменил и наиболее точное название может быть «C +1».

При создании C++ Бьёрном Страуструпом преследовались следующие цели:

  • создание универсального языка со статическими типами данных, эффективностью и переносимостью языка C;
  • всесторонняя поддержка множества стилей программирования, в том числе обобщённого программирования, абстракции данных, процедурного и объектно-ориентированного программирования;
  • возможность предоставить программисту свободу выбора, даже при условии, что этот выбор будет неверным;
  • сохранение максимальной совместимости с C, таким образом обеспечивая легкость перехода от исходной системы программирования;
  • недопущение разночтений между C и C++ – если конструкция допустима, то в каждом из языков она имеет идентичный смысл и обеспечивает равный результат в поведении программы;
  • максимальная универсальность, избегание особенностей, зависящих от платформы;
  • недопущение падения производительности программы при использовании языка;

Несмотря на ряд известных недостатков языка C, Страуструп пошёл на его использование в качестве основы, так как «в C есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы C нам известны». Кроме того, использование готового языка дало возможность быстро получить прототип компилятора (cfront), который лишь реализовывал трансляцию нововведенных синтаксических элементов в оригинальный язык C.

По мере разработки C++ в него были включены другие средства, которые перекрывали возможности конструкций C, в связи с чем неоднократно поднимался вопрос об отказе от совместимости языков путём удаления устаревших конструкций. Тем не менее, совместимость была сохранена по следующим причинам: был сохранен действующий код, написанный на C, а также ради исключения путаницы между языками, то есть различия, имеющиеся в них, требовались быть сведенными к минимуму. Кроме того, при данном раскладе отсутствовала необходимость переучивания программистов, ранее изучавших C [11,12].

До начала официальной стандартизации язык развивался в основном силами Страуструпа в ответ на запросы программистского сообщества. Функцию стандартных описаний языка выполняли написанные Страуструпом печатные работы по C++ (описание языка, справочное руководство и так далее). В 1985 году вышло первое издание «Язык программирования C++», обеспечивающее первое описание этого языка, что было чрезвычайно важно из-за отсутствия официального стандарта.

Бьерн Страуструп: «Я придумал C++, записал его первоначальное определение и выполнил первую реализацию. Я выбрал и сформулировал критерии проектирования C++, разработал его основные возможности и отвечал за судьбу предложений по расширению языка в комитете по стандартизации C++", - пишет автор самого популярного языка программирования. - "Язык C++ многим обязан языку C, и язык C остается подмножеством языка C++ (но в C++ устранены несколько серьезных брешей системы типов C). Я также сохранил средства C, которые являются достаточно низкоуровневыми, чтобы справляться с самыми критическими системными задачами. Язык C, в свою очередь многим обязан своему предшественнику, BCPL; кстати, стиль комментариев // был взят в C++ из BCPL. Другим основным источником вдохновения был язык Simula-67. Концепция классов (с производными классами и виртуальными функциями) была позаимствована из него. Средства перегрузки операторов и возможность помещения объявлений в любом месте, где может быть записана инструкция, напоминает Algol 68.»


В 1989 году вышла версия 2.0 языка C++. Его новые возможности включали множественное наследование, абстрактные классы, статические функции-члены, функции-константы и защищённые члены. В 1990 году вышло «Комментированное справочное руководство по C++», положенное впоследствии в основу стандарта. Последние обновления включали шаблоны, исключения, пространства имён, новые способы приведения типов и логический тип [11].

После первого издания книги запросы пользователей определили развитие С++. Авторов направлял опыт широкого круга пользователей, работающих в разных областях программирования. За шесть лет, прошедших от момента выхода в свет первого издания описания С++, число пользователей возросло в сотни раз. За эти годы были усвоены многие уроки, были предложены и подтвердили практикой свое право на существование различные приемы программирования. Внедренные за это время расширения языка прежде всего были направлены на повышение выразительности С++ как языка абстракции данных и объектно-ориентированного программирования вообще и как средства для создания высококачественных библиотек с пользовательскими типами данных в частности. Библиотекой высокого качества Бьёрн Страуструп называл библиотеку, позволяющую пользователю определять с помощью классов понятия, работа с которыми сочетает удобство, эффективность и надежность. Под надежностью понимается то, что класс предоставляет защищенный по типам интерфейс между пользователями библиотеки и ее разработчиками. Эффективность предполагает, что использование классов не влечет за собой больших накладных расходов по памяти или времени по сравнению с «ручными» программами на С.

В связи с лавинообразным процессом увеличения числа пользователей С++ стало очевидно, что работа по стандартизации С++ неизбежна и что следует незамедлительно приступить к созданию основы для нее.

2.3 История стандартизации

В 1998 году был опубликован стандарт языка ISO/IEC 14882:1998 (известный как C++98), разработанный комитетом по стандартизации C++ (ISO/IEC JTC1/SC22/WG21 working group). Стандарт состоит из двух частей – основы языка (core language) и стандартной библиотеки языка, которая включает Standard Template Library (STL) и модифицированный вариант стандартной библиотеки языка C.

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