Выпуск Java SE 20

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

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

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

  • Прапанавана папярэдняя падтрымка абмежаваных значэнняў (Scoped Values), якія дазваляюць сумесна выкарыстоўваць нязменныя дадзеныя ў струменях і эфектыўна абменьвацца дадзенымі паміж даччынымі струменямі (значэнні ўспадкоўваюцца). Scoped Values ​​развіваюцца для замены механізму зменных лакальных да струменя (thread-local variables) і больш эфектыўныя пры выкарыстанні вельмі вялікай колькасці віртуальных струменяў (тысячы і мільёны струменяў). Галоўнае адрозненне Scoped Values ​​ад зменных лакальных да струменя ў тым, што першыя запісваюцца адзін раз, у далейшым не могуць быць зменены і застаюцца даступныя толькі на час выканання патоку. class Server { final static ScopedValue CURRENT_USER = new ScopedValue(); void serve(Request request, Response response) { var level = (request. isAuthorized()? ADMIN : GUEST); var user = new User(level); ScopedValue.where(CURRENT_USER, user) .run(() -> Application.handle(request, response)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); if (!user.canOpen()) throw new InvalidUserException(); return new DBConnection(…); } }
  • Дададзена другая папярэдняя рэалізацыя шаблонаў запісаў (record pattern), якая пашырае якая з'явілася ў Java 16 магчымасць супастаўлення з узорам сродкамі для разбору значэнняў класаў тыпу record. Напрыклад: record Point(int x, int y) {} static void printSum(Object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
  • Дададзена чацвёртая папярэдняя рэалізацыя супастаўлення па шаблоне ў выразах "switch", якая дазваляе ў пазнаках "case" выкарыстоўваць не дакладныя значэнні, а гнуткія шаблоны, якія ахопліваюць адразу серыю значэнняў, для якіх раней даводзілася выкарыстоўваць грувасткія ланцужкі выразаў "if ... else". static String formatterPatternSwitch(Object obj) { return switch (obj) { 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(); }; }
  • Дададзена другая папярэдняя рэалізацыя API FFM (Foreign Function & Memory), які дазваляе арганізаваць узаемадзеянне Java-праграм з вонкавымі кодам і дадзенымі праз выклік функцый з вонкавых бібліятэк і доступ да памяці па-за JVM.
  • Дададзена другая папярэдняя рэалізацыя віртуальных патокаў, якія ўяўляюць сабой легкаважныя патокі, якія значна спрашчаюць напісанне і суправаджэнне высокапрадукцыйных шматструменных прыкладанняў.
  • Дададзены другі варыянт эксперыментальнага API для структураванага паралелізму, які спрашчае распрацоўку шматструменных прыкладанняў за кошт апрацоўкі некалькіх задач, выкананых у розных струменях, як адзінага блока.
  • Дададзена пятая папярэдняя рэалізацыя API Vector, які прадстаўляе функцыі для вектарных вылічэнняў, якія выконваюцца з выкарыстаннем вектарных інструкцый працэсараў x86_64 і AArch64 і дазваляюць адначасова ўжыць аперацыі адразу да некалькіх значэнняў (SIMD). У адрозненне ад якія прадстаўляюцца ў JIT-кампілятары HotSpot магчымасцяў па аўтавектарызацыі скалярных аперацый, новы API дае магчымасць відавочна кіраваць вектарызацыі для паралельнай апрацоўкі дадзеных.

Крыніца: opennet.ru

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