Файл: История возникновения и развития языков программирования Си (С++) и Java (Структурное программирование).pdf
Добавлен: 28.03.2023
Просмотров: 272
Скачиваний: 2
СОДЕРЖАНИЕ
Глава 1. Эволюция программирования
1.2. Структурное программирование
1.3. Объектно-ориентированное программирование
1.4. Компонентное программирование
Глава 2. История возникновения и развития языка программирования C++
2.1. Возникновение и эволюция языка C++
2.2. Структура и эффективность C++
Глава 3. История возникновения и развития языка программирования Java
3.1. Возникновение и эволюция языка Java
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), а также ограничение доступа к классам.