Programavimas

Čia yra „Java 9“: viskas, ką reikia žinoti

Pagaliau čia yra „Java 9“ - formaliai „Java Platform Standard Edition“ 9 versija - ir jos „Java Development Kit“ (JDK) galima atsisiųsti kūrėjams.

Jis turi keletą svarbių, jei prieštaringai vertinamų naujų funkcijų, tačiau taip pat yra paskutinis senojo „Java“ pristatymo stiliaus eilutė.

Kur atsisiųsti „Java 9 JDK“

„Oracle“ paskelbė „Java SE 9 JDK“ ir dokumentus, kuriuos gali atsisiųsti kūrėjai.

Pagrindinės naujos „Java 9“ funkcijos

Debiutavus beveik trejus metus po „Java SE 8“, „Java SE 9“ turi keletą pagrindinių architektūrinių pakeitimų ir daugybę patobulinimų.

„Java 9“ moduliškumas yra žaidimų keitiklis

Naujos, prieštaringai vertinamos moduliškumo galimybės, pagrįstos „Project Jigsaw“, tikrai sužavės pažangiausias „Java“ parduotuves, norinčias sužinoti, ką dabar siūlo „JDK 9“, net jei konservatyvesnės parduotuvės nusprendžia laukti, kol moduliacija subręs.

Moduliškumas - „Java Platform Module System“ pavidalu - padalija JDK į modulių rinkinį, skirtą derinti vykdymo, kompiliavimo ar kūrimo metu. Moduliškumas buvo vadinamas „pereinamuoju“ pokyčiu, leidžiančiu suprasti priklausomybes tarp modulių.

Manoma, kad „Java 9“ moduliškumas leidžia kūrėjams lengviau surinkti ir prižiūrėti sudėtingas programas. Be to, tai turėtų padaryti „Java“ geriau pritaikytą mažesniems įrenginiams, tuo pačiu pagerinant saugumą ir našumą.

„Java 9“ moduliškumo aspektai apima programų pakavimą, paties JDK moduliavimą ir šaltinio kodo pertvarkymą į modulius. Pastatymo sistema yra patobulinta, kad būtų galima sukompiliuoti modulius ir užtikrinti modulio ribų kūrimo laiką. JDK ir „Java Runtime Environment“ (JRE) vaizdai yra pertvarkyti, kad būtų naudojami moduliai. Be to, „JavaFX“ vartotojo sąsajos valdikliai ir CSS API dabar yra prieinami moduliacijai.

Palaikoma daugybė konfigūracijų; todėl reikėtų pagerinti mastelio dydį, saugumą ir programų našumą. Lengvesnis „Java“ mastelio sumažinimas iki mažų įrenginių yra pagrindinis modulinių pastangų variklis.

Naudodami moduliškumą, kūrėjai galės geriau kurti ir prižiūrėti „Java SE“ („Standard Edition“) ir „Java EE“ (Enterprise Edition) bibliotekas ir dideles programas. Tačiau „Java 9“ kūrimo metu „Oracle“, IBM, „Red Hat“ ir kitiems kilo didelių nesutarimų, kaip tiksliai atlikti tokius radikalius pakeitimus platformoje. Pati modulių sistema buvo atmesta gegužę, o po to, kai buvo padaryta pažanga, ji bus patvirtinta per antrąjį balsavimą birželį.

Net susitarus tarp pagrindinių „Java“ pardavėjų, vis dar kyla ginčų, ar moduliškumas „Java“ kūrėjams duos daug naudos, kai kurie ekspertai sako „taip“, o kiti - „ne“. Nepaisant to, „Java 9“ dabar yra moduliuojama.

Kad būtų lengviau pereiti prie modulinio „Java 9“, „Java 9“ leidžia neteisėtai atspindėti prieigą prie kodo, esančio klasės kelyje, kurį JRE naudoja klasėms ir išteklių failams ieškoti. Ši galimybė bus uždrausta po „Java 9“.

Kompiliatoriaus „Java 9“ kodo patobulinimai

„Java 9“ atnaujinime yra keletas naujų kodo kompiliavimo galimybių, tarp kurių svarbiausia yra kompiliacija anksčiau laiko (AoT). Vis dar eksperimentiniame etape ši galimybė leidžia prieš pradedant paleisti virtualioje mašinoje kaupti „Java“ klases į gimtąjį kodą. Ši funkcija skirta pagerinti tiek mažų, tiek didelių programų paleidimo laiką, o poveikis didžiausiam našumui yra ribotas.

„Just-in-time“ (JIT) kompiliatoriai yra greiti, tačiau „Java“ programos tapo tokios didelės, kad reikia daug laiko, kol JIT visiškai sušyla, todėl kai kurie „Java“ metodai lieka nesuderinti ir silpnina našumą. Kompiliacija anksčiau laiko skirta šioms problemoms spręsti.

Tačiau „Java“ technologijų pardavėjo „Excelsior“ rinkodaros direktorius Dmitrijus Leskovas nerimauja, kad anksčiau parengta kompiliavimo technologija nėra pakankamai subrendusi, ir nori, kad „Oracle“ lauktų, kol „Java 10“ pasieks tvirtesnę versiją.

„Java 9“ taip pat siūlo antrąjį „Oracle“ išmaniojo kompiliavimo diegimo etapą. Ši savybė apimas javac įrankio stabilumas ir perkeliamumas, kad jį pagal numatytuosius nustatymus būtų galima naudoti JVM („Java Virtual Machine“). Šis įrankis taip pat bus apibendrintas, todėl jį bus galima naudoti dideliems projektams už JDK ribų. JDK 9 taip pat atnaujinojavac kompiliatorius, kad jis galėtų kompiliuoti „Java 9“ programas, kad jos veiktų kai kuriose senesnėse „Java“ versijose.

Kita nauja, bet eksperimentinė kompiliavimo funkcija yra „Java“ lygio JVM kompiliatoriaus sąsaja (JVMCI). Ši sąsaja leidžia Java kalba parašytą kompiliatorių naudoti kaip dinaminį JVM kompiliatorių. JVMCI API suteikia mechanizmus, kaip pasiekti VM struktūras, įdiegti sukompiliuotą kodą ir prijungti prie JVM kompiliavimo sistemos.

Rašant JVM kompiliatorių „Java“ turėtų būti sudarytas kokybiškas kompiliatorius, kurį lengviau prižiūrėti ir patobulinti nei esamus kompiliatorius, parašytus C arba C ++. Todėl pačioje „Java“ parašytus kompiliatorius turėtų būti lengviau prižiūrėti ir tobulinti. Kitos esamos pastangos įgalinti „Java“ kompiliatorius yra „Graal Project“ ir „Project Metropolis“.

Naujas kompiliatoriaus valdymo pajėgumas yra skirtas išsamiam ir nuo metodo kontekstui priklausomam JVM kompiliatorių valdymui, leidžiantis kūrėjams pakeisti kompiliatoriaus valdymo parinktis vykdymo metu, nenukenkiant našumui. Šis įrankis taip pat leidžia apeiti JVM kompiliatoriaus klaidas.

REPL galiausiai ateina į „Java 9“

„Java 9“ yra „read-eval-print loop“ (REPL) įrankis - dar vienas ilgalaikis „Java“ tikslas, kuris šioje versijoje tampa realus, po daugybės metų trukusio projekto „Kulia“ kūrimo.

Vadinamas „jShell“, „Java 9“ REPL interaktyviai vertina deklaratyvius teiginius ir išraiškas. Kūrėjai gali gauti atsiliepimų apie programas prieš kompiliavimą, tiesiog įvesdami kai kurias kodo eilutes.

Komandinės eilutės įrankis apima skirtukų užpildymą ir automatinį reikalingų terminalo kabliataškių pridėjimą. „JShell“ API leidžia „jShell“ funkcionalumą naudoti IDE ir kituose įrankiuose, nors pats įrankis nėra IDE.

REPL nebuvimas buvo nurodytas kaip priežastis, dėl kurios mokyklos gali nutolti nuo „Java“. (Tokios kalbos kaip „Python“ ir „Scala“ jau seniai turi REPL.) Tačiau „Scala“ kalbos įkūrėjas Martinas Odersky abejoja „REPL“ naudingumu „Java“, sakydamas, kad „Java“ yra orientuota į teiginius, o „REPL“ - į išraišką.

„Java 9“ srautų API patobulinimai

„Java“ srautai leidžia kūrėjams išreikšti skaičiavimus, kad būtų galima efektyviai išnaudoti duomenų lygiagretumą. „Java 8“ srauto galimybė yra skirta deklaratyviai apdoroti duomenis, tuo pat metu naudojant daugiasluoksnes architektūras.

Programoje „Java 9“ srautų API prideda metodų, kaip sąlyginai paimti ir išmesti elementus iš srauto, pakartoti srauto elementus ir sukurti srautą iš niekinės vertės, tuo pačiu plečiant „Java SE“ API rinkinį, kuris gali būti naudojamas kaip srautų šaltiniai.

Kodo talpyklą galima suskirstyti į „Java 9“

JDK 9 leidžia kodo talpyklą suskirstyti į segmentus, siekiant pagerinti našumą ir leisti išplėsti, pavyzdžiui, smulkų užrakinimą. Rezultatai turėtų būti patobulinti, nes specializuoti iteratoriai praleido ne metodo kodą; atskirti nemetoduotą, profiliuotą ir neprofiliuotą kodą; ir pagerinti kai kurių etalonų vykdymo laiką.

Geresnis „Java 9“ „Java“ palaikymas per „Project Nashorn“

„JDK 9“ tobulinamas „Nashorn“ projektas, teikiantis „Java“ lengvą „JavaScript“ vykdymo laiką. Projektas „Nashorn“ siekė įdiegti „Java“ didelio našumo, tačiau lengvą „JavaScript“ vykdymo laiką, tęsdamas „Rhino“ projektą, kuris buvo pradėtas Netscape. Projektas „Nashorn“ buvo apkaltintas leidus įterpti „JavaScript“ į „Java“ programas. Tai suteikė „Java“ „JavaScript“ variklį JDK 8.

JDK 9 apima analizatoriaus API, skirtą Nashorno ECMAScript sintaksės medžiui. API leidžia atlikti ECMAScript kodo analizę naudojant IDE ir serverio pusės sistemas, neatsižvelgiant į „Project Nashorn“ vidines įgyvendinimo klases.

HTTP / 2 kliento API yra „Java 9“

Beta HTTP / 2 kliento API atėjo į JDK 9, diegdama „Java“ pagrindinio žiniatinklio HTTP protokolo naujinimą. „WebSocket“ palaiko ir API.

HTTP / 2 API gali pakeisti „HttpURLConnection“ API, kuriai kilo problemų, įskaitant tai, kad ji buvo sukurta su dabar jau neveikiančiais protokolais, buvo ankstesnė už HTTP / 1, buvo pernelyg abstrakti ir sunkiai naudojama.

Pagerintas „Java 9“ HTML5 ir „Unicode“ palaikymas

JDK 9 „Javadoc“ dokumentavimo įrankis yra patobulintas, kad būtų sukurtas HTML5 žymėjimas. Taip pat palaikomas „Unicode 8.0“ kodavimo standartas, kuris prideda 8000 simbolių, 10 blokų ir šešis scenarijus.

DTLS saugos API pridedama prie „Java 9“

Saugumo tikslais „Java 9“ prideda DTLS („Datagram Transport Layer Security“) API. Protokolas sukurtas siekiant užkirsti kelią pasiklausymui, klastojimams ir žinučių klastojimui kliento / serverio ryšiuose. Pateikiamas kliento ir serverio režimų įgyvendinimas.

Ką „Java 9“ nebenaudoja ir pašalina

„Java 9“ nebenaudoja arba pašalina keletą nebemadingų funkcijų. Tarp jų yra „Applet“ API, kuri nebenaudojama. Dabar, kai saugumą palaikantys naršyklių kūrėjai panaikino „Java“ naršyklės papildinių palaikymą, tai išėjo iš mados. HTML5 atsiradimas taip pat padėjo jiems žūti. Kūrėjai dabar vadovaujasi tokiomis alternatyvomis kaip „Java Web Start“, kad paleistų programas iš naršyklės arba įdiegtų programų.

„Appletviewer“ įrankis taip pat nebenaudojamas.

„Java 9“ taip pat nebenaudoja „Concurrent Mark Sweep“ (CMS) šiukšlių surinkėjo, o parama bus nutraukta būsimame leidime. Siekiama paspartinti kitų „HotSpot“ virtualiosios mašinos šiukšlių surinkėjų plėtrą. Mažos pauzės G1 šiukšlių surinkėjas yra skirtas ilgalaikiam CMS pakaitalui.

Tuo tarpu anksčiau JDK 8 nebenaudojami šiukšlių surinkimo deriniai pašalinami iš JDK 9. Tai apima retai naudojamus derinius, tokius kaip „Incremental CMS“, „ParNew + SerialOld“ ir „DefNew + CMS“, kurie pridėjo papildomo sudėtingumo šiukšlių surinkėjo kodo bazei.

„Java 9“ taip pat sukuria „Java“ įspėjimus importo ataskaitose, kad padėtų didelius kodų pagrindus nuvalyti nuo pūkų įspėjimų. Naudojant šias kodų bazes, nebenaudojamas funkcionalumas dažnai turi būti palaikomas tam tikrą laiką, tačiau importavus nebenaudojamą konstrukciją, įspėjamasis pranešimas nėra pagrįstas, jei konstrukcijos naudojimas yra tyčinis ir neleidžiamas.

Taip pat „Java 9“ pašalinta galimybė pasirinkti JRE paleidimo metu per funkciją „Multiple JRE“ (mJRE). Ši galimybė buvo naudojama retai, apsunkino „Java“ paleidimo priemonės diegimą ir niekada nebuvo iki galo dokumentuota, kai ji pasirodė JDK 5.

„Oracle“ pašalino JVM TI (įrankio sąsajos) hprof (kaupo profiliavimo) agentą, kuris buvo pakeistas JVM. „Jhat“ įrankis taip pat buvo pašalintas, nes jį paseno aukščiausios kokybės kaupikliai ir analizatoriai.

„Java 9“ yra jos eilutės pabaiga, kai prasideda nauja „Java 9“ linija

Galima sakyti, kad „Java 9“ išeina su kaupu su visomis naujomis galimybėmis. „Oracle“ neseniai atskleidė, kad „Java 9“ yra paskutinė tokio tipo rūšis, kalbant apie žymėjimą ir laiką, praėjusį tarp pagrindinių leidimų.

Nuo šiol planuojama, kad „Java“ išleis šešis mėnesius, o kita pagrindinė versija bus vadinama „Java 18.3“, numatoma 2018 m. Kovo mėn., O po šešių mėnesių - „Java 18.9“.

Naujasis „Java“ leidimo ritmas taip pat reiškia, kad JDK 9 nebus paskirtas kaip ilgalaikio palaikymo leidimas. Vietoj to, kitas ilgalaikis leidimas bus „Java 18.9“.

Spartesnis „Java“ leidimo ritmas reiškia, kad kūrėjams nereikės laukti tol, kol pasirodys svarbiausi leidimai. Tai taip pat gali reikšti, kad kūrėjai praleis „Java 9“ ir jos „nesubrendusias“ moduliškumo funkcijas ir lauks šešis mėnesius naujos versijos, kuri greičiausiai išlygins bet kokią versiją Kinkas, sakė Simonas Maple'as, „Java“ palaikymo direktorius iš „Java“ įrankių pardavėjo „ZeroTurnaround“.