LINUX.ORG.RU

Релиз Java SE 9

 ,


1

6

21 сентября вышел очередной релиз платформы Java SE. С выхода предыдущего релиза Java SE 8 прошло три с половиной года.

Самым главным глобальным нововведением является Java Platform Module System — поддержка концепции модулей на уровне языка и JVM. Теперь сама стандартная библиотека JDK разбита на модули, а Java-разработчики имеют возможность создавать собственные модули, определять зависимости между ними, а также управлять видимостью пакетов в модуле для других модулей.

Подробнее про систему модулей Java 9 можно прочитать в книге Java 9 Modularity.

Другие важные нововведения:

  • Команда jshell — функциональность REPL (read-eval-print loop) для платформы Java.
  • Multi-Release JAR Files — возможность объединять в одном JAR-файле разные версии классов и ресурсов для разных версий Java.
  • jlink — инструмент для создания собственных сборок JRE под конкретную программу, включающих только нужные для запуска модули.
  • Браузерный плагин Java Plug-in и технология апплетов теперь помечены как устаревшие. Де факто апплеты уже не поддерживаются в современных браузерах.
  • Небольшие изменения в синтаксисе языка Java; например, в интерфейсах теперь поддерживаются private-методы.
  • Новый API для управления процессами (ProcessHandle).
  • Новый API для прохода по стеку вызовов (StackWalker).
  • Различные мелкие улучшения стандартной библиотеки, например, синтаксис для создания неизменяемых коллекций (List.of, Set.of, Map.of) и новые методы в API Stream и CompletableFuture.
  • Новые возможности ECMAScript 6 (let, const, for..of и т. д.) в JavaScript-интерпретаторе Nashorn, а также новый API для синтаксического анализа JavaScript (Parser).
  • Поддержка HiDPI для приложений AWT и Swing под Windows и Linux.
  • Поддержка GTK3 как альтернативы GTK2 для создания окон AWT, Swing и JavaFX под Linux. По умолчанию используется GTK2, либо, если он недоступен, GTK3.

Список изменений

>>> Скачать

anonymous

Проверено: Shaman007 ()
Последнее исправление: cetjs2 (всего исправлений: 2)
Ответ на: комментарий от vertexua

Смотря какие ограничения. Например?

«The container format used for AOT-compiled code is shared libraries. The JDK 9 version only supports Linux/x64, where the shared library format is ELF.»

X-Pilot ★★★★★
()
Ответ на: комментарий от X-Pilot

С практической точки зрения для большинства пользователей этого достаточно.

vertexua ★★★★★
()
Ответ на: комментарий от Aber

Например взять в runtime поменять состояния классов из rt.jar

емнип опасные манипуляции в reflection дефолтно разрешены только классам из JAVA_HOME, остальным - только чтение.

arkhnchul ★★★
()

Самым главным глобальным нововведением является Java Platform Module System

Не, вот это:

jlink — инструмент для создания собственных сборок JRE под конкретную программу

Только они опоздали лет на 15-20

anonymous
()
Ответ на: комментарий от EXL

Поддержка GTK3 как альтернативы GTK2 для создания окон AWT, Swing и JavaFX под Linux. По умолчанию используется GTK2, либо, если он недоступен, GTK3.

Интересно, что там с Wayland? Кто тестировал?

В исходной новости написана маркетинговая чушь. GTK2 и GTK3 могут использоваться лишь для рисования «шкуры» в JFC/Swing — GTKLookAndFeel.

При этом AWT «под капотом» использует старый добрый sun.awt.X11.XToolkit (и, соотв., X11-бэкенд), а AWT-компоненты как были Motif-подобными, так и остались.

Пруф.

Единственная реализация Javа, которая таки использовала GTK+ 2.0 на уровне AWT, — это GCJ.

Bass ★★★★★
()

...в интерфейсах теперь поддерживаются private-методы

эээ.... кто-нть ТРЕЗВЫЙ может объяснить, что за му***к это придумал?? У меня объяснений нет, курить для этого не хочу.

Интерфейс - это не просто «пачка методов» - это КОНТРАКТ. Контракт на то, как тебя ИЗВНЕ должны видеть другие объекты. И тут вылезает private... совсем свихнулись штоле??

matumba ★★★★★
()
Ответ на: комментарий от khrundel

...в жабе возможна дефолтная реализация метода интерфейса. В классе можно реализовать метод самому, а можно оставить ту, которая в определении интерфейса.

Откровенно, так себе «эволюция»! Из-за отсутствия полей, ничего особо полезного вы в интерфейсе не напишете, так, пару хелперов.

Вообще, интерфейс стали весьма превратно понимать, как раз из-за того, что интерфейс, фактически, это костыль-замена множественному наследованию (которое НИКОМУ не мешало, кроме тупых кодеров).
Сейчас интерфейс надо понимать как «контракт» и в этом смысле он вообще никаких реализаций иметь не должен - это «соглашение сторон».

А в принципе, жабоклёпы опоздали лет на 20 и современному прогеру надо смотреть в сторону Ди. Или Немерле.

matumba ★★★★★
()
Ответ на: комментарий от arkhnchul

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

matumba ★★★★★
()
Ответ на: комментарий от meequz

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

foror ★★★★★
()
Ответ на: комментарий от matumba

Лет 5 поговнокодят, потом кто-то сделает открытие? что писать так нельзя. Напишут много статей-открытий. Это станет плохим стилем. Выйдет целый язык Мотлин в котором эта фича будет отключена по умолчанию (или включена если прописать open interface).

wist512
()
Ответ на: комментарий от foror

в джаву год-два подвезут все нужное и этот шарп станет ещё не нужнее.

ЫЫЫ :))) Смишной ты, программер домашних калькуляторов! Шарп - это интыпрайз, детка! Тонны кода, совместимости, библиотек, инструментов и прочего. А валявшаяся последние 10 лет в пыли Жаба ВДРУГ кем-то станет?? Хо-хо, разве что дедулей, который в разгаре вечеринки выпьет бутылку водки и упадёт в нижнем брэйкдансе. Гвоздь программы на час. :)

Я не стану кривить, на жабе тоже есть много (легаси) кода. Но тонкость ситуации в том, что на жабе невозможно делать нормальный GUI! Их наколенные контролы вызывают слёзы смеха у дотнетчиков. Но если команда может писать клиентов ТОЛЬКО на C# (к примеру), какой смысл делать «сервер» на... чём-то кроме C#?! Увеличивать гетерогенность проекта? Нафик надо! Соотв. и серверный сегмент медленно, но верно смещается в сторону единого языка.

Особым колом стоит мобильная разработка - да, там Жаба рулит. Но мобайл - весьма специфичная сфера, влияния на другие она не имеет. Вплоть до того, что проект можно вообще делать на ASP.NET+JS+HTML и смарту будет всё равно.

matumba ★★★★★
()
Ответ на: комментарий от wist512

Именно! :) Любят в ИТ сначала набросить на вентилятор, постоять под брызгами, а потом кто-то не выдерживает и начинается хайп «как воняет!». Я бы скорее вернул множ.наследование - не так оно сложно, как дрыщщщат в тырнетах посредственности.

matumba ★★★★★
()
Ответ на: комментарий от matumba

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

foror ★★★★★
()
Ответ на: комментарий от matumba

ASP.NET+JS+HTML и смарту будет всё равно

Клиенту не все равно

anonymous
()
Ответ на: комментарий от matumba

Шарп - это интыпрайз, детка!

Шарп-это лоулевел интырпрайз под Виндовс сервер для относительно мелкорыбы, где все бизнес процессы - это купипродай. Настоящий дорогой отказоустойчивый интырпрайз обрабатывающий реальные охулиарды бабок или управляющий производством в крупных корпорациях делается как раз на связке AIX/zOS + сабж + websphere + db2 на соответствующих машинах. Это для тех вещей, для которых SAP не подошёл.

anonymous
()
Ответ на: комментарий от matumba

Интерфейс - это не просто «пачка методов» - это КОНТРАКТ. Контракт на то, как тебя ИЗВНЕ должны видеть другие объекты. И тут вылезает private... совсем свихнулись штоле??

Часть из этой пачки методов может иметь некую разумную реализацию по умолчанию. Раньше ты копипастил эту реализацию по умолчанию или делал абстрактный базовый класс (но тогда ты не мог реализовать несколько интерфейсов, т.е. всё равно копипастил. Реализация методов по умолчанию в интерфейсах решает эту проблему. Это было введено в Java 8.

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

Legioner ★★★★★
()
Ответ на: комментарий от matumba

Но тонкость ситуации в том, что на жабе невозможно делать нормальный GUI!

Особым колом стоит мобильная разработка - да, там Жаба рулит.

Вам там в 2005 как?

RedPossum ★★★★★
()
Ответ на: комментарий от RedPossum

GUI конечно трэш, но джава сегодня это же тупо мобильная разработка?

Я именно говорю про мейнстрим (где ровно тоже самое проще делается на всяких го, нод.жс и питоне), а не тех победителей, которые всю жизнь писали на сервлетах и продолжают по старинке клепать их уже на всяких спринг-mvc

wist512
()
Ответ на: комментарий от matumba

Но тонкость ситуации в том, что на жабе невозможно делать нормальный GUI!

Не дотнетчикам такое говорить. У жабы, помимо swing, есть swt которые использует нативные тулкиты.

Aber ★★★★★
()
Ответ на: комментарий от matumba

набери в гугле swing native look and feel и посмотри как ты обосрался

anonymous
()
Ответ на: комментарий от arkhnchul

емнип опасные манипуляции в reflection дефолтно разрешены только классам из JAVA_HOME, остальным - только чтение.

А это опасно?

public class ReflectionMagic {

	public static final String DAY = "friday";
	public static final String MONTH = "september";

	public static void main(String... args) throws NoSuchFieldException, SecurityException, IllegalArgumentException,
			IllegalAccessException, ParseException {

		System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse("2017-09-22"));

		Field charValueArray = String.class.getDeclaredField("value");
		charValueArray.setAccessible(true);

		charValueArray.set(DAY, "wtf".toCharArray());
		charValueArray.set(MONTH, "Fun".toCharArray());

		System.out.println(new SimpleDateFormat("yyyy-MM-dd").parse("2017-09-22"));
	}
}

java -version
java version "1.8.0_101"

Надо будет проверить на java 9.

Aber ★★★★★
()
Ответ на: комментарий от Aber

Вывод

Fri Sep 22 00:00:00 MSK 2017
Wtf Fun 22 00:00:00 MSK 2017
Но это конечно больше к магии оптимизации хранения строковых констант.

Aber ★★★★★
()
Ответ на: комментарий от anonymous

Зачем это нужно, когда есть C# и.NET Core ?

Ждём официальные гуи библиотеки для .NET Core

Gargamel
()

Новые возможности ECMAScript 6 (let, const, for..of и т. д.) в JavaScript-интерпретаторе

Интерпретатор js на java. Знатно тормозит наверное.

Поддержка GTK3

А с Qt ее можно подружить?

Sociopsih ★☆
()
Ответ на: комментарий от Sociopsih

А с Qt ее можно подружить?

Да, был проект QtJambi от разработчиков Qt. Ныне он мёртв, так как GTK+ по сути стал дефолтом в GNU/Linux, абсолютно никому эта привязка так и не пригодилась.

P.S. Qt 5 в Qt Jambi до сих пор:

Qt 5 support is still WIP

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)

Новые возможности ECMAScript 6 (let, const, for..of и т. д.) в JavaScript-интерпретаторе Nashorn, а также новый API для синтаксического анализа JavaScript (Parser).

Зачем на джаве js интерпретатор мутить??? Они там совсем сбрендили?

Gargamel
()
Ответ на: комментарий от Gargamel

Ему сто лет в обед, думаю в java7 появился. Практическое использование не видел, кроме как распарсить json без использования сторонних библиотек.

Aber ★★★★★
()
Ответ на: комментарий от matumba

Я не стану кривить, на жабе тоже есть много (легаси) кода. Но тонкость ситуации в том, что на жабе невозможно делать нормальный GUI!

Какой клиентский гуй в 2017, дед? Уже всё давно в браузере.

anonymous
()
Ответ на: комментарий от anonymous

Уже всё давно в браузере.

Выросло поколение у которых комп это тупо серфинг в сети.

wist512
()
Ответ на: комментарий от r0ck3r
> pkg info -d openjdk8-8.144.1
openjdk8-8.144.1:
	libXtst-1.2.3
	libXrender-0.9.10
	libXi-1.7.9,1
	libXext-1.3.3_1,1
	libX11-1.6.5,1
	libXt-1.1.5,1
	fontconfig-2.12.1,1
	dejavu-2.37
	freetype2-2.8
	javavmwrapper-2.5_2
	java-zoneinfo-2017.b
	giflib-5.1.4

Где ты тут увидел зависимость от Gtk?

iZEN ★★★★★
()
Ответ на: комментарий от EXL

Нет. С учётом неизбежной тепловой смерти Вселенной смерти X11, меня эта ситуация уже давно настораживает, но похоже, что спецы из Oracle не парятся.

Есть, конечно, ещё и SWT, где GTK с самого начала в полный рост (и, соответственно, Eclipse или Java Mission Control ты прекрасно запустишь и на Wayland), но SWT не входит в стандартную библиотеку, и порог вхождения там чуть повыше, и из сред разработки создание UI на SWT поддерживает только Eclipse (через Google WindowBuilder).

На самом деле, я немного приврал в исходном сообщении в том смысле, что, в дополнение к сказанному, начиная с версии 1.7, Java заменяет исторический java.awt.FileDialog из AWT (написанный с использованием голых libX11 и libxcb и выглядящий как экскременты мамонта) и при вызове соотв. API показывает GtkFileChooser, открыв через dlopen() библиотеку libgtk-x11-2.0.so.0. Но это всё, Карл! Достаточно ручками создать свой SO с пустым gtk_init():

void gtk_init(int* argc, char*** argv) {
    // empty
}

и подпихнуть его в LD_LIBRARY_PATH или LD_PRELOAD — и вся хвалёная поддержка GTK+ пойдёт лесом.

Да, в Java 1.9 они научились показывать GtkFileChooser из GTK+ 3.0 — но выдавать это за былинную победу и выделять в отдельный JEP?! Я вас умоляю.

Bass ★★★★★
()
Ответ на: комментарий от wist512

Зачем это компилируемому языку?

Захотелось свой shell. Пусть будет. У сишников же есть tcsh.

iZEN ★★★★★
()
Ответ на: комментарий от wist512

Зачем это компилируемому языку?

А зачем это в scala, kotlin? Удобно, потому что, быстро что-то попробовать.

jackill ★★★★★
()
Ответ на: комментарий от Bioreactor

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

Что это говорит о языке в плюс? Да ничего. Я не сторонник шарпа, но им может за свою цену будет работаться проще, потому что не приходится знать и спринг всех версий и одновременно джава EE (всех версий) и еще тучу созданного говна (а там его несчесть) чтобы угодить той или иной вакансии. И тут еще больше вопрос, будет ли этот перевес в 30-40к себя так оправдывать?

Не будет ли это аналогично тому, что вот грузчик вагонов получает больше, чем работник на погрузчике и значит теперь, что нужно стремится в разгрузку вагонов?

wist512
()
Ответ на: комментарий от Gargamel

Зачем на джаве js интерпретатор мутить??? Они там совсем сбрендили?

Он там сто лет уже. Удобно местами, кстати. Надо тебе в проге обработку разную делать от проекта к проекту. Написал функции, завел переменные, а промежуточную часть засосал как js script (на каждый проект свой), работающий с этими переменными и, если надо, функциями.

jackill ★★★★★
()
Ответ на: комментарий от anonymous

AIX/zOS + сабж + websphere + db2

Ох бл*ть. Ты забыл еще as400 и tn5250-терминальные программы на RPG до кучи. А вообще обрати внимание: urbancode на tomcat-e, мониторилка IBM-овская - тоже на tomcat-e и т.д. Хоть бы какой-то свой продукт на своем конченом libertyprofile написали бы. И java-машина у них конченная, не совместимая с нормальным OpenJDK.

anonymous
()
Ответ на: комментарий от Aber

Да это даже своего рода проблема, что во всяких банках пишут на 1.6 и даже не чешутся что-либо менять. И будут писать под 1.6 ещё 10 лет. А, когда выйдет JAVA 20, тогда перейдут на Java 8.

menangen ★★★★★
()
Ответ на: комментарий от Bioreactor

Да, жаба хороша местами, но на ней же мутят всякие фабрики абстрактных фабрик, чего нет в C#. Отсюда C# программки жрут меньше памяти.

menangen ★★★★★
()
Ответ на: комментарий от matumba

Откровенно, так себе «эволюция»! Из-за отсутствия полей, ничего особо полезного вы в интерфейсе не напишете, так, пару хелперов.

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

khrundel ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.