Rhyddhad Java SE 17

Ar ôl chwe mis o ddatblygiad, mae Oracle wedi rhyddhau platfform Java SE 17 (Java Platform, Standard Edition 17), sy'n defnyddio prosiect ffynhonnell agored OpenJDK fel gweithrediad cyfeirio. Ac eithrio dileu rhai nodweddion anghymeradwy, mae Java SE 17 yn cynnal cydnawsedd yn ôl â datganiadau blaenorol y platfform Java - bydd y rhan fwyaf o brosiectau Java a ysgrifennwyd yn flaenorol yn dal i weithio heb eu haddasu pan fyddant yn cael eu rhedeg o dan y fersiwn newydd. Mae adeiladau gosodadwy o Java SE 17 (JDK, JRE, a Server JRE) yn cael eu paratoi ar gyfer Linux (x86_64, AArch64), Windows (x86_64), a macOS (x86_64, AArch64). Wedi'i ddatblygu gan y prosiect OpenJDK, mae gweithrediad cyfeirio Java 17 yn ffynhonnell agored lawn o dan y drwydded GPLv2 gydag eithriadau GNU ClassPath i ganiatáu cysylltu deinamig â chynhyrchion masnachol.

Mae Java SE 17 wedi'i ddosbarthu fel datganiad Cymorth Hirdymor (LTS), a fydd yn parhau i dderbyn diweddariadau tan 2029. Mae diweddariadau ar gyfer y datganiad carreg filltir Java 16 blaenorol wedi dod i ben. Bydd cangen flaenorol LTS Java 11 yn cael ei chefnogi tan 2026. Mae'r datganiad LTS nesaf wedi'i drefnu ar gyfer mis Medi 2024. Gadewch inni eich atgoffa, gan ddechrau gyda rhyddhau Java 10, bod y prosiect wedi newid i broses ddatblygu newydd, gan awgrymu cylch byrrach ar gyfer ffurfio datganiadau newydd. Mae swyddogaethau newydd bellach yn cael eu datblygu mewn un brif gangen sy'n cael ei diweddaru'n gyson, sy'n cynnwys newidiadau parod ac y mae canghennau'n cael eu canghennu ohoni bob chwe mis i sefydlogi datganiadau newydd.

Mae nodweddion newydd yn Java 17 yn cynnwys:

  • Cynigir gweithrediad arbrofol o baru patrymau mewn ymadroddion “switsh”, sy'n caniatáu defnyddio nid gwerthoedd union mewn labeli “achos”, ond templedi hyblyg sy'n cwmpasu cyfres o werthoedd ar unwaith, y bu'n rhaid defnyddio'n feichus ar eu cyfer yn flaenorol. cadwyni o ymadroddion “os...arall”. Yn ogystal, mae gan “switsh” y gallu i drin gwerthoedd NULL. Gwrthrych o = 123L; String formatted = switsh (o) { achos Cyfanrif i -> String.format ("int %d", i); cas Hir l -> String.format ("hir %d", l); cas Dwbl d -> String.format("dwbl %f", d); case String s -> String.format("Llinyn %s", s); rhagosodedig -> o.toString(); };
  • Cefnogaeth sefydlog ar gyfer dosbarthiadau a rhyngwynebau wedi'u selio, na all dosbarthiadau a rhyngwynebau eraill eu defnyddio i etifeddu, ymestyn, neu ddiystyru'r gweithredu. Mae dosbarthiadau wedi'u selio hefyd yn darparu ffordd fwy datganiadol i gyfyngu ar y defnydd o uwchddosbarth nag addaswyr mynediad, yn seiliedig ar restru'n benodol yr is-ddosbarthiadau y caniateir eu hymestyn. pecyn com.example.geometry; dosbarth wedi'i selio cyhoeddus yn caniatáu Siâp com.example.polar.Circle, com.example.quad.Rectangle, com.example.quad.simple.Square {…}
  • Cynigir ail ragolwg o'r Vector API, sy'n darparu swyddogaethau ar gyfer cyfrifiadau fector sy'n cael eu gweithredu gan ddefnyddio cyfarwyddiadau fector ar broseswyr x86_64 ac AArch64 ac sy'n caniatáu i weithrediadau gael eu cymhwyso ar yr un pryd i werthoedd lluosog (SIMD). Yn wahanol i'r galluoedd a ddarperir yn y casglwr HotSpot JIT ar gyfer auto-fectoreiddio gweithrediadau sgalar, mae'r API newydd yn ei gwneud hi'n bosibl rheoli fectoreiddio yn benodol ar gyfer prosesu data cyfochrog.
  • Ychwanegwyd rhagolwg o'r API Swyddogaeth a Chof Tramor, sy'n caniatáu i gymwysiadau ryngweithio â chod a data y tu allan i amser rhedeg Java. Mae'r API newydd yn caniatáu ichi alw swyddogaethau nad ydynt yn JVM yn effeithlon a chael mynediad at gof nad yw'n cael ei reoli gan JVM. Er enghraifft, gallwch ffonio swyddogaethau o lyfrgelloedd a rennir allanol a chael mynediad at ddata proses heb ddefnyddio JNI.
  • Mae'r peiriant rendro macOS sy'n pweru'r API Java 2D, sydd yn ei dro yn pweru'r API Swing, wedi'i addasu i ddefnyddio'r API graffeg Metel. Mae'r platfform macOS yn parhau i ddefnyddio OpenGL yn ddiofyn, ac mae galluogi cefnogaeth Metal yn gofyn am osod "-Dsun.java2d.metal=true" ac o leiaf rhedeg macOS 10.14.x.
  • Ychwanegwyd porthladd ar gyfer y platfform macOS / AAarch64 (cyfrifiaduron Apple yn seiliedig ar y sglodion Apple M1 newydd). Nodwedd arbennig o'r porthladd yw cefnogaeth i fecanwaith diogelu cof W^X (Write XOR Execute), lle na ellir cyrchu tudalennau cof ar yr un pryd ar gyfer ysgrifennu a gweithredu. (dim ond ar ôl i'r ysgrifennu gael ei analluogi y gellir gweithredu'r cod, a dim ond ar ôl i'r weithred gael ei hanalluogi y gellir ysgrifennu at dudalen cof).
  • Wedi dychwelyd i ddefnyddio semanteg strictfp yn unig ar gyfer mynegiadau pwynt arnawf. Mae cefnogaeth ar gyfer y semanteg “diofyn”, sydd ar gael ers rhyddhau Java 1.2, wedi dod i ben, gan gynnwys symleiddio ar gyfer gweithio ar systemau gyda chydbroseswyr mathemateg x87 hen iawn (ar ôl dyfodiad cyfarwyddiadau SSE2, diflannodd yr angen am semanteg ychwanegol).
  • Mae mathau newydd o ryngwynebau i gynhyrchwyr rhifau ffug wedi'u rhoi ar waith, ac mae algorithmau ychwanegol wedi'u rhoi ar waith ar gyfer cynhyrchu rhifau ar hap yn well. Rhoddir cyfle i gymwysiadau ddewis algorithm ar gyfer cynhyrchu ffug-rifau. Gwell cefnogaeth ar gyfer cynhyrchu ffrydiau gwrthrych ar hap.
  • Gorfodi amgáu llym o holl fewnolion JDK, ac eithrio APIs hanfodol megis sun.misc.Unsafe. Mae amgįu caeth yn rhwystro ymdrechion o'r cod i gael mynediad at ddosbarthiadau mewnol, dulliau a meysydd. Yn flaenorol, gellid analluogi modd amgįu caeth gan ddefnyddio'r opsiwn "--illegal-access=permit", ond mae hwn bellach wedi'i anghymeradwyo. Dylai cymwysiadau sy'n gofyn am fynediad i ddosbarthiadau mewnol, dulliau, a meysydd eu diffinio'n benodol gan ddefnyddio'r opsiwn --add-opens neu'r priodoledd Add-Opens yn y ffeil maniffest.
  • Rhoddir y gallu i gymwysiadau ddiffinio hidlwyr dad-gyfeiriannu data, a all fod yn sensitif i gyd-destun a'u dewis yn ddeinamig yn seiliedig ar weithrediadau dad-gyfrifo penodol. Mae'r hidlwyr penodedig yn berthnasol i'r peiriant rhithwir cyfan (JVM-eang), h.y. cwmpasu nid yn unig y cais ei hun, ond hefyd y llyfrgelloedd trydydd parti a ddefnyddir yn y cais.
  • Mae Swing wedi ychwanegu'r dull javax.swing.filechooser.FileSystemView.getSystemIcon i lwytho eiconau mawr i wella'r UI ar sgriniau DPI Uchel.
  • Mae'r API java.net.DatagramSocket yn darparu cefnogaeth ar gyfer cysylltu â grwpiau Multicast heb fod angen API java.net.MulticastSocket ar wahân.
  • Mae'r cyfleustodau IGV (Ideal Graph Visualizer) wedi'i wella, gan ddarparu delweddu rhyngweithiol o gynrychiolaeth cod canolraddol yn y casglwr HotSpot VM C2 JIT.
  • Yn JavaDoc, trwy gyfatebiaeth â'r casglwr javac, pan fydd gwall yn cael ei allbwn, mae nifer y llinell broblemus yn y ffeil ffynhonnell a lleoliad y gwall bellach wedi'u nodi.
  • Ychwanegwyd yr eiddo native.encoding, gan adlewyrchu enw'r amgodio cymeriad system (UTF-8, koi8-r, cp1251, ac ati).
  • Mae rhyngwyneb java.time.InstantSource wedi'i ychwanegu, gan ganiatáu trin amser heb gyfeirio at barth amser.
  • Ychwanegwyd java.util.HexFormat API ar gyfer trosi i gynrychiolaeth hecsadegol ac i'r gwrthwyneb.
  • Mae modd twll du wedi'i ychwanegu at y casglwr, sy'n analluogi gweithrediadau dileu cod marw, y gellir ei ddefnyddio wrth gynnal profion perfformiad.
  • Ychwanegwyd opsiwn “-Xlog: async” i Runtime i recordio logiau yn y modd asyncronaidd.
  • Wrth sefydlu cysylltiadau diogel, mae TLS 1.3 wedi'i alluogi yn ddiofyn (defnyddiwyd TLS 1.2 yn flaenorol).
  • Mae'r API rhaglennig anarferedig (java.applet.Applet*, javax.swing.JApplet), a ddefnyddiwyd i redeg rhaglenni Java yn y porwr, wedi'i symud i'r categori llechi i'w dynnu (colli perthnasedd ar ôl diwedd y gefnogaeth ar gyfer yr ategyn Java ar gyfer porwyr).
  • Mae'r Rheolwr Diogelwch, sydd wedi hen golli ei berthnasedd ac a drodd allan i fod heb ei hawlio ar ôl diwedd y gefnogaeth i ategyn y porwr, wedi'i symud i'r categori o'r rhai y trefnwyd eu tynnu.
  • Mae'r mecanwaith RMI Activation wedi'i ddileu, sy'n hen ffasiwn, wedi'i ollwng i'r categori opsiwn yn Java 8 ac nid yw bron byth yn cael ei ddefnyddio mewn arfer modern.
  • Crynhoadwr arbrofol sy'n cefnogi JIT (mewn union bryd) ar gyfer llunio cod Java yn ddeinamig ar gyfer HotSpot JVM, yn ogystal â'r dull rhagweladwy (AOT, ymlaen llaw) o ddosbarthiadau i god peiriant cyn dechrau'r peiriant rhithwir , wedi'i dynnu o'r SDK. Ysgrifennwyd y casglwr yn Java ac mae'n seiliedig ar waith prosiect Graal. Nodir bod angen llawer o lafur ar gynnal a chadw casglwyr, na ellir ei gyfiawnhau pan nad oes galw gan ddatblygwyr.

Ffynhonnell: opennet.ru

Ychwanegu sylw