Нашри Java SE 17

Пас аз шаш моҳи таҳия, Oracle платформаи Java SE 17 (Java Platform, Standard Edition 17) -ро баровард, ки лоиҳаи кушодаи OpenJDK-ро ҳамчун татбиқи истинод истифода мебарад. Ба истиснои бартараф кардани баъзе хусусиятҳои кӯҳнашуда, Java SE 17 мутобиқати қафоро бо версияҳои қаблии платформаи Java нигоҳ медорад - аксари лоиҳаҳои қаблан навишташудаи Java ҳангоми иҷро кардани версияи нав бидуни тағирот кор хоҳанд кард. Сохтаҳои насбшавандаи Java SE 17 (JDK, JRE ва Server JRE) барои Linux (x86_64, AArch64), Windows (x86_64) ва macOS (x86_64, AArch64) омода карда шудаанд. Татбиқи истинодҳои Java 17, ки аз ҷониби лоиҳаи OpenJDK таҳия шудааст, манбаи пурра дар доираи иҷозатномаи GPLv2 бо истисноҳои GNU ClassPath барои имкон додани пайвасти динамикӣ ба маҳсулоти тиҷоратӣ мебошад.

Java SE 17 ҳамчун версияи Дастгирии дарозмуддат (LTS) тасниф карда мешавад, ки то соли 2029 навсозиро идома медиҳад. Навсозиҳо барои версияи қаблии Java 16 қатъ карда шуданд. Филиали қаблии LTS Java 11 то соли 2026 дастгирӣ карда мешавад. Нашри навбатии LTS моҳи сентябри соли 2024 ба нақша гирифта шудааст. Ёдовар мешавем, ки аз барориши Java 10 оғоз шуда, лоиҳа ба раванди нави рушд гузашт, ки давраи кӯтоҳтари ташаккули релизҳои навро дар назар дорад. Функсияҳои нав ҳоло дар як шохаи устоди доимо таҷдидшаванда таҳия шудааст, ки тағйироти тайёрро дар бар мегирад ва аз он филиалҳо ҳар шаш моҳ барои устувор кардани релизҳои нав шохаҳо ҷудо карда мешаванд.

Хусусиятҳои нав дар Java 17 иборатанд аз:

  • Татбиқи таҷрибавии мутобиқати намуна дар ибораҳои "гузариш" пешниҳод карда мешавад, ки имкон медиҳад на арзишҳои дақиқ дар тамғакоғазҳои "касе", балки қолабҳои чандирро дар бар мегиранд, ки якбора як қатор арзишҳоро фаро гиранд, ки қаблан барои онҳо истифода бурдан лозим буд. занҷирҳои ибораҳои "агар... дигаре". Илова бар ин, "гузариш" қобилияти коркарди арзишҳои NULL дорад. Объект o = 123L; Сатри форматшуда = гузариш (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); пешфарз -> o.toString(); };
  • Дастгирии устуворшуда барои синфҳо ва интерфейсҳои мӯҳрдор, ки онҳоро дигар синфҳо ва интерфейсҳо барои мерос гирифтан, васеъ кардан ё бекор кардани татбиқ истифода бурда наметавонанд. Синфҳои мӯҳршуда инчунин роҳи бештари декларативии маҳдуд кардани истифодаи суперклассро нисбат ба тағирдиҳандаҳои дастрасӣ дар асоси номбар кардани возеҳ зерклассҳои барои васеъшавӣ иҷозатдодашуда таъмин мекунанд. бастаи com.example.geometry; синфи мӯҳри оммавӣ Шакл ба com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Квадрат иҷозат медиҳад {…}
  • Пешнамоиши дуюми API Vector пешниҳод карда мешавад, ки он функсияҳоро барои ҳисобҳои векторӣ таъмин мекунад, ки бо истифода аз дастурҳои векторӣ дар протсессори x86_64 ва AArch64 иҷро карда мешаванд ва имкон медиҳанд, ки амалиётҳо дар як вақт ба арзишҳои сершумор (SIMD) татбиқ карда шаванд. Баръакси қобилиятҳое, ки дар компилятори HotSpot JIT барои автовекторизатсияи амалиёти скалярӣ пешбинӣ шудаанд, API-и нав имкон медиҳад, ки векторизатсияро барои коркарди параллелӣ идора карда шавад.
  • Иловаи пешнамоиши API-и Функсияи хориҷӣ ва хотира, ки ба барномаҳо имкон медиҳад, ки бо код ва додаҳо берун аз вақти Java кор кунанд. API-и нав ба шумо имкон медиҳад, ки ба таври муассир ба функсияҳои ғайри JVM занг занед ва ба хотираи идоранашавандаи JVM дастрасӣ пайдо кунед. Масалан, шумо метавонед функсияҳоро аз китобхонаҳои муштараки беруна занг занед ва бе истифодаи JNI ба маълумоти раванд дастрасӣ пайдо кунед.
  • Муҳаррики рендеринги macOS, ки Java 2D API-ро таъмин мекунад, ки дар навбати худ Swing API-ро таъмин мекунад, барои истифодаи API графикаи Metal мутобиқ карда шудааст. Платформаи macOS ба таври нобаёнӣ истифодаи OpenGL-ро идома медиҳад ва барои фаъол кардани дастгирии металлӣ танзими "-Dsun.java2d.metal=true" ва ҳадди аққал иҷро кардани macOS 10.14.x лозим аст.
  • Порт барои платформаи macOS/AArch64 илова карда шуд (Компютерҳои Apple дар асоси микросхемаҳои нави Apple M1). Хусусияти махсуси порт дастгирии механизми муҳофизати хотираи W^X (Write XOR Execute) мебошад, ки дар он саҳифаҳои хотира ҳамзамон барои навиштан ва иҷро дастрас шудан мумкин нест. (кодро танҳо пас аз хомӯш кардани навиштан иҷро кардан мумкин аст ва навиштан ба саҳифаи хотира танҳо пас аз хомӯш кардани иҷро имконпазир аст).
  • Бозгашт ба истифодаи танҳо семантикаи strictfp барои ифодаҳои нуқтаи шинокунанда. Дастгирии семантикаи "пешфарз", ки аз замони нашри Java 1.2 дастрас аст, қатъ карда шуд, аз ҷумла соддагардонии кор дар системаҳо бо сопротсессори математикии хеле кӯҳнаи x87 (пас аз пайдоиши дастурҳои SSE2, зарурати семантикаи иловагӣ аз байн рафт).
  • Навъҳои нави интерфейсҳо ба генераторҳои рақамҳои псевдородалӣ татбиқ карда шуданд ва алгоритмҳои иловагӣ барои тавлиди беҳтари рақамҳои тасодуфӣ татбиқ карда шуданд. Ба барномаҳо имкони интихоби алгоритми тавлиди рақамҳои псевдорасоду дода мешавад. Дастгирии мукаммал барои тавлиди ҷараёнҳои объекти тасодуфӣ.
  • Инкапсуляцияи қатъии ҳамаи ҷузъҳои дохилии JDK, ба истиснои API-ҳои муҳим ба монанди sun.misc.Unsafe. Инкапсуляцияи қатъӣ кӯшишҳоро аз код барои дастрасӣ ба синфҳо, усулҳо ва майдонҳои дохилӣ блок мекунад. Қаблан режими қатъии инкапсуляцияро метавон бо истифода аз опсияи "--illegal-access=permit" ғайрифаъол кард, аммо ин ҳоло бекор карда шудааст. Барномаҳое, ки дастрасӣ ба синфҳо, усулҳо ва майдонҳои дохилиро талаб мекунанд, бояд онҳоро бо истифода аз опсияи --add-opens ё аттрибутии Add-Opens дар файли манифест ба таври возеҳ муайян кунанд.
  • Ба барномаҳо имкони муайян кардани филтрҳои бесериализатсияи додаҳо дода мешавад, ки онҳо метавонанд ба контекст ҳассос бошанд ва дар асоси амалиёти мушаххаси десериализатсияи динамикӣ интихоб карда шаванд. Филтрҳои муайяншуда ба тамоми мошини виртуалӣ (JVM-wide), яъне. на танҳо худи барнома, балки китобхонаҳои тарафи сеюмро, ки дар барнома истифода мешаванд, фаро мегирад.
  • Свинг усули javax.swing.filechooser.FileSystemView.getSystemIcon-ро барои бор кардани нишонаҳои калон барои беҳтар кардани интерфейси интерфейси экранҳои баланди DPI илова кардааст.
  • API java.net.DatagramSocket барои пайвастшавӣ ба гурӯҳҳои Multicast бе зарурати API алоҳида java.net.MulticastSocket дастгирӣ мекунад.
  • Утилитаи IGV (Ideal Graph Visualizer) такмил дода шуд, ки визуализатсияи интерактивии муаррифии рамзи фосилавӣ дар компилятори HotSpot VM C2 JIT-ро таъмин мекунад.
  • Дар JavaDoc, аз рӯи шабеҳи компилятори javac, ҳангоми баровардани хато, рақами хати мушкилот дар файли манбаъ ва ҷойгиршавии хато нишон дода мешавад.
  • Илова кардани хосияти native.encoding, ки номи рамзгузории аломатҳои системаро инъикос мекунад (UTF-8, koi8-r, cp1251 ва ғайра).
  • Интерфейси java.time.InstantSource илова карда шудааст, ки имкон медиҳад, ки вақтро бидуни истинод ба минтақаи вақт истифода барад.
  • Иловаи java.util.HexFormat API барои табдил ба намояндагии шонздаҳӣ ва баръакс.
  • Ба компилятор режими сӯрохи сиёҳ илова карда шудааст, ки амалиёти рафъи рамзҳои мурдаро ғайрифаъол мекунад, ки онро ҳангоми гузаронидани санҷишҳои корбарӣ истифода бурдан мумкин аст.
  • Иловаи "-Xlog: async" ба Runtime барои сабти гузоришҳо дар реҷаи асинхронӣ.
  • Ҳангоми таъсиси пайвастҳои бехатар, TLS 1.3 ба таври нобаёнӣ фаъол карда мешавад (қаблан TLS 1.2 истифода мешуд).
  • API-и қаблан кӯҳнашудаи Applet эълоншуда (java.applet.Applet*, javax.swing.JApplet), ки барои идора кардани замимаҳои Java дар браузер истифода мешуд, ба категорияи барои ҳазф таъиншуда кӯчонида шуд (баъди анҷоми дастгирӣ аҳамияти худро гум кард. барои плагини Java барои браузерҳо).
  • Менеҷери амният, ки кайҳо аҳамияти худро гум кардааст ва пас аз ба итмом расидани дастгирии плагини браузер талаб карда нашудааст, ба категорияи онҳое, ки барои нест кардан пешбинӣ шудаанд, гузаронида шуд.
  • Механизми фаъолсозии RMI хориҷ карда шудааст, ки кӯҳна шудааст, ба категорияи вариант дар Java 8 дохил карда шудааст ва дар амалияи муосир қариб ҳеҷ гоҳ истифода намешавад.
  • Компилятори таҷрибавӣ, ки JIT (яъне дар вақт) барои тартиб додани динамикии коди Java барои HotSpot JVM ва инчунин режими тартиб додани интизории (AOT, пеш аз вақт) синфҳоро ба рамзи мошин пеш аз оғози мошини виртуалӣ дастгирӣ мекунад , аз SDK хориҷ карда шудааст. Тартибдиҳанда дар Java навишта шудааст ва дар асоси кори лоиҳаи Graal. Қайд карда мешавад, ки нигоҳдории компиляторҳо меҳнати зиёдеро талаб мекунад, ки ҳангоми мавҷуд набудани талабот аз таҳиягарон ин асос надорад.

Манбаъ: opennet.ru

Илова Эзоҳ