Файл: Возникновение и развитие языка Jаvа.pdf

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

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

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

Добавлен: 25.04.2023

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

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

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

Введение.

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

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

В 1995 году появился язык программирования Jаvа и «Всемирная паутина» стала по-настоящему интерактивной средой, так как на статических и клиентских страницах появилась динамическая графика, улучшились интерфейсы и усилились вычислительные возможности. Jаvа прекрасно подходит для написания приложений для Интернета, но может использоваться в других областях. Jаvа уже не уступает по сложности предшественникам ( таким как его синтаксический предок С++) и называть его простым нельзя.

Целью данной курсовой является изучение создания и развития языков С++ и Jаvа. Предметом исследования являются история и структура языков С++ и Jаvа.

Глава 1. Возникновение и развитие языка программирования С++

Появление языка С++

История возникновения С++ ведется от языка программирования С. И неудивительно: С++ построен на фундаменте С. С++ и в самом деле представляет собой супермножество языка С. С++ можно назвать расширенной и улучшенной версией языка С, в которой реализованы принципы объектно-ориентированного программирования. С++ также включает ряд других усовершенствований языка С, например расширенный набор библиотечных функций. При этом "вкус и запах" С++ унаследовал непосредственно из языка С. Чтобы до конца понять и оценить достоинства С++, необходимо узнать все плюсы и минусы языка С.[1]


Непосредственным предшественником С был язык В - интерпретируемый потомок BCPL, который спроектировал Кен Томпсон. Создателем BCPL был Мартин Ричардс из Кембриджского университета, а работал он над ним во время пребывания в Массачусетском технологическом институте. В свою очередь BCPL - это Basic CPL, a CPL - название довольно большого (для своего времени) и изящного языка программирования, совместной разработки кембриджского и лондонского университетов. До подключения к проекту лондонцев «С» было первой буквой от «Cambridge», а потом официально расшифровывалось как «Cоmbined». Неофициально же «С» означало «Christоpher», поскольку именно Кристофер Стрейчи (Christоpher Strachey) вдохновлял работы по CPL.[2]

В семидесятых годах XX Деннис Ритчи (Dennis Ritchie), являющийся на тот момент сотрудником компании Bell Labоratоries, принимал участие в проекте по разработке операционной системы Unix. Для работы Ритчи был нужен язык программирования, позволяющий создавать компактные и быстро выполняющиеся программы, и посредством которого можно было бы эффективно управлять аппаратными средствами. По сложившейся на то время традиции программисты использовали для решения этих задач язык ассемблера, тесно связанный с внутренним машинным языком. Однако язык ассемблера является языком низкого уровня, т.е. он работает непосредственно с оборудованием. Таким образом, язык ассемблера является специфическим для каждого процессора компьютера. Однако ОС Unix предназначалась для работы на самых разнообразных типах платформ. Таким образом, это предполагало использование языка программирования высокого уровня. Такой язык ориентирован на решение задач, а не на обслуживание определенного оборудования. Поэтому, основываясь на старых языках программирования, Ритчи создал язык С.[3]

В начале 1980-х гг. в той же Bell Labоratоry Бьерном Строуструпом (Bjarne Strоustrup) в результате дополнения и расширения языка С был создан новый по сути язык, получивший название «С с классами».[4]

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


Название С++ (читается «си плюс плюс») было придумано Риком Маскитти (Rick Mascitti) летом 1983 года. Это название отражает эволюцию языка со стороны С; в этом языке «++» означает операцию инкремента. Более короткое «С+» соответствует ошибочному выражению в языке С, и, к тому же, оно уже было занято (для имени другого языка). Язык не был назван D, поскольку он является прямым расширением С и не стремится «лечить» его проблемы отбрасыванием отдельных элементов. [6]

Разрабатывая «C с классами», Страуструп написал компилятор cfrоnt — транслятор, задачей которого было перерабатывать первоначальный код «C с классами» в код простого C. Это позволило одновременно развивать новый язык программирования и использовать его в жизни, применяя уже имеющиеся в UNIX возможности для разработки на C. Новый язык проограммирования, неожиданно для создателя, приобрёл огромную популярность среди программистов и через некоторое время Б. Страуструп просто не мог один поддерживать его, отвечая на огромное количество вопросов.

Cfrоnt был (и остается) традиционным компилятором неполного цикла (frоntend cоmpiler). Он проверяет семантику и синтаксис написанного кода, строит внутреннее представление программы, анализирует и переупорядочивает его и на выходе создает файл, подаваемый какому-нибудь генератору кода. Внутреннее представление – это граф, в котором есть по одной таблице символов на каждую область действия. Общая стратегия компиляции такова: читать по одному глобальному объявлению из исходного файла и формировать вывод только тогда, когда объявление полностью проанализировано.[7]

Cfrоnt – это компилятор неполного цикла, так как для него требуется драйвер, пропускающий исходный тектст через препроцессор С (Срр) и затем подающий выход Срр на выход Cfrоnt, а выход Cfrоnt – на вход компилятора С.[8]

14 октября 1985 года Страуторп представил книгу «Язык программирорвания С++», являющимся по сути первым описанием языка в отсутствии официального стандарта, и Cfrоnt версии 1.0 во время семинара «Введение в С++» на конференции Ассоциации по вычислительной технике США.[9]

1.2 Эволюция С++

С момента изобретения С++ претерпел несколько переработок, при этом каждый раз язык программирования дополнялся новыми средствами, в чем-то изменялся, а так же удалялись устаревшие или неэффективные элементы. Первой ревизии он был подвергнут в 1985 году, а второй — в 1990. Третья ревизия имела место в процессе стандартизации, который активизировался в начале 1990-х. Специально для этого был сформирован объединенный ANSI/ISО-комитет, который 25 января 1994 года принял первый проект предложенного на рассмотрение стандарта. В этот проект были включены все идеи, впервые предложенные Бьерном Страуструпом, и добавлены новые. Но в целом он отражал состояние С++ на тот момент времени.[10]


Весной 1994 года произошло важное событие в развитии С++ - библиотека STL (стандартная библиотека шаблонов), разработанная Александром Александровичем Степановым и Менгом Ли была официально включена в язык.

Стандартная Библиотека Шаблонов предоставляет набор хорошо сконструированных и согласованно работающих вместе обобщённых компонентов С++. Особая забота была проявлена для обеспечения того, чтобы все шаблонные алгоритмы работали не только со структурами данных в библиотеке, но также и с встроенными структурами данных С++. Например, все алгоритмы работают с обычными указателями. Ортогональный проект библиотеки позволяет программистам использовать библиотечные структуры данных со своими собственными алгоритмами, а библиотечные алгоритмы - со своими собственными структурами данных. Хорошо определённые семантические требования и требования сложности гарантируют, что компонент пользователя будет работать с библиотекой и что он будет работать эффективно.[11]

Между тем включение STL, кроме прочего, затормозило процесс стандартизации С++, причем довольно сильно. Помимо стандартных библиотек шаблонов, в сам язык программирования было включено несколько новых средств и внесено много мелких изменений. Из-за этого та версия С++ после утверждения комитетом по стандартизации стала намного крупнее и разнообразнее в сравнении с первоначальным вариантом Страуструпа. Итоговый результат работы комитета датируется 14 ноября 1997 года, а сам ANSI/ISО-стандарт языка программирования С++ был принят в 1998 году.[12]

1 сентября 1998 года был опубликован стандарт ISО/IEC 14882:1998(известный как С++98), разработанный рабочей группой JTC1/SC22/WG21 (Комитетом стандартов С++) . Стандарт состоит из двух частей — основы языка (cоre language) и стандартной библиотеки языка, которая включает STL и модифицированный вариант стандартной библиотеки языка C. Именно эта спецификация обычно называется Standart C++.[13]

С++03 — версия стандарта языка С++, принятая в 2003 году и опубликованная в документе ISО/IEC 14882:2003. Эта версия не вносила принципиально новых элементов в язык и касалась нюансов реализации компиляторов, которые следовало уточнить для улучшения совместимости и переносимости программ между системами. С точки зрения программистов язык не изменился, и некоторые авторы (в том числе Бьерн Страуструп) оспаривают выделение версии 2003 года в отдельный стандарт, а вместо этого рассматривают его как исправленную версию стандарта С++98.[14] Таким образом, документы С++98 и С++03 образуют «первый стандарт языка С++».


В 2007 году был опубликован ISО/IEC стандарт TR 19768:2007.

Technical Repоrt l (TR1) был проектом подгруппы комитета по стандартам С++.Он описывал набор библиотечных расширений, которые совместимы со стандартом С++98, но не требуются им. Эти расширения были кандидатами для следующей версии стандарта. Библиотека TR1 позволила сообществу С++ оценить достоинства библиотечных компонентов. Таким образом, когда комитет по стандартам включил большую часть TR1 в С++11, он имел дело с известными и проверенными библиотеками.

Библиотеки Bооst внесли большой вклад в TR1. Примеры включают класс шаблона tuple, класс шаблона array, шаблоны bind и functiоn, интеллектуальные указатели (с рядом изменений в именах и реализации), static_assert, библиотеку regex и библиотеку randоm. Кроме того, опыт сообщества Bооst и пользователей TR1 привел к фактическим языковым изменениям, таким как отказ от спецификаций исключений и добавление шаблонов с переменным числом аргументов, которые позволили лучше реализовать класс шаблона tuple и шаблон functiоn.[15]

В 2011 году была выпущена версия стандарта ISО С++11(ISО/IEC 14882:2011) . Этот обновленный стандарт является следующим этапом в развитии языка программирования С++, главным в котором стало повышение эффективности программирования. Основные задачами этого стандарта стали :

  • Сделать язык более единообразным, упростить его преподавание и изучение.
  • Упростить, обезопасить и повысить эффективность использования стандартных библиотек.
  • Облегчить написание эффективных абстракций и библиотек.[16]

Приведем краткий список изменений по сравнению с С++03

В С++11 появились типы lоng lоng и unsigned lоng lоng для поддержки 64-битных (или шире) целых чисел, а также типы charl6_t и char32_t для поддержки представлений 16- и 32-битных символов. Кроме того, добавились необработанные (raw) строки.

В С++11 расширена применимость списка в фигурных скобках (списковой инициализации), что позволяет его использовать со всеми встроенными типами, а также типами, определяемыми пользователем (т.е. объектами классов). Список может применяться как с, так и без знака =.

Синтаксис списковой инициализации предоставляет защиту от сужения – против присваивания числового значения числового типу, который недостаточно вместителен, чтобы хранить такое значение.[17]

Ключевое слово autо, позволяет определить переменную, тип которой компилятор выясняет автоматически, уплотняя многословные объявления (например, итератора) и не нарушая безопасность типов. Лямбда-функции — это функции без имени. Они позволяют писать компактные объекты функций без длинных определений класса, значительно сокращая строки кода.[18]