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

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

Содержание:

ВВЕДЕНИЕ

Информационные технологии своим быстрым развитием не только революционизировали человеческий образ работы, но и его само существование. Революция ИТ (информационных технологий) охватывает нашу цивилизацию, приводящую к необъяснимым изменениям в нашей современной жизни. Двадцать первый век принадлежит миру ИТ.

Термин «информационные технологии» или просто известный как ИТ - это общее название, данное всем улучшениям, которые происходят в нашем мире из-за взаимосвязанного прогресса в области технологий, обучения и информации. Этот термин относится к новейшим технологическим достижениям, которые происходят в нашем мире благодаря лучшим технологиям.

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

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

Изучение этих языков является очень актуальным в XXI веке, поскольку большое количество окружающего нас IT мира, реализовано на этих языках [14].

НЕМНОГО О C/C++

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

- операционные системы;

- компиляторы языка;

- текстовые редакторы;

- сетевые драйверы;

- базы данных;

- языковые переводчики.

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

Программа на C может состоять от 3 до миллионов строк и может быть записана в один или несколько текстовых файлов с расширением «.c» ; например, hello.c

C++ — это язык объектно-ориентированного программирования общего назначения (OOP), является расширением языка C. Это даёт возможность программировать на C ++ в стиле «C» или же в «объектно-ориентированном стиле». В некоторых случаях он может использовать оба варианта, что показывает эффективным примером гибридного языка [3].

C++ считается языком промежуточного уровня, поскольку он инкапсулирует как языковые функции высокого, так и низкого уровня. Первоначально язык назывался «C с классами», так как он обладал всеми свойствами языка C с дополнительным понятием «классы». Однако в 1983 году он был переименован в C ++.

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

Основная особенность языка C++ в наборе шаблонных классов, в которых имеются самые часто используемые алгоритмы и контейнеры. Они уже написаны и могут много раз использоваться разработчиками при написании своих программ. Язык также облегчает объявление пользовательских классов. Классы используют функции для реализации определенных требований. Можно создавать множество объектов класса, у которых будут все свойства определенные для данной сущности. Объекты могут быть определены как экземпляры, и созданы прямо во время выполнения. Эти классы также могут быть унаследованы другими новыми классами, которые по умолчанию используют публичные свойства своих предков и реализует их в своих объектах [5].

C ++ включает в себя большое количество операторов, таких как:

- арифметически операторы;

- операторы сравнения;

- операторы составного присваивания;

- побитовые операторы;

- логические операторы;

- операторы работы с указателями и членами класса.

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

К основным концепциям С++ относятся полиморфизм, инкапсуляция и наследование. Они вместе составляют основную концепцию объектно-ориентированного программирования [12].

НЕМНОГО О JAVA

Java - это язык программирования и вычислительная платформа, впервые выпущенная Sun Microsystems в 1995 году. Существует множество приложений и веб-сайтов, которые не будут работать, если у вас нет установленной Java, и c каждым днём их создается всё больше и больше. Java быстрый, безопасный и надежный. Технология Java используется для разработки широкого круга приложений от потребительских устройств до корпоративных систем, от ноутбуков до датацентров, игровых приставок до научных суперкомпьютеров и для разработки мобильных операционных систем.

Как и любой язык программирования, язык Java имеет свою собственную структуру, синтаксические правила и парадигму программирования. Парадигма программирования языка Java основана на концепции ООП, которую поддерживают все основные функции языка.

Язык Java является производным языка С, поэтому его синтаксические правила очень похожи на C. Например, кодовые блоки модулируются в методы и ограничены фигурными скобками {и}, а переменные объявляются до их использования [21].

Структурно язык Java начинается с пакетов. Пакет - это механизм пространства имен языка Java. В пакетах есть классы, а внутри классов - методы, переменные, константы и т. д.

Программы, созданные на Java, являются кроссплатформенными. Исходный код компилируется в то, что в Java называется байт-код, который можно запустить в любом месте, на сервере или на клиенте, который имеет виртуальную машину Java (JVM). JVM интерпретирует байт-код в код, который будет работать на компьютерном оборудовании. Напротив, большинство языков программирования, таких как COBOL, C ++, Visual Basic или Smalltalk, компилируют код в двоичный файл. Бинарные файлы зависят от платформы, поэтому программа, написанная для компьютера под управлением Windows на базе Intel, не может быть запущенной на Mac или Linux. JVM включает в себя необязательный (JIT) компилятор, который динамически компилирует байт-код в исполняемый код. Во многих случаях динамическая компиляция JIT быстрее, чем интерпретация виртуальной машины [19].

Код надежный. В отличие от программ, написанных на C ++ и некоторых других языках, объекты Java не содержат ссылок на внешние данные или другие известные объекты. Это гарантирует, что инструкция не может содержать адрес хранения данных в другом приложении или в самой операционной системе, из-за чего программа и, возможно, сама операционная система могут завершиться или ситуация приведёт к сбою. JVM выполняет ряд проверок на каждом объекте для обеспечения целостности программы.

Java объектно-ориентированный язык. Объект может воспользоваться тем, что он является частью класса объектов и наследует код, который является общим для класса. Объекты считаются «сущностями», к которым может относиться пользователь, а не к традиционным процедурным «действиям». Метод можно рассматривать как один из возможностей или вариантов поведения объекта. Объектно-ориентированность, относительно распространена в современном мире программирования, но в 1996 году только несколько языков эффективно реализовывали объектно-ориентированные концепции и шаблоны проектирования. Способность развиваться с использованием языка, созданного с нуля с объектной ориентацией, в качестве его явной цели сделала этот язык интересной платформой для программирования.

Апплет предлагает гибкость. В дополнение к выполнению на клиенте, а не на сервере, Java-апплет имеет другие характеристики, предназначенные для быстрого запуска [20].

Разработчики могут быстро изучить Java. С синтаксисом, аналогичным C++, Java относительно легко изучать, особенно для тех, у кого есть база на C.

Распространенным заблуждением является то, что существует связь между Java и JavaScript. Два языка имеют сходство в синтаксисе, но в реальности случае это две очень разные конструкции.

Существуют три ключевые платформы, на которых программисты разрабатывают Java-приложения:

Java SE. Простые, автономные приложения разрабатываются с использованием Java Standard Edition. Ранее известный как J2SE, Java SE предоставляет все API, необходимые для разработки традиционных десктопных приложений.

Java EE. Java Enterprise Edition, ранее известная как J2EE, обеспечивает возможность создания серверных компонентов, которые могут проводить весь веб цикл запроса и ответа. Такая компоновка позволяет создавать Java-программы, которые могут взаимодействовать с интернет-клиентами, включая веб-браузеры, клиенты на базе CORBA и даже веб-сервисы на основе REST и SOAP.

Java ME. Java также предоставляет легкую платформу для мобильной разработки, известную как Java Micro Edition, ранее известная как J2ME. Java ME зарекомендовала себя очень популярной платформой для разработки встраиваемых устройств, она изо всех сил пыталась добиться успеха на арене разработки смартфонов. С точки зрения развития смартфонов, Android стал платформой мобильной разработки номер один в мире Java [26].

1 ВОЗНИКНОВЕНИЕ И РАЗВИТИЕ ЯЗЫКА C/C++

1.1 ИСТОРИЯ И НАЧАЛО C

Разработка C первоначально не была целью его создателей. Фактически, различные обстоятельства и проблемы создали идеальную ситуацию для ее появления. В 1960-х годах Деннис Ритчи, который был сотрудником Bell Labs (AT&T), вместе с некоторыми из его коллег, работал над разработкой операционной системы, которая могла бы использоваться многими пользователями одновременно. Эта операционная система была известна как Multics, и она должна была позволить многим пользователям совместно использовать общие вычислительные ресурсы. Multics добавляли много преимуществ, но также имели много проблем. Это была большая система, и казалось, с точки зрения выгоды, что затраты перевешивают вложенные усилия и ресурсы. Постепенно Bell Labs отказались от проекта.

Именно тогда Ричи присоединился к Кен Томпсону и Брайану Кернигану в другом проекте. Проект включал разработку новой файловой системы. Томпсон разработал новую файловую систему для суперкомпьютера DEC PDP- 7 на ассемблере. После этого создатели файловой системы сделали много улучшений, что привело к рождению операционная системы UNIX. Даже в имени новой операционной системы UNIX можно найти следы его предшественника Multics. Первоначально это была Unics (Uniplexed Information and Computing Service). Позже Unics изменилась на UNIX. Она была написана на ассемблере, который, хотя и идеален для машин, сложен для работы людьми. Для интерпретации и управления UNIX использовались языки Fortran и B. Именно в этот момент идея появления языка C начала формироваться в сознании ее создателей [8].

1.2 ПОЧЕМУ C БЫЛ РАЗРАБОТАН

Язык B был полезен в контексте проблем, с которыми сталкиваются создатели UNIX в операционной системе. Язык B был взят из BCPL Мартином Ричардсом. Как уже говорилось, UNIX была написана на ассемблере. Чтобы выполнять даже небольшие операции в UNIX, нужно было писать много страниц кода. Язык B решил эту проблему. В отличие от ассемблера требовал значительно меньше строк кода для выполнения каких-то задач в UNIX. Тем не менее, было много того, что B не мог сделать. Гораздо больше ожидалось от B в контексте быстро меняющихся требований. Например, B не распознает типы данных. Даже в языке B типы данных были выражены машинным языком. Он также не поддерживает структуры данных.

Было ясно, что-то должно измениться. Итак, Ритчи и его коллеги приступили к преодолению препятствий, стоящих перед ними. Язык C был разработан в 1971-73 годах. При всех своих ограничениях C обязан своим рождением B, поскольку C сохранил много того, что предложил B, добавив такие новшества, как типы данных и структуры данных. Название C было выбрано потому, что оно шло за B [12].

В ранние годы C был разработан с учетом UNIX. C использовался для выполнения задач и управления UNIX системой. Сохранив производительность многие компоненты UNIX были переписаны на язык C с языка ассемблер. Например, ядро UNIX было переписано в 1973 году на DEC PDP-11.

Ритчи и Керниган задокументировали их новый язык в виде книги под названием «Язык программирования C». Хотя Керниган утверждал, что не играл роли в создании C, он был автором знаменитой программы «Hello World» и многих других программ UNIX [13].

1.3 ЭВОЛЮЦИЯ C

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

Первое изменение (даже если немного) произошло, когда Американский национальный институт стандартов (ANSI) сформировал комитет в 1983 году для стандартизации C. После обзора языка они немного изменили его, чтобы он был также совместим с другими программами, которые были до C. Таким образом, новый стандарт ANSI появился в 1989 году и известен как ANSI C или C89. Международная организация по стандартизации (ISO) также способствовали стандартизации C.

Со временем C развился, так как он добавил в свой богатый набор некоторые важные опций, такие как управление памятью, функции, классы и библиотеки. C используется в разработке многих крупнейших проектов в мире. C также повлиял на развитие множества языков, таких как AMPL, AWK, C ++ , C--, C # , Objective-C , Bit C, D, Go, Java, JavaScript , Julia, Limbo, LPC, Perl, PHP, Pike, Processing, Python , Rust, Seed7 и Verilog [17].

За появление Microsoft Windows нужно поблагодарить язык C, потому что разработан Windows в основном на C. То же самое касается MacOS, Linux, Android, iOS и Windows Phone, потому что почти все современные операционные системы основаны на C. Он также широко используется во встроенных системах, такие как датчики в автомобилях, интеллектуальные мониторы и бесчисленные интернет-устройства (интернет вещей).

Некоторые из проектов, которые разрабатываются на С:

- разработка компиляторов;

- баз данных;

- компьютерные и мобильные игры;

- обновление ядра UNIX;

- оценка математических уравнений;

- проектирование сетевых устройств.

Подобно большинству величайших изобретений в мире, C рождается по необходимости. Обстоятельства и проблемы послужили источником вдохновения. Однако, в отличие от многих языков программирования, которые теперь вымерли или почти вымерли, C выдержал испытание временем и процветал. Некоторые языки теперь классифицируются как нишевые языки, например, Fortran теперь в основном используется только для инженерных целей, а COBOL изо всех сил пытается оставаться актуальным [1].

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

2 ВОЗНИКНОВЕНИЕ C++

2.1 ИСТОРИЯ ВОЗНИКНОВЕНИЯ C++

C ++ является одним из самых популярных языков программирования и работает на самых разных платформах оборудования и операционных систем. В качестве эффективного компилятора для собственного кода он реализует себя в таких областях, как системное программное обеспечение, прикладное программное обеспечение, драйверы устройств, встроенное программное обеспечение, высокопроизводительные серверные и клиентские приложения и развлекательное программное обеспечение, такие как видеоигры. Несколько групп разработчиков предоставляют как бесплатное, так и проприетарное программное обеспечение для компилятора C++, включая GNU Project, LLVM, Microsoft и Intel [13].

C ++ сильно повлиял на многие другие популярные языки программирования, в первую очередь на C # и Java.

Язык программирования C ++ имеет историю, восходящую к 1979 году, когда Бьёрн Страуструп работал над своей кандидатской диссертацией. Одним из языков, который был создан Страуструпом, был язык под названием «Simula», который, как следует из названия, является языком, в основном предназначенным для моделирования. Язык Simula 67, который был вариантом, с которым работал Страуструп, рассматривается как первый язык для поддержки парадигмы объектно-ориентированного программирования. Страуструп обнаружил, что эта парадигма очень полезна для разработки программного обеспечения, однако язык Simula был слишком медленным для практического использования.

Вскоре после этого он начал работу над языком «C с классами», которая, как следует из названия, должна была быть надмножеством языка C. Его целью было добавить объектно-ориентированное программирование в язык C, который был языком, активно используемым из-за его возможности быть переносимым, не теряя при этом скорости или функциональности. Его язык включал в себя классы, базовое наследование, аргументы функций по умолчанию и строгую проверку типов в дополнение ко всем функциям языка C.

Первый компилятор C с классами был назван Cfront, который был получен из компилятора C под названием CPre. Это была программа, предназначенная для перевода C с кодом Classes на обычный C. Интересным моментом, является то, что Cfront был написан в основном на C с классами, что делает его компилятором для самостоятельной компиляции (компилятор, который может скомпилировать себя). Позднее Cfront будет оставлен в 1993 году после того, как стало сложно интегрировать в него новые функции, а именно исключения C++. Тем не менее, Cfront оказал огромное влияние на реализации будущих компиляторов и операционной системы Unix.

В 1983 году название языка было изменено с C с классами на C++. Оператор ++ на языке C является оператором для увеличения переменной, что дает некоторое представление о том, как Страуструп рассматривал этот язык. В это время было добавлено много новых функций, наиболее заметными из которых являются виртуальные функции, перегрузка функций, ссылки на символ &, ключевое слово const и однострочные комментарии с использованием двух косых черт (что является опцией, взятой из языка BCPL).

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

В 1990 году было выпущено справочное руководство Annotated C++. В том же году компилятор Borland Turbo C++ будет выпущен как коммерческий продукт. Turbo C++ добавил множество дополнительных библиотек, которые существенно повлияли на разработку C++. Хотя последний стабильный выпуск Turbo C ++ был в 2006 году, компилятор по-прежнему широко используется [2].

В 1998 году Комитет по стандартам С++ опубликовал первый международный стандарт для C++ ISO/IEC 14882:1998, который стал неофициально известен под именем C++98. Было упомянуто, что справочное руководство Annotated C++ оказывает большое влияние на разработку стандарта. Также была включена Библиотека стандартных шаблонов, которая начала свою концептуальную разработку в 1979 году. В 2003 году комитет ответил на многочисленные жалобы, о которых сообщалось, со своим стандартом 1998 года, и соответствующим образом пересмотрел его. Измененный язык был назван C++ 03.

В 2005 году комитет по стандартам C ++ опубликовал технический отчет (получивший название TR1), в котором подробно описаны различные функции, которые они планировали добавить к последнему стандарту C++. Новый стандарт был неофициально назван C++ 0x, поскольку ожидалось, что он будет выпущен до конца первого десятилетия. Как ни странно, однако, новый стандарт не был выпущен до середины 2011 года. Несколько технических отчетов были выпущены до тех пор, и некоторые компиляторы начали добавлять экспериментальную поддержку для новых функций [3].

В середине 2011 года был закончен новый стандарт C++ (получивший название C++ 11). Проект библиотеки Boost оказали значительное влияние на новый стандарт, а некоторые из новых модулей были получены непосредственно из соответствующих библиотек Boost. Некоторые из новых функций включают поддержку регулярных выражений, полную библиотеку рандомизации, новую библиотеку для работы со временем C++, поддержку атомизации, стандартную библиотеку потоков (которая до 2011 года отсутствовала как на C, так и на C ++), новый синтаксис цикла, обеспечивающий функциональность, подобную циклам foreach в некоторых других языках, ключевое слово auto, новые классы контейнеров, лучшую поддержку объединений и списки инициализации массивов, и вариативные шаблоны [4].

В 2012 году был основан Фонд стандарта С++, а в 2014 году было выпущено 4-ое издание главной книги о языке С++.

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

Новые возможности библиотеки: std и многие небольшие улучшения в существующих библиотечных средствах, такие как двух диапазонные перегрузки для некоторых алгоритмов, типы псевдонимов, типы признаков типа, определяемые пользователем строки, длительность и литералы сложных чисел и т.д.

В 2015 году появился TS. Этот TS является экспериментальным расширением библиотеки C++, которое указывает библиотеку файловой системы на основе boost.filesystem V3 (с некоторыми изменениями и расширениями). Этот TS был объединен с C++17.

Это TS стандартизирует параллельный интерфейс для всех стандартных алгоритмов библиотеки, а также добавляет новые алгоритмы, такие как reduce, transform_reduce и exclusive_scan [9].

2.2 СОВРЕМЕННЫЙ С++ И ЕГО БУДУЩЕЕ

В 2017 году был опубликован окончательный вариант С++17. Появились новые функции: сгиб-выражения, вычитание аргумента шаблона, время компиляции, constexpr, встроенные переменные , структурированные привязки, инициализаторы для if и switch, упрощенные вложенные пространства имен, множественные имена, сделанные без учета системы типов, новый порядок правил оценки __has_include, * this, constexpr lambda, пространства имен атрибутов не должны повторяться, новые атрибуты [[fallthrough]], [[nodiscard]] и [[maybe_unused]]. Добавлены ключевые слова register, bool increment.

Также было добавлено несколько мелких изменений в библиотеку шаблонов std [27].

Следующая крупная версия стандарта C ++ запланирована на 2020, под названием C++20.

Должны будут добавиться следующие опции и функции:

- оператор трехмерного сравнения <=>;

- назначенные инициализаторы;

- пакет-расширений лямбда;

- а также изменения в библиотеке std.

ИСТОРИЯ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА JAVA

НАЧАЛО JAVA

Java - это объектно-ориентированный язык программирования, разработанный Джеймсом Гослингом и его коллегами из Sun Microsystems в начале 1990-х годов. В отличие от обычных языков, которые обычно разрабатываются либо для компиляции на собственный (машинный) код, либо для интерпретации исходного кода во время выполнения, Java предназначен для компиляции в байт-код, который затем выполняется (как правило, с использованием компиляции JIT) с помощью Виртуальной машины Java.

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

Сам язык заимствует большой синтаксис из C и C++, но имеет более простую объектную модель и меньше объектов низкого уровня. Java никак не относится к JavaScript, хотя они имеют похожие имена и используют синтаксис типа C.

В начале 90-х годов распространение сетевых вычислений на повседневную жизнь было радикальным. Java был запущен в качестве проекта под названием «Дуб» Джеймса Гослинга в июне 1991 года. Гослинг должен был реализовать виртуальную машину и язык, который имел знакомое C-образное обозначение, но с большей однородностью и простотой, чем C/C++. В 1991 году небольшая группа инженеров Sun, названная «Зеленая команда», считала, что следующей волной в области вычислений является объединение цифровых потребительских устройств и компьютеров. Под руководством Джеймса Гослинга команда работала круглосуточно и создавала язык программирования, который бы революционизировал наш мир – Java [22].

Зеленая команда продемонстрировала свой новый язык с помощью интерактивного портативного домашнего развлекательного контроллера, который первоначально был нацелен на индустрию цифрового кабельного телевидения. К сожалению, концепция была слишком продвинутой для команды в то время. Но это было просто для Интернета, который только начинал взлетать. В 1995 году команда объявила, что интернет-браузер Netscape Navigator будет включать технологию Java.

Первой публичной реализацией стала Java 1.0 в 1995 году. Она вышла под лозунгом «Write Once, Run Anywhere» (пишется один раз, работает везде) с бесплатной загрузкой на популярных платформах. Он был достаточно надежным, и его безопасность была настраиваемой, позволяя ограничить доступ к сети и файлам. Основные веб-браузеры вскоре включили его в свои стандартные конфигурации в безопасной конфигурации «апплетов». Новые версии для больших и малых платформ (J2EE и J2ME) вскоре были разработаны с появлением «Java 2». Sun не объявила о каких-либо планах для «Java 3» [20].

Многие разработчики вскоре поняли, что архитектурный нейтральный язык, такой как Java, лучше всего подходит для написания программ для Интернета. Таким образом, внимание переключилось на Java с потребительской электроники на World Wide Web (Интернет).

Сегодня Java не только проникает в Интернет, но и является невидимой силой многих приложений и устройств, которые питают нашу повседневную жизнь. С мобильных телефонов до карманных устройств, игр и навигационных систем для решений для электронного бизнеса [26].

В 1997 году Sun обратилась к органу стандартов ISO/IEC JTC1, а затем к Ecma International, чтобы формализовать Java, но вскоре отказалась от этого процесса. Java остается проприетарным стандартом де-факто, который контролируется через Java Community Process. Sun делает большую часть своих реализаций на Java доступными бесплатно, при этом доходы генерируются специализированными продуктами, такими как Java Enterprise System. Sun отличает его Software Development Kit (SDK) и Runtime Environment (JRE), который является подмножеством SDK, причем основное отличие заключается в том, что в JRE отсутствует компилятор.

3 JAVA

3.1 ЭТАПЫ РАЗВИТИЯ JAVA

В 1998 году выходит J2SE 1.2 (Java2 Standard Edition) основными изменениями, которой являлись:

- интегрированный графический API Swing;

- ключевое слово strictfp;

- JIT-компилятор в Sun JVM для Java-плагина.

В 2000 году выходит J2SE 1.3 основными изменениями, которой являлись:

- включен Hotspot JVM;

- RMI изменен для поддержки совместимости с CORBA;

- Java Naming and Directory Interface (JNDI);

- Java Debugger Architecture (JPDA);

- Java Sound.

В 2002 году выходит J2SE 1.4 — это был первый выпуск платформы Java, разработанный в рамках процесса java community, как JSR 59. основными изменениями, которой являлись:

- регулярное выражение;

- цепочка исключений;

- API ввода-вывода изображений, для чтения и записи изображений;

- включение Java Web start.

В 2004 выходит J2SE 5.0 под кодовым именем Tiger. Добавлены новые языковые функции:

- Generics;

- Metadata;

- Autoboxing;

- Enumeratations;

- Swing;

- Var args;

- коллекции статического импорта и т. д.

В 2006 выходит Java SE 6 основными изменениями, которой являлись:

- поддержка языка Scripting Language;

- улучшенная поддержка веб-сервисов через JAX-WS;

- поддержка JDBC 4.0;

- поддержка подключаемых аннотаций;

- усовершенствования JVM, включая оптимизацию производительности синхронизации и компилятора;

- алгоритмы сбора Garbaze.

Java SE 7.0 D 2011 г. Java SE 7.0 основными изменениями, которой являлись:

  • поддержка JVM для динамического языка;
  • новая библиотека для параллельных вычислений;
  • автоматическое управление ресурсами.

Java SE 8.0 18 марта В 2014 г. Вышла Java SE 8.0 включавшая различные исправления ошибок и улучшения

3.2 ФИЛОСОФИЯ СОЗДАНИЯ ЯЗЫКА JAVA

В создании языка Java было пять основных целей:

1. Он должен был использовать методологию объектно-ориентированного программирования.

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

3. Он должен содержать встроенную поддержку для использования компьютерных сетей.

4. Он должен быть разработан для безопасного выполнения кода из удаленных источников.

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

Для достижения целей сетевой поддержки и удаленного выполнения кода разработчикам Java иногда приходится использовать такие расширения, как CORBA, Internet Communications Engine или OSGi [21].

Первая характеристика, объектной ориентации («OO»), относится к методу программирования и языкового дизайна. Хотя существует много интерпретаций OO, одна из основных отличительных идей заключается в разработке программного обеспечения, так что различные типы данных, которыми он управляет, объединяются вместе с их соответствующими операциями. Таким образом, данные и код объединяются в сущности, называемые объектами. Объект можно рассматривать как автономный пучок поведения (кода) и состояния (данных). Принцип состоит в том, чтобы отделить вещи, которые изменяются от вещей, которые остаются неизменными; часто изменение в некоторой структуре данных требует соответствующего изменения кода, который работает с этими данными, или наоборот. Это разделение на когерентные объекты обеспечивает более стабильную основу для разработки программной системы [23].

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

Вторая характеристика, независимость от платформы, означает, что программы, написанные на языке Java, должны работать аналогично на разных аппаратных средствах. Разработчик должен иметь возможность написать программу один раз и запустить ее в любом месте.

Это достигается большинством компиляторов Java путем компиляции кода языка Java в байт-код (в частности, байт-код Java) - упрощенные машинные инструкции, характерные для платформы Java. Затем код запускается на виртуальной машине (VM), программе, которая интерпретирует и выполняет общий байт-код Java. Кроме того, стандартизованные библиотеки предоставляются для обеспечения единого доступа к функциям хост-машин (таких как графика, потоковая передача и сетевое взаимодействие). Хотя есть явный этап компиляции, в какой-то момент байт-код Java интерпретируется или преобразуется в собственные машинные инструкции компилятором JIT.

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

Лицензия Sun на Java настаивает на том, чтобы все реализации были «совместимыми». Это привело к юридическому спору с Microsoft после того, как Sun заявила, что реализация Microsoft не поддерживает интерфейсы RMI и JNI и добавила собственные функции платформы. В ответ Microsoft больше не переносит Java с Windows, а в последних версиях Windows Internet Explorer не может поддерживать Java-апплеты без стороннего плагина. Тем не менее, Sun и другие разработчики, предоставили доступные системы времени исполнения Java бесплатно для этих и других версий Windows.

Первые реализации языка использовали интерпретированную виртуальную машину для обеспечения переносимости. В этих реализациях выполнялись программы, которые выполнялись медленнее, чем программы, скомпилированные для собственных исполняемых файлов, например, написанные на C или C++, поэтому язык приобрёл репутацию плохой производительности. Более поздние реализации JVM создают программы, которые работают значительно быстрее, чем раньше, используя несколько методов [24].

Первый метод - просто скомпилировать непосредственно в собственный код, например, более традиционный компилятор, полностью пропуская байт-коды. Это обеспечивает хорошую производительность, но в ущерб переносимости.

Второй метод, известный как компиляция «точно в момент времени» (JIT), переводит байт-коды Java в собственный код во время запуска программы, что приводит к выполнению программы, которая выполняется быстрее, чем интерпретируемый код, но также приводит к сбоям на этапе компиляции во время выполнения.

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

Переносимость - это технически трудная цель, и успех Java в этой цели был смешанным. Хотя на самом деле можно писать программы на платформе Java, которые ведут себя последовательно на многих системах, но большое количество доступных платформ с небольшими ошибками или несогласованностями привело к тому, что некоторые слоганы «Write once, Run anywhere» (писать один раз, запускать везде) в Sun называли «Write once, debug anywhere» (писать один раз, отлаживать везде).

Независимая от платформы Java, однако, очень успешна с серверными приложениями, такими как веб-сервисы, сервлеты и Enterprise JavaBeans, а также с встроенными системами на основе OSGi с использованием встроенных сред Java.

3.3 АВТОМАТИЧЕСКАЯ СБОРКА МУСОРА И ДРУГИЕ ФУНКЦИИ

Одна из идей, лежащих в основе модели автоматического управления памятью в Java, заключается в том, что программистам следует избавиться от необходимости выполнять ручное управление памятью.

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

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

Программа или другие объекты могут ссылаться на объект, удерживая ссылку на него (которая с низкоуровневой точки зрения является ее адресом в куче). Когда ссылки на объект не сохраняются, сборщик мусора Java автоматически удаляет недостижимый объект, освобождая память и предотвращая утечку памяти. Утечки памяти могут все еще возникать, если код программиста содержит ссылку на объект, который больше не нужен, другими словами, они все равно могут возникать, но на более высоких концептуальных уровнях.

Использование сборщика мусора в языке может также повлиять на парадигмы программирования. Если, например, разработчик предполагает, что стоимость выделения/запоминания памяти низкая, они могут выбирать более свободно использовать конструирование объектов, а не предварительное инициализирование, удерживание и повторное использование. Благодаря небольшой стоимости потенциальных штрафных санкций (построение больших/сложных объектов внутри цикла) это облегчает изоляцию потоков (нет необходимости синхронизировать, поскольку разные потоки работают на разных объектных экземплярах) и скрытие данных. Использование переходных неизменных ценностей-объектов минимизирует побочные эффекты [19].

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

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

Java-апплеты - это программы, встроенные в другие приложения, обычно на веб-странице, отображаемой в веб-браузере. Пример кода в приложении А.

Этот апплет просто нарисовал строку «Привет, мир!». в прямоугольнике, в котором будет запускаться апплет. Это немного лучший пример использования функций OO Java в том, что класс явно расширяет базовый класс «Applet», что он переопределяет метод «paint» и использует импортные инструкции.

Документ с помощью HTML-элемента <applet> показан в приложении Б. Апплет имеет три атрибута: code = «Hello» указывает имя класса Applet, а width = «200» height = «200» устанавливает ширину и высоту пикселя апплета. (Апплеты также могут быть встроены в HTML с использованием элемента object или embed, хотя поддержка этих элементов веб-браузерами несовместима.

Сервлеты Java - это серверные компоненты Java EE, которые генерируют ответы на запросы клиентов (приложение В).

Операторы импорта заставляют компилятор Java включать все общедоступные классы и интерфейсы из пакетов java.io и javax.servlet в компиляцию. Класс Hello расширяет класс GenericServlet; класс GenericServlet предоставляет интерфейс для сервера для пересылки запросов на сервлет и управления жизненным циклом сервлета [20].

Класс Hello переопределяет метод службы (ServletRequest, ServletResponse), определенный интерфейсом Servlet, для предоставления кода для обработчика запросов на обслуживание. Метод service () передается объекту ServletRequest, который содержит запрос от клиента и объект ServletResponse, используемый для создания ответа, возвращаемого клиенту. Метод service () объявляет, что он исключает исключения ServletException и IOException, если проблема не позволяет ему ответить на запрос.

Метод main () вызывается JVM при запуске программы. Он создает новый фрейм Hello и вызывает его отображение, вызывая метод setVisible (boolean), унаследованный от суперкласса Component, с логическим параметром true. = После отображения кадра, выход из основного метода не приводит к завершению работы программы, поскольку поток диспетчеризации событий AWT остается активным до тех пор, пока все окна верхнего уровня Swing не будут удалены.

По умолчанию внешний вид приложений GUI, написанных на Java, с помощью инструментария Swing очень отличается от родных приложений. Можно указать другой внешний вид с помощью подключаемой системы Swing. Клоны Windows, GTK и Motif поставляются Sun. Apple также обеспечивает внешний вид Aqua для Mac OS X. Хотя предыдущие реализации этих взглядов считались недостаточными, Swing в Java SE 6 решает эту проблему, используя более собственные процедуры рисования виджетов базовых платформ. В качестве альтернативы, сторонние инструменты, такие как wx4j или SWT, могут использоваться для большей интеграции с собственной системой окон [24].

ЗАКЛЮЧЕНИЕ

Таким образом можно сказать, что оба языка, и С/С++, и Java прошли большой путь развития. Причиной возникновения этих языков были и случайные стечения обстоятельств, и упорный труд их создателей. Одно можно сказать точно, что эти языки определили развитие информационных технологий на рубеже XX-XXI веков.

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

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. Kernighan B., Ritchie D., The C Programming Language, Second Edition, Prentice Hall, 1988.
  2. Plauger P.J. The Draft Standard C++ Library; Prentice-Hall, 1995.
  3. Stroustrup B. "New Casts Revisited", ANSI Doc X3J16/93-142.
  4. Stroustrup B. The Design and Evolution of C++, Addison-Wesley, 2015. 462 pages.
  5. Stroustrup Bjarne The C++ Programming Language, Second Edition, , 1991, 646 pages.
  6. Martin R. "Why C++", 1995, 35 pages
  7. X3J16/96-0018; WG21/N0836, Working Paper for Draft Proposed International Standard for Information Systems-- Programming Language C++.
  8. Plauger P.J., The Draft Standard C++ Library; Prentice-Hall, 1995.
  9. Zakhour, S: The Java Tutorial: A Short Course on the Basics, 4th Edition 2006
  10. Буч Гради Объектно-ориентированное проектирование с примерами применения: Пер. С англ.- М.: Конкорд, 2014 - 519 с.
  11. Бьерн Страуструп "Язык программирования C++. 3-е издание."
  12. Горнаков Станислав "DirectX, уроки программирования на С++"
  13. Грэхем Иан. Объектно-ориентированные методы. Принципы и практика. -- 3-е изд. -- М.: «Вильямс», 2014
  14. Гаффин А. Руководство по глобальной компьютерной сети Internet. -Network World, 1998. -500 с.
  15. Дейтел Х.М., Дейтел П.Дж. "Как программировать на C++"
  16. Зуев E, А Кротов "Новые возможности языка Си++", PC Magazine/Russian Edition, #7, 2013.
  17. Киммел П. Borland C++5. – СПб.: BHV- Санкт-Петербург, 1999.
  18. Либерти Джесс "Освой самостоятельно С++ за 21 день"
  19. Мильвидский А. М. Введение в Java. -1998. -250 с.
  20. Родли Джон Создание Java-апплетов .- The Coriolis Group,Inc.,1996, Издательство НИПФ "ДиаСофт Лтд.",1996
  21. Робинсон Симон, Олли Корнес, Джей Глинн и др. "C# для профессионалов"
  22. Синтес Антони. Освой самостоятельно объектно-ориентированное программирование за 21 день. -- М.: «Вильямс», 2002
  23. Эферган Майкл Java: справочник .- QUE Corporation, 2012, Издательство "Питер Ком", 2012
  24. Эккель Брюс: Thinking in Java 2, Prentice Hall, 2000
  25. International Organization for Standardization [Электронный ресурс] Режим доступа: https://www.iso.org/standard/68564.html
  26. 3dNews [Электронный ресурс]. Режим доступа: https://3dnews.ru/599560
  27. Университет Алтау [Электронный ресурс] режим доступа: http://bourabai.kz/C-Builder/c/index.htm
  28. Справочник Java [Электронный ресурс] Режим доступа: http://www.java.com/ru/about/
  29. Oracle [Электронный ресурс] Режим доступа: https://docs.oracle.com/javase/10/
  30. Cppreference.com [Электронный ресурс]. Режим доступа: https://en.cppreference.com/w/cpp/language/history
  31. JavaBegin [Электронный ресурс] Режим доступа: https://javabegin.ru/blog

ПРИЛОЖЕНИЕ А.

Листинг 1. Апплет

// Hello.java

import java.applet.Applet;

import java.awt.Graphics;

public class Hello extends Applet {

public void paint (Graphics gc) {

gc.drawString («Привет, мир!», 65, 95);

}

}

ПРИЛОЖЕНИЕ Б

Листинг 2. Апплет

<! - Hello.html ->

<html>

<head>

<title> Hello World Applet </ title>

</ head>

<body>

<applet code = "Hello" width = "200" height = "200" >

</ applet>

</ body>

</ html>

ПРИЛОЖЕНИЕ В

Листинг 3. Сервлет.

// Hello.java

import java.io. *;

import javax.servlet. *;

public class Hello extends GenericServlet {

public void service (ServletRequest request, ServletResponse response)

throws ServletException, IOException

{

response.setContentType ( "текст / html");

PrintWriter pw = response.getWriter ();

pw.println («Привет, мир!»);

pw.close ();

}

}