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

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

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

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

Добавлен: 28.03.2023

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

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

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

var stream = list.stream(); // infers Stream<String>

Таблица 1

Этапы развития языка Java

Версия

Год выпуска

Новые языковые средства

Количество классов и интерфейсов

1.0

1996

Выпуск самого языка

211

1.1

1997

Внутренние классы

477

1.2

1998

Отсутствуют

1524

1.3

2000

Отсутствуют

1840

1.4

2002

Утверждения

2723

5.0

2004

Обобщенные классы, цикл в стиле for each, автоупаковка, аргументы переменной длины, метаданные, перечисления, статический импорт

3279

6

2006

Отсутствуют

3793

7

2011

Оператор switch со строковыми метками ветвей, ромбовидный оператор, двоичные литералы, усовершенствованная обработка исключений

4024

8

2014

Лямбда-выражения, библиотеки потоков и даты/времени, интерфейсы с методами по умолчанию

4240

9

2017

Литералы в коллекциях, оператор Элвиса, Class Optional, Streams, IO, Regrexp, обработка процессов ProcessHandle

более 4500

Тем не менее решение ввести var закончилось неоднозначными отзывами участников сообщества. Кто-то поддерживал нововведение и утверждал, что дедупликация повышает читабельность кода. Но были и те, кто уверял, что сейчас ряд типов переменных (к примеру, connection) не будут очевидными. Несмотря на что, что IDE теперь могут показывать их по требованию, однако же в других средах будут возникать проблемы.

В десятом релизе для улучшенной сборки мусора содержались сразу два изменения: JEP 304 и JEP 307. JEP 304 улучшил изоляцию кода от разных сборщиков мусора посредством нового интерфейса GC, что дало возможность быстрее интегрировать сторонние сборщики. JEP 307, в свою очередь, позволил «собирать мусор» в несколько потоков.

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


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

Часть разработчиков недовольна тем, как быстро меняется язык. Но есть и те, кто отмечает, что Java наконец-то обзаводится функциями, которых ему не хватало, и которые уже давно были реализованы в других ЯП. Вот некоторые из них.

Изменения в локальном выводе типов.

Java 10 уже предоставил возможность использовать var для обозначения типа локальных переменных, перекладывая эту задачу на плечи компилятора. Однако Java 11 идет дальше и делает так, что var можно использовать при объявлении формальных параметров неявно типизированных лямбда-выражений.

Добавление необработанных строковых литералов.

Это еще одно дополнение, над которым сейчас ведется работа. В необработанной строке каждый символ читается «как есть», включая символы разрыва. Например, такой строкой может быть разметка HTML или SQL-запрос:

String html = "<html>\n" +

" <body>\n" +

" <p>Hello World.</p>\n" +

" </body>\n" +

"</html>\n";

Используя строковый литерал, этот код можно записать следующим образом:

String html = `<html>

<body>

<p>Hello World.</p>

</body>

</html>

`;

Для обозначения необработанной строки используется обратный апостроф (`). Если вам нужно прописать апостроф внутри самой строки, то в этом случае для маркировки её границ используются двойные (или тройные, четверные и т. д.) обратные апострофы:

String str = ```This is a raw `string` with ``backticks`` inside```;

Появятся switch-выражения

Сейчас оформление switch выполняется следующим образом:

int val;

switch (str) {

case "foo": val = 1; break;

case "bar": val = 2; break;

case "baz": val = 3; break;

default: val = -1;

}

С появлением switch-выражений, конструкция сократится:

int val = switch (str) {

case "foo": break 1;

case "bar": break 2;

case "baz": break 3;

default: break -1;

}

При этом если в case встречается только break, возможно использовать упрощенную нотацию:

int val = switch (str) {

case "foo" -> 1;

case "bar" -> 2;

case "baz" -> 3;

default -> -1;

}

Добавление switch expressions — это шаг вперед на пути к появлению метода сопоставления с образцом.

Помимо отмеченных выше, Java может получить и другие изменения. Например, поддержку типов значений или переменных типа в enum. Эти обновления не обязательно войдут в состав Java 11, но, вероятно, ожидать их можно уже в ближайшем будущем [13].

Заключение


С++ был развит на базе языка программирования C и сохраняет C как подмножество за очень немногими исключениями. Базовый язык, C подмножество С++, спроектирован таким образом, что сохраняется очень близкое соответствие между его типами, операторами и операциями, и компьютерными объектами, с которыми приходится иметь дело: символами, числами и адресами. Исключением выступают операции свободной памяти new и delete, отдельные операторы и выражения С++ как правило не нуждаются в скрытой поддержке во время выполнения или подпрограммах.

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

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

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