Выпуск Java SE 18

Пасля шасці месяцаў распрацоўкі кампанія Oracle выпусціла платформу Java SE 18 (Java Platform, Standard Edition 18), у якасці эталоннай рэалізацыі якой выкарыстоўваецца адчынены праект OpenJDK. За выключэннем выдалення некаторых састарэлых магчымасцяў у Java SE 18 захавана зваротная сумяшчальнасць з мінулымі выпускамі платформы Java – большасць раней напісаных Java-праектаў без змен будуць працаздольныя пры запуску пад кіраваннем новай версіі. Гатовыя для ўсталёўкі зборкі Java SE 18 (JDK, JRE і Server JRE) падрыхтаваны для Linux (x86_64, AArch64), Windows (x86_64) і macOS (x86_64, AArch64). Распрацаваная ў рамках праекту OpenJDK эталонная рэалізацыя Java 18 цалкам адчыненая пад ліцэнзіяй GPLv2 з выключэннямі GNU ClassPath, якія дазваляюць дынамічнае звязванне з камерцыйнымі прадуктамі.

Java SE 18 аднесены да катэгорыі выпускаў са звычайным тэрмінам падтрымкі, абнаўленні для якога будуць выпускацца да наступнага рэлізу. У якасці галінкі з працяглым тэрмінам падтрымкі (LTS) варта выкарыстоўваць Java SE 17, абнаўленні для якога будуць выпускацца да 2029 гады. Нагадаем, што пачынальна з выпуску Java 10 праект перайшоў на новы працэс распрацоўкі, які разумее карацейшы цыкл фармавання новых рэлізаў. Новая функцыянальнасць зараз развіваецца ў адной стала якая абнаўляецца master-галінцы, у якую ўключаюцца ўжо гатовыя змены і ад якой раз у шэсць месяцаў адгаліноўваюцца галінкі для стабілізацыі новых выпускаў.

З навін Java 18 можна адзначыць:

  • Па змаўчанні задзейнічана кадоўка UTF-8. Java API, якія апрацоўваюць тэкставыя дадзеныя з улікам кадоўкі знакаў, зараз будуць па змаўчанні выкарыстоўваць UTF-8 на ўсіх платформах, незалежна ад сістэмных налад і выстаўленай лакалі. Для вяртання старых паводзін, у якіх кадоўка выбіраецца з улікам сістэмнай лакалі, можна выкарыстоўваць параметр "-Dfile.encoding=COMPAT".
  • У склад уключаны пакет com.sun.net.httpserver, у якіх уваходзіць утыліта jwebserver і бібліятэчны API з рэалізацыяй простага http-сервера для аддачы статычнага кантэнту (CGI і servlet-падобныя апрацоўшчыкі не падтрымліваюцца). Убудаваны http-сервер не аптымізаваны для працоўных нагрузак і не падтрымлівае кіраванне доступам і аўтэнтыфікацыю, бо накіраваны галоўным чынам на выкарыстанне падчас распрацоўкі для стварэння прататыпаў, адладкі і тэставанні праектаў.
  • У JavaDoc рэалізавана падтрымка тэга "@snippet" для ўбудавання працоўных прыкладаў і фрагментаў кода ў дакументацыю на API, да якіх можна ўжываць сродкі для праверкі карэктнасці, падсвятленні сінтаксісу і інтэграцыі з IDE.
  • Перароблена рэалізацыя API java.lang.reflect (Core Reflection), прызначанага для атрымання інфармацыі аб метадах, палях і контрукторах класаў, а таксама доступу да ўнутранай структуры класаў. Сам API java.lang.reflect застаўся нязменны, але зараз рэалізаваны праз выкарыстанне дэскрыптараў метадаў (method handles), якія прадстаўляюцца модулем java.lang.invoke, замест ужывання генератараў байткода. Змена дазволіла уніфікаваць рэалізацыі java.lang.reflect і java.lang.invoke, і спрасціць іх суправаджэнне.
  • Прапанавана трэцяя папярэдняя рэалізацыя API Vector, які прадстаўляе функцыі для вектарных вылічэнняў, якія выконваюцца з выкарыстаннем вектарных інструкцый працэсараў x86_64 і AArch64 і дазваляюць адначасова ўжыць аперацыі адразу да некалькіх значэнняў (SIMD). У адрозненне ад якія прадстаўляюцца ў JIT-кампілятары HotSpot магчымасцяў па аўтавектарызацыі скалярных аперацый, новы API дае магчымасць відавочна кіраваць вектарызацыі для паралельнай апрацоўкі дадзеных.
  • Дададзены SPI-інтэрфейс (service-provider interface) для рэзалвінгу імёнаў хастоў і IP-адрасоў, які дазваляе задзейнічаць у java.net.InetAddress альтэрнатыўныя рэзаверы, не прывязаныя да апрацоўшчыкаў, прапанаваным аперацыйнай сістэмай.
  • Прапанавана другая папярэдняя рэалізацыя API Foreign Function & Memory, пры дапамозе якога праграмы могуць узаемадзейнічаць з кодам і дадзенымі, змешчанымі за межамі Java runtime. Новы API дазваляе эфектыўна выклікаць функцыі, якія выконваюцца не ў JVM, і звяртацца да памяці, не кіраванай JVM. Напрыклад, можна выклікаць функцыі з вонкавых падзяляных бібліятэк і звяртацца да дадзеных працэсу без выкарыстання JNI.
  • Дададзена другая эксперыментальная рэалізацыя супастаўлення па шаблоне ў выразах "switch", якая дазваляе ў пазнаках "case" выкарыстоўваць не дакладныя значэнні, а гнуткія шаблоны, якія ахопліваюць адразу серыю значэнняў, для якіх раней даводзілася выкарыстоўваць грувасткія ланцужкі выразаў "if ... else". Object o = 123L; String formatted = switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); };
  • Абвешчаны састарэлым і будзе адключаны ў адным з наступных выпускаў механізм фіналізацыі, а таксама злучаныя з ім метады, такія як Object.finalize(), Enum.finalize(), Runtime.runFinalization() і System.runFinalization().
  • У зборшчыках смецця ZGC (Z Garbage Collector), SerialGC і ParallelGC рэалізавана падтрымка дэдуплікацыі радкоў.

Крыніца: opennet.ru

Дадаць каментар