PHP, Java ir JavaScript – įdomybės, naujovės ir ateitis

Gegužės 15-ą minėjome Javascript dieną, gegužės 23-ioji buvo Java diena, o 1995 m. birželio 9 dieną Rasmus Lerdorf paskelbė apie PHP release’ą. Istoriją žinome, bet kas įdomaus įvyko pastaruoju metu? Kokių naujovių laukti ateityje?  Parengėme trumpą apžvalgą apie minėtas technologijas. Aptarėme svarbiausius PHP išleistus funkcionalumus; JAVA ciklo naujoves, GraalVM; pasidomėjome, kokios technologijos populiariausios naudojant JavaScript Front – end’e, Back -end’e, testavime bei kitur. Gero skaitymo!

PHP

Esminiai pasikeitimai, įvykę per kelerius metus:

 

  1. Programų našumo augimas

Nuo PHP 7.0 buvo pastebimas didelis programų, veikiančių naudojant naujomis PHP versijomis, našumo padidėjimas. Įvairiais skaičiavimais, lyginant su ankstesnėmis versijomis, programos veikė net 5 kartus greičiau, taip pat sunaudojo mažiau atminties ir kitų resursų. Sekančios PHP versijos taip pat didino našumą, o didžiausias skirtumas pasijus jau 8-oje PHP versijoje, kartu su JIT kompiliavimu.

2. Anoniminės klasės (Anonymous Class Support)

Anoniminė klasė gali būti naudojama kartu su įvardinta klase, kai:

  • klasės nereikia dokumentuoti
  • vykdymo metu klasė naudojama tik vieną kartą

3. Integer padalijimo funkcija (The Integer division function) – saugus būdas dalinti (net kai dalinama iš 0).

Ji grąžina sveikąją dalybos liekaną, padalindama pirmąjį parametrą iš antrojo. Jei antrasis parametras yra nulis, funkcija grąžina pranešimą apie klaidą.

 

4. Naujas null coalesce operatorius – „??“ (New null coalesce operator — the “??”)

5. Naujas operatorius – „space ship” (<=>) (new operator — space ship (<=>))Naudojamas optimizuoti ir supaprastinti palyginimo operacijas.

6. Funkcijos parametrų scalar tipo deklaracijos (Scalar type declarations). Siekiama įgyvendinti griežtų tipų kontrolę PHP kalboje. Leidžiama nurodyti funkcinių parametrų tipus, siekiant išvengti klaidų ir neapibrėžtų situacijų

7. Grąžinimo tipo deklaracijos (Return type declarations). Pridėta galimybė nurodyt funkcijosi grąžinimo tipus, kol kas palaikomi tik Scalar tipai bei klasės.

8. Parametrai bei funkcijų grąžinamos reikšmės, kurios gali būti grąžinamos kaip NULL. (Nullable Types)

9. Tuščio tipo rezultatas “Void”Skirtingai nuo kitų grąžinimo tipų, kurių patikrinimas yra vykdomas, kai funkcija yra kviečiama, šis tipas tikrinamas kompiliavimo metu, o tai reiškia, kad nereikia kviesti funkcijos, kad rastume klaidą.

10. Masyvo elementų reikšmių priskyrimas kito masyvo reikšmėmis (Square bracket syntax for array destructuring assignment).

11. Klasės konstantų matomumas (Class constant visibility). Dar vienas pokytis kalboje labiau griežtinantis kodo rašymą, bei leidžiantis išvengti klaidų.

Kas laukia ateityje?

Visose PHP 7.x versijose matomi požymiai, kad sukama link labiau tipizuotos ir modernesnės programavimo kalbos. Pastebima tendencija – PHP kūrėjai mėgsta pasiimti naudingus kitų kalbų funkcionalumus.

O ko, galbūt, galime laukti ateityje?

  • Jau minėtas JIT PHP 8 versijoje – stipriai pagreitinantis programas, veikiančias su naująja PHP versija
  • Įvardinti argumentai (Named Arguments)
  • “Nullsafe” kvietimai (Nullsafe Call)
  • Sąrašiniai tipai (Enumerated Types)
  • Rodyklės funkcijos (Arrow functions)

JAVA

  1. Imdami pavyzdį iš kitų programinės įrangos kūrėjų „Oracle“ pakeitė „Java“ versijų ciklą po „JDK 12“. Dabar nauji funkcionalumai išleidžiami kas 6 mėnesius, o atnaujinimai – kas ketvirtį. Šie versijų ciklai vadinami „train releases”. Funkcionalumų atnaujinimai gali būti bet kokie ne tik nauji ir patobulinti API, bet ir kalbos bei JVM funkcionalumai. Pirmasis funkcionalumo atnaujinimas išleistas 2018 kovą. Ketvirtiniai atnaujinimai bus apriboti saugumo ir naujų funkcionalumų klaidų taisymu bei regresijomis. Jie bus išleidžiami sausį, balandį, liepą ir spalį. Kiekvienas funkcionalumas bus du sykius atnaujinamas prieš išleidžiant naująjį. Naujajame modelyje bendras pokytis turėtų išlikti panašus kaip ir buvusiame, skirtinga yra tai, kad bus daug daugiau galimybių diegti naujoves.
  2.  Buvo išleista GraalVM virtuali mašina, paremta JDK ir Java virtualia mašina. GraalVM yra pilnai suderinama su JDK 8 ir rodo daug geresnius rezultatus nei su kitomis virtualiomis mašinomis.
  3. Oracle pakeitė Oracle JDK licencijavimą, jei norima naudoti šią versiją reikia turėti Oracle licenciją. Licencijos įsigyti nenorintiems, palikta galimybė migruoti į Open JDK – nemokamą JAVA versiją.

JAVASCRIPT

2018 m. The State of JavaScript” atliko tyrimą, analizuojantį Javascript technologijas, framework’us, kalbas ir kt. Jame buvo apklausta apie 20 000 programuotojų.

Įvertinti, naudoti, analizuoti, vengti* – į tokias skiltis suskirstytos technologijos, vertinant jų naudojimą ir pasitenkinimą. Paanalizuokime plačiau.

 

*Įvertinti – mažai naudojamos technologijos, tačiau pasitenkinimo lygis aukštas. Verta stebėti technologijos vystymąsi.

Naudoti – dažnai naudojamos ir aukštą pasitenkinimo lygį turinčios technologijos. Saugu diegti ir naudoti.

Analizuoti – dažnai naudojamos technologijos, tačiau pasitenkinimo lygis žemas. Jei šiuo metu naudojate šias technologijas, verta dar sykį jas įvertinti.

Vengti – mažai naudojamos ir mažą pasitenkinimo lygį turinčios technologijos. Geriausia šiuo metu vengti.

Naujos kalbos ir dialektai

Tai, kad galima rašyti kodą naudojant JavaScript kalbos variantą ar kitą kalbą, kuri kompiliuos su JS, dabar gali atrodyti savaime suprantama. Visgi, ilgą laiką tik CoffeeScript technologija leido tai daryti. Šiuo metu ją seniai išstūmė tokios technologijos kaip ES6, TypeScript, Flow. Labiau naudojamos netgi tokios kalbos kaip Elm ar Reason, kurių sintaksės labai skiriasi nuo JS. Daug pagrindo manyti, kad tokia ir bus Javascript ateitis. Atsirandant tokiems projektams kaip Web Assembly, rašyti JavaScript kodą gali būti kiek keista.

Kaip pagal naudojimą ir pasitenkinimą pasiskirstė naujos kalbos ir dialektai technologijos?

Įvertinti – ClojureScript, Elm, Reason, Flow.

Naudoti – TypeScript, ES6

Vengti – Flow

Front – end framework’ai

Šiuo metu populiariausios technologijos naudojamos Front-end’e yra React ir Vue.js.

Įdomu atkreipti dėmesį į spartų Vue.js augimą – prieš metus 27% atsakiusiųjų nebuvo girdėję apie šią biblioteką, dabar šis skaičius tesiekia 1,3%.

Angular vis dar labai plačiai naudojama, tačiau nepasitenkinimo ja lygis siekia net 43%. Gali būti, kad tai susiję su tuo, jog Angular ir AngularJS dažnai palaikomos viena technologija. Tik po kurio laiko paaiškės ar ši technologija grįš į prieš kelis metus turėtas pozicijas.

Kaip pagal naudojimą ir pasitenkinimą pasiskirstė Front-end framework’ai?

Įvertinti – Preact, Vue.js

Naudoti – Vue.js, React

Analizuoti – Angular

Vengti – Polymer, Ember

Duomenų tvarkymo įrankiai (Data Layer)

Labiausiai iš duomenų tvarkymo įrankių yra naudojama technologija Redux, turinti net 82% pasitenkinimo lygį. Sparčiai auga GraphQL ir Apollo, tad kitais metais rezultatai gali atrodyti visai kitaip.

Kaip pagal naudojimą ir pasitenkinimą pasiskirstė duomenų tvarkymo įrankiai?

Įvertinti – MobX, Apollo, GraphQl

Naudoti – Redux

Vengti – Relay/ Relay Modern

Back-end framework’ai

Paskutinius kelis metus JavaScript Back-end’e nebuvo labai daug naujovių ar netikėtumų, tačiau turint omeny kaip greitai kinta visos kitos sritys, galbūt, tai ir nėra blogai. Nors kiekvienais metais atsiranda daugybė framework’ų, nei vienas iš jų negali konkuruoti su Express. Netgi Koa, dažnai vertinamas kaip Express įpėdinis, negali jam prilygti nei pasitenkinimo lygiu nei populiarumu.  Daug dėmesio sulaukia Next.js, kuris nors ir negali prilygti Node Back-end’ui, vis dėlto tapo puikiu įrankiu siekiantiems spręsti atvaizdavimo iš serverio pusės problematiką React programėlėse. Įdomu kaip vystosi tokios serverless technologijos kaip AWS Lambda ir kaip jos pakeis Back-end vystymąsi ateityje.

Kaip pagal naudojimą ir pasitenkinimą pasiskirstė Back-end framework’ai?

Įvertinti – Next.js, FeathersJS, Koa

Naudoti – Express

Vengti – Sails, Meteor

Testavimas

Kol kitose JavaScript ekosistemos dalyse įsitvirtina viena ar dvi dominuojančios technologijos, testavime viskas kitaip – čia technologijų daug ir visos jos vertinamos sąlyginai gerai – žemiausias pasitenkinimo rodmuo yra 68%.

Mocha šiuo metu labiausiai naudojamas unit testų framework’as. Jest yra kitas plačiai naudojamas framework’as testavimui, pralenkęs Mocha pasitenkinimo lygiu ir pasiekęs net 96% pasitenkinimą.

Vizualinio testavimo srityje laimi Storybook. Ateityje daugiau dėmesio gali sulaukti automatinis testavimas naršyklėje, gali atsirasti daugiau įrankių paremtu Puppeteer.

Kaip pagal naudojimą ir pasitenkinimą pasiskirstė testavimo įrankiai?

Įvertinti – Ava, Storybook, Enzyme.

Naudoti – Enzyme, Karma, Jasmine, Jest, Mocha.

Mobilioji ir kompiuterinė versijos

Ši dalis aiškiai parodo, jog JavaScript seniai išlipo iš kompiuterio ekrano.

React Native ir Electron yra du lyderiaujantys sprendimai, skirti kurti mobiliąsias aplikacijas bei kompiuterinės versijos programas.

Vis tik, neseniai Airbnb paskelbė seriją straipsnių apie tai kodėl kuriant tolimesnius produktus, jie atsisakė React Native ir toliau dirbs su Native Apps.

Google taip pat pristatė keletą įdomių sprendimų, vienas iš jų yra Carlo – naujas Node app framework’as paremtas Puppeteer. Kitas – Flutter, kuris vietoj to, jog kurtų JavaScript „tiltą (bridge)”, kaip tai daro React Native, kompiliuoja tiesiai į originalų kodą (native code).

Kaip pagal naudojimą ir pasitenkinimą pasiskirstė mobiliųjų ir kompiuterinių versijų kūrimo įrankiai?

Įvertinti – NativeScript, Native Apps.

Naudoti – Native Apps, React Native, Electron.

Vengti – NativeScript.

Analizuoti – Ionic, Cordova.

Apibendrinimas

Didelių netikėtumų nebuvimas iš esmės reiškia, jog programuotojams reikia mažiau laiko praleisti galvojant, ką naudoti, o tiesiog naudoti esamus įrankius. Reikalai gali keistis 2019 -aisiais, nors Front-end’o fronte šiuo metu ramu, tačiau klausimas kaip duomenis paimti iš duomenų bazių ir pateikti klientui toli gražu neatsakytas. Šioje srityje dar tikrai pasireikš GraphQL, o apie artimiausias Javascript naujoves galite rasti TC39 grupės github’e. Patvirtinti funkcionalumai yra stage 3 dalyje.

 

Šaltiniai: https://2018.stateofjs.com/

https://medium.com/graalvm/announcing-graalvm-19-4590cf354df8

https://medium.com/@meskis/evolution-of-php-v5-6-to-v8-0-c3514ebb7f28

https://github.com/tc39/proposals

https://www.php.net/