PHP komanda 2. jūlijā izlaida PHP 8.6.0 alfa 1, bet 16. jūlijā sekoja alfa 2. Ar to sākas nākamā lielā PHP laidiena cikls. Stabilā versija joprojām ir 8.5, kuras jaunākais laidiens 8.5.8 iznāca tajā pašā 2. jūlijā kā drošības ielāps.
Alfas produkcijā likt nedrīkst, taču tās parāda, kas nonāks 8.6. Kodā jau ir trīs praktiskas lietas: jauna funkcija clamp(), ātrāka pirmās klases izsaukumu apstrāde un TAILCALL virtuālās mašīnas atbalsts Windows būvēm. Pieņemts arī ilgi gaidītais priekšlikums par daļēju funkciju piemērošanu.
PHP darbina lielu daļu tīmekļa aizmugures, tostarp WordPress, Laravel un Symfony projektus. Katrs jauns laidiens tāpēc skar plašu izstrādātāju loku, arī tos, kas kodu neraksta paši, bet uztur gatavus risinājumus. 8.6 nav pārrāvuma laidiens, tā svars ir sīkos ērtību un ātruma uzlabojumos.
clamp() ietur skaitli robežās
Funkcija clamp() paņem trīs argumentus: vērtību, apakšējo robežu un augšējo robežu. Ja vērtība iekrīt ārpus diapazona, funkcija atgriež tuvāko robežu. Izsaukums clamp(140, 0, 100) dod 100, bet clamp(-5, 0, 100) dod 0. Vērtība diapazona iekšienē paliek neskarta.
Līdz šim to pašu rakstīja, liekot min() un max() vienu otrā, piemēram max(0, min(100, $x)). Šāda rinda viegli maldina, jo pēc mēneša grūti atcerēties, kura funkcija atbild par apakšējo robežu un kura par augšējo. Nosaukums clamp() to pasaka pats. Koda lasītājam nav jādomā līdzi.
Ierobežošana bieži vajadzīga krāsu kanāliem no 0 līdz 255, procentiem no 0 līdz 100 vai koordinātām, kas nedrīkst iziet ārpus ekrāna. Visos šajos gadījumos clamp() aizvieto divu funkciju salikumu ar vienu izsaukumu.
Jautājumzīme funkcijas vidū atgriež Closure
Redzamākais sintakses jaunums ir daļēja funkciju piemērošana. Ja funkciju izsauc un daļu argumentu vietā ieliek jautājumzīmi, PHP funkciju uzreiz neizpilda. Tā vietā atgriež Closure, kas atceras jau padotās vērtības. Trūkstošos argumentus padod vēlāk.
Pieņemsim, ka ir funkcija add($a, $b, $c). Izsaukums add(10, ?, 5) funkciju neizpilda. Tas atgriež Closure objektu. To izsauc pēc tam: pēc $f = add(10, ?, 5) rinda $f(3) izdrukā 18. Daļu argumentu iesaldē uzreiz, pārējos padod vēlāk.
Tas noder, kad augstākas kārtas funkcijai jāpadod izsaukums ar iepriekš fiksētiem argumentiem, piemēram, array_map vai usort iekšienē. Līdz šim tur nācās rakstīt atsevišķu anonīmu funkciju vai izsaukumu ietīt bultiņas funkcijā.
Praktiskā vērtība parādās, kad vienu argumentu vajag fiksēt vairākiem izsaukumiem. Ja jāformatē skaitļu saraksts ar vienu un to pašu decimālzīmju skaitu, ar daļēju piemērošanu pietiek uzrakstīt vienu Closure un padot to sarakstam. Atsevišķa anonīma funkcija katram gadījumam vairs nav vajadzīga.
Ideja PHP apritē nav jauna. Priekšlikums par daļēju funkciju piemērošanu vairākus gadus palika apspriešanā. Tikai 8.6 ciklā tas guva apstiprinājumu otrajā redakcijā ar jautājumzīmes sintaksi.
Ātrums: kešoti izsaukumi un TAILCALL uz Windows
Otrs 8.6 uzsvars ir izpildes ātrums. Pirmās klases izsaukumu sintakse, kas PHP ienāca ar 8.1 kā strlen(...), līdz šim katrā izsaukumā ģenerēja jaunu Closure objektu. 8.6 dzinis vienādus izsaukumus viena pieprasījuma laikā kešo un lieto atkārtoti. Ciešā ciklā, kur viena un tā pati atsauce rodas tūkstošiem reižu, tas ietaupa atmiņu un piešķires.
Šie uzlabojumi neparādīsies kā lieli skaitļi sintētiskos testos, tie strādā fonā. Pirmās klases izsaukumu kešošana palīdz tur, kur viens izsaukums tiek veidots atkal un atkal, piemēram, kolekciju apstrādes bibliotēkās.
Windows būves iegūst TAILCALL virtuālās mašīnas režīmu, ja tās kompilē ar Clang 19 vai jaunāku versiju uz x86_64. Režīms izmanto kompilatora astes izsaukumu optimizāciju, lai mazinātu steka slodzi dzinēja iekšējā ciklā. Linux un macOS būves to izmantoja jau agrāk, tagad tas pieejams arī uz Windows ar piemērotu kompilatoru.
Alfa un beta versijas domātas testēšanai. PHP komanda aicina izmēģināt kodu un ziņot par kļūdām GitHub, pirms 8.6 nonāk produkcijā.
Kad gaidīt PHP 8.6
Pēc PHP laidienu grafika funkciju iesaldēšana un pirmā beta paredzēta 13. augustā. No tā brīža jaunas iespējas 8.6 vairs nepievieno, paliek tikai kļūdu labojumi un stabilizācija. Pašreizējais mērķa datums stabilajam laidienam ir 19. novembris, tas var nobīdīties atkarībā no tā, cik laidiena kandidātu vajadzēs.
Vēl vairāki priekšlikumi 8.6 ciklā ir tikai apspriešanas stadijā, tāpēc funkciju saraksts līdz augusta iesaldēšanai var mainīties. Apstiprinātās iespējas clamp() un daļēja funkciju piemērošana jau ir kodā. Tās var izmēģināt abās alfa versijās.
Līdz tam produkcijas serveros paliek PHP 8.5. Tās jūlija laidiens 8.5.8 bija drošības ielāps, tāpēc atjaunināt uz to ir vērts arī tiem, kas 8.6 vēl negaida. No jaunajām 8.6 iespējām clamp() ir maza mēroga ērtība, bet daļēja funkciju piemērošana maina to, kā PHP kodā izsaukumus padod tālāk.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.