Файл: История возникновения и развития языка программирования Си (С++) и Java (МЕТОДОЛОГИИ ПРОГРАММИРОВАНИЯ).pdf

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

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

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

Добавлен: 31.03.2023

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

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

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

Как упоминалось ранее, между стандартами C++11 и C++03 язык находился в своеобразном «подвешенном» состоянии. Вроде бы развивались и дополнялась такие библиотеки, как boost, Qt и прочие, появился C++/CLI, а нового официального стандарта всё не было и не было.

Так продолжалось достаточно долго, да и стандарт C++11, планировавшийся к публикации в 2009 году, вышел только двумя годами позже. Но тем не менее вышел. И не просто вышел, а принёс собой множество дополнений, расширений и «синтаксического сахара». Писать с использованием нового стандарта стало проще и удобнее, в стандартную библиотеку было добавлено множество средств, облегчающих программистам жизнь. Была введена официальная поддержка параллельного программирования, что немаловажно, списки инициализации, призванные сделать код понятнее, лямбда-функции и т.д.

Но что не менее важно — тенденция не потеряна и на горизонте уже виднеются заготовки для нового стандарта.

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

С использованием C++ написано множество программного обеспечения. И, конечно, его необходимо поддерживать. С учётом того, что C++ стал намного удобнее в работе с выходом новых стандартов, идея писать модули/дополнения на современном C++ имеет место быть и не выглядит безумной. В дальнейшем такой код будет куда проще поддерживать. В то же время — это всё тот же производительный C++, с обширнейшим набором возможностей. А дополненная стандартная библиотека позволит использовать уже готовые решения без необходимости изобретения собственных решений.

На этом фронте дела идут не слишком гладко: С++ не слишком популярный язык среди начинающих программистов и существенно проигрывает таким языкам, как C# или Java. Как показано на рисунке 2, в 2019 году С++ уступает многим языкам, однако, всё равно остается востребованной в некоторых областях, что позволяет ему оставаться популярным. Однако он теряет позиции уже несколько лет подряд. Тут можно выделить несколько причин. [17]

1. Высокий порог вхождения.

Наверное, нет такого программиста, который бы не слышал о сложности С++. Безусловно, язык обширен, нюансов — несчётное множество. Производительность и глубинный контроль происходящих процессов (особенно если несколько спуститься с C++ к чистому C). Тут опять же следует упомянуть про стандарт C++11, который более приветлив к новичкам, предлагая удобный синтаксис, различного рода контейнеры, алгоритмы и прочие удобные вещи, предназначенные облегчить жизнь и написание кода.


Рисунок 2 – Рейтинг языков программирования по данным StackOverflow

2. Слабое продвижение.

Ни для кого не секрет, как продвигаются такие языки как C# или Java корпорациями-владельцами: Microsoft и Oracle, со стороны Microsoft продвижения весьма заметно. Большинство технологий Microsoft затачиваются именно под C#. Хакатоны, проводимые Microsoft, опять же проходят с использованием C#.

Для C++ такой поддержки нет. Да, для него выпускаются различные инструменты, позволяющие облегчить работу и процесс создания приложений. Тут стоит вспомнить тот же Qt, недавно вышедший ReSharper C++ от JetBrains. В Visual Studio 2015 ввели поддержку некоторых нововведений из последних стандартов, плюс некоторые дополнительные функции — работать стало удобнее. Но с масштабом вышеупомянутых продвижений это всё же в сравнение не идёт. [17]

3. Специализация.

Несмотря на то, что C++ — язык, дающий разработчику, как говорится, все карты в руки, область его применения не всеобъемлюща и занимает определённую нишу. Конкуренты есть, это тоже оказывает свое влияние. Взять, например, мобильную разработку. Основные платформы заняты теми или иными языками: Windows Phone — C#, Android — Java, iOS — Objective-C. И это вовсе не означает, что под эти платформы нет возможности писать на C++, вопрос лишь в том, насколько это будет удобно и будет ли также эффективно. Для веба, разработка под который с каждым годом становится популярнее и популярнее, C++ тоже не очень подходит. Возможность работы с сокетами есть, библиотеки, наподобие Wt, есть. С учётом того, что мобильная и веб-разработка стали очень популярны и только набирают обороты, понятен выбор начинающих в пользу других языков.

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

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

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

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

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

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


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

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

В целом, можно сделать вывод, что язык С++ ещё долго будет использоваться во многих узких областях.

ГЛАВА 3. ОСОБЕННОСТИ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА JAVA

3.1 Возникновения языка Java

Java – это интерпретируемый и компилированный язык программирования. Исходный текст (файлы с расширением a Java) откомпилирован со справкой компилятора Java (javac), который преобразовывает исходный текст в байт-код (файлы с расширением a.class). Цель проектировщиков Java состояла в том, чтобы разработать язык, посредством которого программист мог записать код, который мог бы выполняться всегда, в любое время

История создания языка Java начинается в июне 1991 года, когда Джеймс Гослинг создал проект для использования в одном из своих многочисленных сет-топ проектов. Язык, который рос вне офиса Гослинга, как дуб, Oak - первоначальное название Java до 1995 года, после в дальнейшем история Java продолжалась под именем Green, а позже был переименован как Java.

Но официальной датой создания языка Java считается 23 мая 1995 года, после выпуска компанией Sun первой реализации Java 1.0. Она гарантировала «Напиши один раз, запускай везде», обеспечивая недорогой стоимостью на популярных платформах.

Приблизительно в 1990 Джеймс Гослинг, Билл Джой, Патрик Ногтон и другие в Sun Microsystems начали разрабатывать язык по имени Oak. Прежде всего они видели применение Java для встроенных микрокомпьютерных модулей бытовой техники, в видеомагнитофонах, тостерах, а также для PDA (personal data assistants).

Изначально новому языку было дано имя Oak (от англ.«Дуб»). Всё дело в том, что под окном офиса Джеймса Гослинга рос дуб, который ему очень нравился и в честь которого он и решил назвать новый язык.

Когда же компания Sun Microsystems увидела, что язык хорошо себя зарекомендовал и его можно сделать общедоступным, было принято решение поменять название Oak, поскольку это название уже имел другой язык программирования, а также необходимо было более созвучное, одним словом более коммерческое имя. И было дано новое имя языку – Java. [19]

Чтобы решать эти задачи, Oak должен был быть:

  1. Независимым от платформы (с тех пор как продукцию стали вовлекать многие изготовители)
  2. Чрезвычайно надежным
  3. Компактным.

Существует 3 основные версии почему так назвали язык:

  1. Программисты пьют много кофе. Пока создавался новый язык программирования, были выпиты литры кофе, и поэтому решили назвать язык в честь сорта кофе Java.
  2. Название дано в честь марки кофе Java, который был назван в честь острова Ява (на англ. – Java). Эта версия перекликается с версией № 1.
  3. Поскольку новый язык разрабатывался для программирования бытовых электронных устройств, то иногда связывают это с аллюзией на кофе-машину как пример бытового устройства.

Однако, в 1993 рынки интерактивного телевидения и PDA пошли на убыль. Тогда бурно развивался интернет и сети. Так что Sun сдвинула целевой рынок в сторону интернет-приложений и заменила название проекта на Java.

В основе Java лежат языки С и C++. Его синтаксис получается из С, а ориентированные на объект особенности влияет C++.

В 1994 Sun's выпустила браузер HotJava. Он был написан на Java за несколько месяцев, что показало мощность апплетов, программ, которые работают в пределах браузера, а также для того, чтобы ускорить процесс разработки программ.

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

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

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

13 ноября 2006 года, Sun выпустила большую часть как свободное и открытое программное обеспечение в соответствии с условиями GNU General Public License (GPL). [18]

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

3.2 Особенности программирования на Java

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


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

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

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

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

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