Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

История возникновения и развития языка программирования Си (С++) и Java

Содержание:

Введение

Высокоуровневые языки программирования характеризуются наличием смысловых конструкций для описания операций. Их изучение занимает немало времени, а применение на практике требует внимательности и понимания основных структур и правил синтаксиса и лексики. Но при этом владение языками высокого уровня позволяет создавать большие, красочные, многофункциональные проекты в рекордные сроки.

К высокому уровню относятся Pascal, Java, C, C++, C#, Delphi и многие другие. Используются они для написания программного обеспечения и прикладных программ.

Наиболее востребованные языки программирования Какие же самые востребованные языки программирования на сегодняшний день? В последние годы наиболее популярными и востребованными считаются Java, C, C++, Python, C#, которые входят в топы языков программирования. Именно они составляют основу современных программ и используются при написании любого крупного проекта. Более 70% программистов работают с этими языками. Прогнозируется, что в ближайшие 10 лет они будут все так же востребованы, как и сегодня.

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

Объект исследования: языки программирования Си (С++) и Java.

Задачи исследования:

  • Изучить историю возникновения и развития языка Си
  • Изучить историю возникновения и развития языка Си++
  • Изучить историю стандартов Си++
  • Изучить начало разработки языка Java
  • Изучить связь языков Java и C++
  • Изучить обзор версий Java

Глава 1. История развития языка Си и Си++

1.1 Язык Си

Язык С буквально потряс компьютерный мир. Его влияние нельзя недооценивать, поскольку он полностью изменил подход к программированию. Создание языка С было прямым следствием потребности в структурированном, эффективном и высокоуровневом языке, который мог бы заменить код ассемблера в процессе создания системных программ.

А началось всё с появлением языка B, созданного в 1969 году коллективом исследователей из Технологического института Массачусетса (MIT). Кен Томпсон является главным автором B. В то время команда разрабатывала операционную систему UNIX. Язык PL/I, уже существовавший и применявшийся тогда для мэйнфреймов, изготовленных компанией IBM, меньше подходил для решения поставленной задачи, кроме того был достаточно громоздким. Исходя из этого, ученые решили поработать над созданием нового языка, получившего название B. Это типичный представитель ранних императивных языков программирования.

Как это ни странно, последователем B стал изобретенный в 1972 году язык программирования C. В его основу положен сам B [2].

Язык C создали Денис Ритчи и Кен Томпсон, работники исследовательской лаборатории компании под названием AT&T (AT&T Bell Telephone Laboratories). Над созданием расширенной версии B Ритчи начал свою работу в 1971 году. Сначала разработчик назвал её NB (New B), но после того как язык получил большие отличия от B, название заменили на C. B получил расширение за счет явного применения структур, типов и ряда новых операций.

Питер Мойлан писал в своей книге «The case against C» по поводу создания языка Си о том, что люди нуждались в языке, способном обойти некоторые строгие правила, встроенные в большую часть языков высокого уровня и поддерживающих их надежность. Требовался язык, позволяющий делать то, что реализовать до него можно было лишь на уровне машинного кода или на ассемблере.

До появления языка С программистам, как правило, приходилось выбирать между языками, которые позволяли оптимизировать тот или иной набор характеристик. Например, хотя FORTRAN можно было использовать при написании достаточно эффективных программ для научных приложений, он не очень подходил для создания системного кода. Аналогично, в то время как язык BASIC был очень прост в изучении, он предоставлял не очень много функциональных возможностей, а его недостаточная структурированность ставила под сомнение его полезность при создании крупных программ. Язык ассемблера можно использовать для создания очень эффективных программ, но его трудно изучать и эффективно использовать. Более того, отладка ассемблерного кода может оказаться весьма сложной задачей [1].

Еще одной сыгравшей свою роль проблемой было то, что ранние языки программирования, такие как BASIC, COBOL и FORTRAN, были спроектированы без учета принципов структурирования. Вместо этого в них основными средствами управления программой были операторы безусловного перехода GOTO. В результате программы, созданные с применением этих языков, тяготели к созданию так называемого “макаронного кода” — множества запутанных переходов и условных ветвей, которые делали программу буквально недоступной для понимания. Хотя такие языки как Pascal и структурированы, они не были предназначены для создания максимально эффективных программ и были лишены рада важных функций, необходимых для применения этих языков к написанию широкого круга программ. (В частности, учитывая существование нескольких стандартных диалектов Pascal, было нецелесообразно применять этот язык для создания кода системного уровня.)

Таким образом, непосредственно накануне изобретения языка С, несмотря на затраченные усилия, ни одному языку не удалось решить существующие конфликты. Вместе с тем потребность в таком языке становилась все более насущной. В начале 70-х гг. началась компьютерная революция, и потребность в программном обеспечении быстро превысила возможности программистов по его созданию. В академических кругах большие усилия были приложены к созданию более совершенного языка программирования. Однако, и это наиболее важно, все больше стало ощущаться влияние еще одного фактора. Компьютеры, наконец, получили достаточно широкое распространение, чтобы была достигнута “критическая масса”. Компьютеры больше не находились за запертыми дверями. Впервые программисты получили буквально неограниченный доступ к своим компьютерам. Это дало свободу экспериментам. Программисты смогли также приступить к созданию своих собственных программных средств. Накануне создания языка С произошел качественный скачок в области компьютерных языков [4].

Изобретенный и впервые реализованный Деннисом Ритчи на компьютере DEC PDP-11, работающем под управлением операционной системы UNIX, язык С явился результатом процесса разработки, начавшегося с предшествующего языка

Язык С был формально стандартизован в декабре 1989 г., когда Национальный институт стандартизации США (American National Standards Institute — ANSI) принял стандарт С.

Многие считают создание языка С началом современного этапа развития компьютерных языков. Он успешно объединил конфликтующие компоненты, которые доставляли столько неприятностей в предшествующих языках. Результатом явился мощный, эффективный, структурированный язык, изучение которого было сравнительно простым. Кроме того, ему была присуща еще одна, почти непостижимая особенность: он был языком программиста. До появления С языки программирования проектировались, в основном, либо в качестве академических упражнений, либо бюрократическими организациями. Язык С — иное дело. Он был спроектирован, реализован и разработан действительно работающими программистами и отражал их подход к программированию. Его функции были отлажены, проверены и многократно переработаны людьми, которые действительно использовали этот язык. В результате появился язык, который нравилось использовать программистам. Действительно С быстро приобрел много приверженцев, которые почти молились на него. Поэтому язык С получил быстрое и широкое признание в программистском сообществе. Короче говоря, С — это язык, разработанный программистами и для программистов. Как вы вскоре убедитесь, язык Java унаследовал эту особенность.

1.2 Язык Си++

В конце 70-х-начале 80-х гг. язык С стал превалирующим компьютерным языком программирования, и он продолжает широко применяться и в настоящее время. Поскольку С — удачный и удобный язык, может возникнуть вопрос, чем обусловлена потребность в чем-либо еще. Ответ: растущей сложностью. На протяжении всей истории развития программирования всевозрастающая сложность программ порождала потребность в более совершенных способах преодоления этой сложности. Язык C++ явился ответом на эту потребность. Чтобы лучше понять, почему потребность преодоления сложности программ является главной побудительной причиной создания языка C++, рассмотрим следующие факторы [3].

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

Использование структурированных языков впервые предоставило программистам возможность достаточно легко создавать программы средней сложности. Однако даже при использовании методов структурного программирования по достижении проектом определенного размера его сложность начинала превышать ту, с которой программист мог справиться. К началу 80-х гг. сложность многих проектов начала превышать ту, с которой можно было справиться с использованием структурного подхода. Для решения этой проблемы был изобретен новый способ программирования, получивший название объектно-ориентированного программирования (ООП).

Объектно-ориентированное программирование подробно рассматривается в последующих главах этой книги, но мы все же приведем краткое определение: ООП — это методология программирования, которая помогает организовывать сложные программы за счет использования наследования, инкапсуляции и полиморфизма [6]. 

Хотя С — один из основных мировых языков программирования, существует предел его способности справляться со сложностью программ. Как только размеры программы превышают определенное значение, она становится слишком сложной, чтобы ее можно было охватить как единое целое. Хотя точное значение этого предела зависит как от структуры самой программы, так и от подходов, используемых программистом, начиная с определенного момента любая программа становится слишком сложной для понимания и внесения изменений. Язык C++ предоставил возможности, которые позволили программисту преодолевать этот барьер, чтобы контролировать большие по размеру программы и управлять ими. 

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

Бьярне Страуструп (Bell Labs) в 1984 году выступил с демонстрацией проекта языка С++. В период занятий исследованиями в фирме, Страуструп написал несколько имитационных программ, которые требовались для моделирования распределенных вычислений. Для решения подобных задач идеальным инструментом мог бы стать объектно-ориентированный язык программирования SIMULA-67, если бы он не характеризовался сравнительно низкой скоростью выполнения программ [5].

Если вы вынуждены делать выбор между написанием «быстрого» и «хорошего» кода, - это означает, что что-то идёт не так. Поскольку, согласно позиции Страуструпа, «хороший» код обязательно является «быстрым».

Так был создан С++, - язык программирования, которому первоначально дали название С with classes («Си с классами»). А придумал название «С++» Рик Мэсчитти. "++" является оператором инкремента в С, словно намекающий на то обстоятельство, что язык С++, что-то большее, чем просто С.

К концу 80-х-началу 90-х гг. объектно-ориентированное программирование с применением языка C++ стало основным методом программирования. Действительно, в течение некоторого непродолжительного времени казалось, что программисты, наконец, изобрели идеальный язык. Поскольку язык C++ сочетал в себе высокую эффективность и стилистические элементы языка С с объектно- ориентированным подходом, этот язык можно было использовать для создания самого широкого круга программ. Однако, как и в прошлом, уже вызревали факторы, которые должны были, в который раз, стимулировать развитие компьютерных языков [3]. Пройдет еще несколько лет, и World Wide Web и Интернет достигнут критической массы. Это приведет к еще одной революции в программировании.

1.3 История выхода стандартов

Год

Описание стандарта

1983

создатель языка – Бьёрн Страуструп, сотрудник Bell Labs, представил раннюю версию языка C++ (“Си с классами”)

1985

первый коммерческий выпуск C++, язык приобретает современное название

1986

ратифицирован международный стандарт языка C++: ISO/IEC 14882:1998 «Standard for the C++ Programming Language»

2003

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

2005

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

2011

выход нового стандарта – C++11 или ISO/IEC 14882:2011; новый стандарт включил дополнения в ядре языка и расширение стандартной библиотеки, в том числе большую часть TR1

2014

выход стандарта C++14 («International Standard ISO/IEC 14882:2014(E) Programming Language C++»); C++14 можно рассматривать как небольшое расширение над C++11, содержащее в основном исправления ошибок и небольшие улучшения

2017

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

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

Глава 2. История и развитие языка Java

2.1 Начало разработки языка Java

Начало разработки языка Java было положено в 1991 г. Джеймсом Гослингом (James Gosling), Патриком Нотоном (Patrick Naughton), Крисом Вартом (Chris Warth), Эдом Франком (Ed Frank) и Майком Шериданом (Mike Sheridan), работавшими в компании Sun Microsystems, Inc. Разработка первой работающей версии заняла 18 месяцев. Вначале язык получил название “Oak” (“Дуб”), но в 1995 г. он  был переименован в “Java”. Между первой реализацией языка Oak в конце 1992 г. и публичным объявлением о создании Java весной 1995 г. множество других людей приняли участие в проектировании и развитии этого языка. Билл Джой (Bill Joy), Артур ван Хофф (Arthur van Hoff), Джонатан Пэйн (Jonathan Payne), Франк Иеллин (Frank Yellin) и Тим Линдхольм (Tim Lindholm) внесли основной вклад в развитие исходного прототипа [10]. 

Как ни странно, первоначальной побудительной причиной создания языка Java послужил вовсе не Интернет! Основная причина — потребность в независящем от платформы (т.е. архитектурно нейтральном) языке, который можно было бы использовать для создания программного обеспечения, встраиваемого в различные бытовые электронные устройства, такие как микроволновые печи и устройства дистанционного управления. Как ни трудно догадаться, в качестве контроллеров используется множество различных типов процессоров.

Примерно в то же время, когда определялись основные характеристики языка Java, на сцену выступил второй, несомненно, более важный фактор, который должен был сыграть решающую роль в судьбе этого языка. Конечно же, этим вторым фактором была World Wide Web. Если бы формирование веб не происходило почти одновременно с реализацией Java, этот язык мог бы остаться полезным, но незамеченным языком программирования бытовых электронных устройств. Но с появлением World Wide Web язык Java вышел на передний рубеж проектирования компьютерных языков, поскольку веб также нуждался в переносимых программах.  

Еще на заре своей карьеры большинство программистов твердо усвоили, что переносимые программы столь же недостижимы, сколь и желанны. В то время как потребность в средстве создания эффективных, переносимых (не зависящих от платформы) программ была почти столь же стара, как и сама отрасль программирования, она отодвигалась на задний план другими, более насущными, проблемами. Более того, поскольку большая часть самого мира компьютеров была разделена на три конкурирующих лагеря Intel, Microsoft и UNIX, большинство программистов оставались запертыми в своих аппаратно-программных “твердынях”, что несколько снижало потребность в переносимом коде. Тем не менее с появлением Интернета и веб старая проблема переносимости снова возникла с еще большей актуальностью. В конце концов, Интернет представляет собой разнообразную и распределенную вселенную, заполненную множеством различных типов компьютеров, операционных систем и процессоров. Несмотря на то что к Интернету подключено множество типов платформ, пользователям желательно, чтобы все они могли выполнять одинаковые программы. То, что в начале было неприятной, но не слишком насущной проблемой, превратилось в потребность первостепенной важности [7]. 

К 1993 г. членам группы проектирования Java стало очевидно, что проблемы переносимости, часто возникающие при создании кода, предназначенного для встраивания в контроллеры, возникают также и при попытках создания кода для Интернета. Фактически та же проблема, для решения которой в малом масштабе предназначался язык Java, в большем масштабе была актуальна и в среде Интернета. Понимание этого обстоятельства вынудило разработчиков языка Java перенести свое внимание с бытовой электроники на программирование для Интернета. Таким образом, хотя потребность в архитектурно нейтральном языке программирования послужила своего рода “начальной искрой”, Интернет обеспечил крупномасштабный успех Java. 

2.2 Связь языков Java и C++

Как уже упоминалось, язык Java наследует многие из своих характеристик от языков С и C++. Это сделано намеренно. Разработчики Java знали, что использование знакомого синтаксиса С и повторение объектно-ориентированных свойств C++ должно было сделать их язык привлекательным для миллионов опытных программистов на С /C++. Помимо внешнего сходства, язык Java использует ряд других атрибутов, которые способствовали успеху языков С и C++. Во-первых, язык Java был спроектирован, проверен и усовершенствован настоящими работающими программистами. Этот язык построен с учетом потребностей и опыта людей, которые его создали. Таким образом, Java — это язык программистов. Во-вторых, Java целостен и логически непротиворечив. В-третьих, если не учитывать ограничения, накладываемые средой Интернета, Java предоставляет программисту полный контроль над программой. Если программирование выполняется правильно, это непосредственно отражается в программах. В равной степени справедливо и обратное. Иначе говоря, Java не является языком тренажера. Это язык профессиональных программистов [8]. 

Из-за сходства характеристик языков Java и С, кое-кто склонен считать Java просто “версией языка C++ для Интернета”. Однако это серьезное заблуждение. ЯзыкyJava присущи значительные практические и концептуальные отличия. Хотя и верно, что язык C++ оказал влияние на характеристики языка Java, последний не является усовершенствованной версией C++. Например, Java не обладает совместимостью с C++. Конечно, сходство с языком C++ значительно, и в программе Java программист C++ будет чувствовать себя как дома. Вместе с тем, Java не предназначен служить заменой C++. Язык Java предназначен для решения одного набора проблем, а C++ — для решения другого. Еще длительное время оба эти языка неизбежно будут сосуществовать. 

Как было отмечено в начале этой главы, развитие компьютерных языков обусловлено двумя причинами: необходимостью адаптации к изменениям в среде и необходимостью реализации новых идей в области программирования. Изменением среды, которое обусловило потребность в языке, подобном Java, была потребность в независящих от платформы программах, предназначенных для распространения в Интернете. Однако Java изменяет также подход к написанию программ. В частности, Java углубил и усовершенствовал объектно-ориентированный подход, использованный в C++, добавил в него поддержку многопоточной обработки и предоставил библиотеку, которая упростила доступ к Интернету. Однако столь поразительный успех Java обусловлен не теми или иными его отдельными особенностями, а их совокупностью как языка в целом. Он явился прекрасным ответом на потребности в то время лишь зарождающейся среды в высшей степени распределенных компьютерных систем. В области разработки программ для Интернета язык Java стал тем, чем язык С был для системного программирования: революционной силой, которая изменила мир [14]. 

Первоначальная версия Java не содержала никаких особо революционных решений, но она не ознаменовала собой завершение эры быстрого совершенствования этого языка.

2.3 Обзор версий Java

В отличие от большинства других систем программирования, совершенствование которых происходило небольшими, последовательными шагами, язык Java продолжает стремительно развиваться. Уже вскоре после выпуска версии Java 1.0 разработчики создали версию Java 1.1. Добавленные в эту версию функциональные возможности значительно превосходили те, которые можно было ожидать, судя по изменению младшего номера версии. Разработчики добавили много новых библиотечных элементов, переопределили способ обработки событий и изменили конфигурацию многих свойств библиотеки версии 1.0. Кроме того, они отказались от нескольких свойств (признанных устаревшими), которые первоначально были определены в Java 1.0. Таким образом, в версии Java 1.1 были как добавлены новые атрибуты, так и удалены некоторые, определенные в первоначальной спецификации. 

Следующей базовой версией Java стала версия Java 2, где “2” означает “второе поколение”. Создание Java 2 явилось знаменательным событием, означавшим начало “современной эры” Java. Первой версии Java 2 был присвоен номер 1.2. Это может казаться несколько странным. Дело в том, что вначале номер относился к внутреннему номеру версии библиотек Java, но затем он был распространен на всю версию в целом. С появлением версии Java 2 компания Sun начала выпускать программное обеспечение Java в виде пакета J2SE (Java 2 Platform Standard Edition — Стандартная версия платформы Java 2), и теперь номера версий применяются к этому продукту[12].  

В Java 2 была добавлена поддержка ряда новых средств, таких как Swing и Collections Framework. Кроме того, были усовершенствованы виртуальная машина Java и различные средства программирования. Из Java 2 был исключен также ряд свойств. Наибольшие изменения претерпел класс потока Thread, в котором методы suspend(), resume() и stop() были представлены как устаревшие. 

Версия J2SE 1.3 была первой серьезной модернизацией первоначальной версии Java J2SE. В основном, модернизация заключалась в расширении существующих функциональных возможностей и “уплотнении” среды разработки. В общем случае программы, написанные для версий 1.2 и 1.3, совместимы по исходному коду. Хотя версия 1.3 содержала меньший набор изменений, чем три предшествующие базовые версии, это не делало ее менее важной. 

Версия J2SE 1.4 продолжила совершенствование языка Java. Эта версия содержала несколько важных модернизаций, усовершенствований и добавлений. 4 8 Часть I. Язык Java Например, в нее было добавлено новое ключевое слово assert , цепочки исключений и подсистема ввода-вывода на основе каналов. Изменения были внесены и в инфраструктуру Collections Framework, и сетевые классы. Эта версия содержала также множество небольших изменений. Несмотря на значительное количество новых функциональных возможностей, версия 1.4 сохранила почти стопроцентную совместимость по исходному коду с предшествующими версиями [11]. 

В следующей версии Java, именуемой J2SE 5, был внесен ряд революционных изменений. В отличие от большинства предшествующих модернизаций Java, которые предоставляли важные, но постепенные усовершенствования, J2SE 5 коренным образом расширяет область применения, возможности и диапазон языка. Чтобы оценить объем изменений, внесенных в язык Java в версии J2SE 5, ознакомьтесь с перечнем основных новых функциональных возможностей: 

  • обобщения;
  • аннотации;
  • автоупаковка и автораспаковка;
  • перечисления;
  • усовершенствованный, поддерживающий стиль for - each , цикл for;
  • список аргументов переменной длины (varargs);
  • статический импорт;
  • форматированный ввод-вывод;
  • утилиты параллельной обработки.

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

Важность новых функциональных возможностей нашла отражение в примененном номере версии — “5”. Если следовать привычной логике, следующим номером версии Java должен был быть 1.5. Однако новые свойства столь значительны, что переход от версии 1.4 к версии 1.5 не отражал бы масштаб внесенных изменений. Поэтому, чтобы подчеркнуть значимость этого события, в компании Sun решили присвоить новой версии номер 5. Поэтому версия продукта была названаJ2SE 5, а комплект разработчика — JDK 5. Тем не менее для сохранения единообразия в компании Sun решили использовать номер 1.5 в качестве внутреннего номера версии, называемого также номером версии разработки. Цифру 5 в обозначении версии называют номером версии продукта [14].

Следующая версия Java получила название SE 6. С выходом этой версии компания Sun решила в очередной раз изменить название платформы Java. В названии была опущена цифра 2. Таким образом, теперь платформа называется Java SE, а официальное название продукта —Java Platform, Standard Edition 6 (Платформа Java, стандартная версия 6). Комплект разработчика Java был назван JDK 6. Как и в обозначении версии J2SE 5, цифра 6 в названии Java SE 6 означает номер версии продукта. Внутренним номером разработки этой версии является 1.6. 

Версия Java SE 6 была построена на основе версии J2SE 5 с рядом дальнейших усовершенствований. Она не содержала дополнений к числу основных функций языка Java, но расширяла библиотеки API, добавляя несколько новых пакетов и предоставляя рад усовершенствований времени выполнения. Было сделано еще несколько модификаций и внесено несколько дополнений. В целом версия Java SE 6 призвана закрепить достижения, полученные в J2SE 5.  

Новейший выпуск Java, Java SE 7, с комплектом разработчика Java JDK 7 и внутренним номером версии 1.7 — первый главный выпуск Java от Sun Microsystems, который был приобретен Oracle (процесс начался в апреле 2009 года и завершился в январе 2010 года). Java SE 7 содержит много новых средств, включая существенные дополнения языка и библиотек API. Усовершенствована система исполненияпрограмм Java, включена также поддержка языков, отличных от Java, но программистам Java больше интересны дополнения в области языка и библиотек [13]. 

Проект Project Coin должен объединить множество небольших изменений языка Java, которые будут включены в JDK 7. Хотя все эти новые средства вместе называют “небольшими”, эффект этих изменений весьма велик с точки зрения кода, на который они воздействуют. Фактически для большинства программистов эти изменения могут стать самой важной новой возможностью Java SE 7. Вот список новых средств языка. 

  • Тип String теперь может контролировать оператор switch.
  • Бинарные целочисленные литералы.
  • Символы подчеркивания в числовых литералах.
  • Расширенный оператор try, называемый try-с-ресурсами, обеспечивающий автоматическое управление ресурсами. (Например, потоки теперь могут быть закрыты автоматически, когда они больше не нужны.)
  • Выведение типов (при помощи оператора <>) при создании экземпляра обобщения.
  • Улучшенная обработка исключений, при которой два или больше исключений могут быть обработаны одним блоком catch (мультиобработчиком), и лучший контроль соответствия типов повторно передаваемых исключений.
  • Хотя синтаксис не изменился, предупреждения компилятора, связанные с некоторыми типами методов и переменным количеством аргументов, были улучшены. Кроме того, вы получаете больше контроля над предупреждениями.

Как можно заметить, даже притом что средства Project Coin считаются небольшими изменениями языка, их преимуществ, в целом, намного больше, чем подразумевает слово “небольшой”. В частности оператор try-с-ресурсами существенно влияет на способ создания кода, ориентированного на потоки. Кроме того, способность использовать строки в операторе switch является долгожданным усовершенствованием, которое упростит код во многих ситуациях. 

В Java SE 7 внесено несколько дополнений в библиотеку API Java. Важнейшими из них являются усовершенствования NIO Framework и дополнения для Fork/ Join Framework. NIO (первоначально именуемый как New I/O) был добавлен к Java в версии 1.4. Однако изменения, предложенные в Java SE 7, существенно увеличили его возможности. Причем настолько существенно, что зачастую используется термин NIO.2. 

Инфраструктура Fork/Join Framework оказывает существенную поддержку для параллельного программирования (parallel programming). Параллельное программирование — это термин, используемый обычно для описания технологий, повышающих эффективность использования компьютеров с несколькими процессорами, включая многоядерные системы [9]. Преимущества, предлагаемые многоядерными системами, способны в перспективе существенно увеличить производительность программ. Инфраструктура Fork/Join Framework обеспечивает параллельное программирование в таких областях, как

  • упрощение создания и использования задач, способных выполняться одновременно;
  • автоматическое использование нескольких процессоров.
  • Java 8 - обновленная платформа для встраиваемых устройств, вобравшая в себя самый огромный пакет обновлений со времен начала существования этого международного стандарта веб-разработки. Выбранный курс на поддержку и развитие кросплатформенности Джава должен во много раз увеличить возможности выбора платформ, развить и облегчить портируемость (возможность перенесения) приложений и в целом удлинить жизненный цикл продуктов функционала [13].
  • Java 8 поддерживает вхождение лямбда-выражений, или так называемых замыканий, способствующих очистке кода, использующегося для работы с многоядерными процессорами. Одно только это может стать приличным аргументом к тому, чтобы скачать эту версию Java 8 и попробовать её работу, тем более что сейчас это можно сделать бесплатно.
  • Также Джава для Windows 7, 8, 10 способна работать с компактными профилями, предназначенными для развертывания на ограниченном в ресурсах оборудовании, что немаловажно для многих пользователей подобных продуктов.
  • Java 8 содержит улучшенные средства шифрования, такие как TLS 1.2 на клиентской стороне, стоящие по умолчанию, усиленные использованием паролей алгоритмы шифрования и поддержку идентификации имени сервера в JSSE Server, которая обеспечивает доступ к вирт-хостам одного IP с помощью шифрованного соединения.
  • Также в Java 8 добавлены средства, использующиеся для параллельной сортировки больших массивов, а кроме этого, еще и функции, позволяющие проводить кодирование и декодирование Base64.

2.4 Последняя версия Java

21 сентября 2017 года состоялся релиз Java 9.

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

В свою очередь Java 9 также изобилует разнообразием обновлений “под капотом” и в API. Кроме очевидного проекта Jigsaw, на который возложена обязанность по внедрению модулярности в основные компоненты Java, новая версия может похвастаться ещё тремя важными дополнениями:

Полная поддержка клиента HTTP 2.0: Вопрос в скорости, и HTTP 2.0 предоставляет более высокие результаты, колеблющиеся от 11.81% до 47.7% по сравнении с клиентом HTTP 1.1.

  1. Jshell: Новый инструмент командной строки. Если разработчик хочет автономно запустить несколько строк Java, то это можно выполнить без необходимости заворачивать все в отдельный метод или проект.
  2. Microbenchmark: Теперь производительность отдельных небольших частей кода можно измерить стандартизированным методом. Анализ JMH за наносекунды уникален для Java 9.

Далее мы ближе рассмотрим несколько опций, отсутствовавших в Java 8.

HTTP/2 клиент

Это, пожалуй, самое ожидаемое нововведение — HTTP клиент с поддержкой как HTTP/2 протокола, так и WebSocket. Ведь SPDY протокол от Google, на базе которого основан HTTP/2 уже демонстрирует улучшенную производительность наравне с Netty или Jetty, поддержку неблокирующего режима (много потоков на запрос/ответ), а также Push-поддержку сервера, позволяющую отправлять ресурсы клиенту без явного запроса.

Новый API представлен как первый инкубаторный модуль для Java — экспериментальная фича, которая при должном развитии официально появится в следующей версии (то есть Java 10), либо будет удалена. Необычный концепт для Java, который поощряет эксперименты, но при этом не нарушает обратной совместимости.

Проект Jigsaw

Проект Jigsaw (в переводе “головоломка”) направлен на модуляризацию Java. Это значит, что программный код разбивается на части и организуется по модулям в зависимости от задач, которые эти модули выполняют. Это позволяет использовать модули повторно, упрощает их организацию и отладку. Что ведет к оптимизированной и отлаженной разработке ПО. Это ключевое отличие Java 9 от Java 8.

Второе большое преимущество — Java Platform становится легче и более масштабируемой. Это позволяет Java-приложениям работать даже на устройствах с низкой производительностью (так как для работы требуется меньше ресурсов). Это большое изменение особенно в контексте интернета вещей (IoT). Шаг вперед для Java, и шанс увидеть больше IoT-приложений, написанных на этом языке.

Jshell

Jshell добавит встроенную поддержку и популяризирует подход Java к REPL (Read-Eval-Print-Loop). Это интерактивный инструмент, позволяющий тестировать небольшие части кода без необходимости создавать новые классы. Он оснащен функциями истории и автозаполнения, а также рядом других особенностей, включая сохранение и загрузку написанных выражений.

Скажем, если захочется запустить несколько строк Java самостоятельно, то теперь не придется заворачивать их в отдельный проект или метод. Что касается точек с запятой — можно забыть про них: Существуют различные альтернативы наподобие плагинов REPL для популярных IDE или веб-консоли Java REPL, но ни одна из них не является официальной.

Унифицированное протоколирование JVM

Добавлена единая система протоколирования всех JVM-компонентов. Тем не менее, если мы посмотрим на плюсы и минусы Java 9, вот один из них. Вызовы протоколирования отдельных компонентов JVM отсутствуют, также как и протоколирование Java-кода в Java Development Kit

G1 — дефолтный сборщик мусора

Очень часто сталкиваемся с заблуждением, что в Java есть только один сборщик мусора, хотя по факту их 4. Parallel / Throughput Collector считался дефолтным в прошлых версиях, но теперь его заменил G1, который был представлен в Java 7 и был разработан для лучшей поддержки куч размером более 4GB. Он вызывает меньше GC пауз, но если они все же происходят, то длятся дольше.

Изображения с мульти-разрешением

Этот API позволяет инкапсулировать набор изображений с разными разрешениями в единый объект. Таким образом, разработчик может получить изображение с определенным разрешением или все варианты внутри одного.

Примечательные обновления API: Concurrency и Stack Walking

Java 9 получил обновление CompletableFuture и java.util.concurrent.Flow. Flow — это Java-реализация Reactive Streams API. Reactive Streams помогают решить проблему back-pressure — накопления большого количества данных, которое происходит, когда скорость получения входящих событий выше, чем скорость их обработки приложением, что приводит к появлению буферов необработанных данных. Кроме того, в рамках улучшения concurrency, CompletableFuture получил обновление, которое решило проблемы, выявленные после его внедрения в Java 8. Оно включает поддержку задержек и тайм-аутов, улучшенную поддержку подклассов и несколько полезных методов.

Также хочется упомянуть о Stack Walking API. Все верно, Java 9 меняет подход к работе со стек-трейсами, предоставляя официальный способ обработки стек-трейсов, вместо приравнивания их к простому тексту.

Immutable List, Set, Map, и Map.Entry API

Создание множеств из нескольких элементов в Java 8 требовало нескольких строк кода. Теперь это можно осуществить только одной. Таким образом, один из самых времязатратных недостатков Java 8 был устранен. Это должно облегчить работу с массивами и ускорить некоторые функции.

Преимущества Java 9

Детали отличий Java 9 от Java 8 представляют большой интерес для разработчиков, а следовательно и для бизнеса, находящегося в поиске наилучших решений. Нововведения девятой версии улучшают следующие аспекты разработки:

Скорость выше благодаря поддержке клиента HTTP/2.

  • Приложения становятся ресурсоэффективней, потому что разработчики могут использовать только необходимые модули, а не всю JRE.
  • Разработка ускоряется благодаря системе модулей, позволяющей их повторное использование, упрощенную отладку и управление.
  • Появляется возможность анализа производительности очень маленьких частей кода благодаря Microbenchmarks.
  • Множества создаются одной строчкой кода.

Заключение

В рамках данной курсовой работы была изучена история возникновения и развития языка программирования Си (С++) и Java. , что в современном мире является очень актуальным.

Были решены следующие задачи:

  • Изучена история возникновения и развития языка Си
  • Изучена история возникновения и развития языка Си++
  • Изучена история стандартов Си++
  • Изучено начало разработки языка Java
  • Изучена связь языков Java и C++
  • Изучен обзор версий Java

Список литературы

  1. Александр Чиртик Программирование на C++. Трюки и эффекты / Александр Чиртик. - М.: "Издательство "Питер", 2010. - 352 c.
  2. Бьерн Страуструп Дизайн и эволюция языка С++ / Бьерн Страуструп. - М.: ДМК Пресс, 2014. - 446 c.
  3. М. Фленов Программирование на C++ глазами хакера / М. Фленов. - М.: БХВ-Петербург, 2011. - 352 c.
    1. Михаил Фленов Искусство программирования игр на С++ / Михаил Фленов. - М.: "БХВ-Петербург", 2006. - 256 c.
  4. Николаи М. Джосаттис Стандартная библиотека C++. Справочное руководство / Николаи М. Джосаттис. - М.: Вильямс, 2014. - 123 c.
  5. Лафоре Объектно-ориентированное программирование в С++ / Роберт Лафоре. - М.: Питер, 2015. - 928 c.
    1. Берд, Барри Java для чайников / Барри Берд. - М.: Диалектика / Вильямс, 2013. - 521 c.
  6. Гарнаев, Андрей WEB-программирование на Java и JavaScript / Андрей Гарнаев , Сергей Гарнаев. - Москва: СПб. [и др.] : Питер, 2017. - 718 c.
  7. Гонсалвес, Энтони Изучаем Java EE 7 / Энтони Гонсалвес. - М.: Питер, 2016. - 640 c.
  8. Гупта, Арун Java EE 7. Основы / Арун Гупта. - М.: Вильямс, 2014. - 336 c.
  9. Монахов, В. Язык программирования Java и среда NetBeans (+ CD-ROM) / В. Монахов. - М.: БХВ-Петербург, 2012. - 720 c.
  10. Савитч, Уолтер Язык Java. Курс программирования / Уолтер Савитч. - М.: Вильямс, 2015. - 928 c.
  11. Шилдт, Герберт Java 8. Руководство для начинающих / Герберт Шилдт. - М.: Вильямс, 2015. - 720 c.
  12. Эккель, Брюс Философия Java / Брюс Эккель. - М.: Питер, 2016. - 809 c