Pár nesouvislých poznámek o přechodu na PHP7

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8082
+
+46
-

PHP 7 má dva podstatné rysy:

  • je téměř 100% kompatibilní s PHP 5
  • je neuvěřitelně rychlejší

Předpokládám, že tahle kombinace by mohla být důvodem jeho rychlé adaptace. Ta možnost získat obrovský rychlostní benefit takřka bez práce je velmi lákavá, i pro firmy, které jinak nemají tendenci používat nejnovější verze.

Nette 2.3 je dnes zcela kompatibilní s PHP 7.

(Výjimkou jsou jen některé krajní stavy PHP a Tracy, které se ale mohou s vývojem sedmičky měnit, nicméně před vydáním stable se i tohle vyřeší.)

Tedy přechod na PHP 7 by měl být z hlediska Nette úplně bezproblémový.


Co mám na mysli je ale jiná věc: kdy převést Nette do syntaxe PHP 7, tj. kdy dát PHP 7 jako minimální požadovanou verzi?

Situace je taková, že Nette 2.3 vyžaduje PHP 5.3 a master (tj. 2.4) vyžaduje 5.4, přičemž se takřka ničím jiným neliší, prostě od vydání verze 2.3 se žádné nové featury nevyvíjely. Z toho plyne, že verze 2.4 vyjde nejdříve příští rok, tedy nemalou dobu po vydání PHP 7 (která má být za 3 měsíce).

A tak vzniká zajímavá možnost příští verzi už udělat přímo pro PHP 7. Místo 2.4 vydat Nette 3.0.

I když věřím v rychlejší přijetí PHP 7, než tomu bylo u minulých verzí, tak stále bude v polovině roku 2016 na naprosté většině hostingů nedostupné. Což by nemusel být v případě Nette takový problém, protože:

  • na současné verzi Nette 2.3 lidem nic zásadního nechybí
  • není se potřeba obávat bezpečnostních problémů ani u starších verzí

Kdyby se ukázalo, až nástup PHP 7 není tak rychlý, dá se eventuálně nějaká verze 2.4 vždycky vydat.


Pokud by se přechod na PHP 7 realizoval, tak nejprve by bylo vhodné master updatovat pro PHP 5.5 a poté PHP 5.6 (viz poslední odstavec https://phpfashion.com/…usti-php-5-3). Výhodou je, že takové Nette lze stále v pohodě testovat na produkčních serverech.

Dále: protože Nette je kritický prvek aplikací, mělo by běžet ve striktním režimu. Úpravy, které jsou pro to potřeba udělat, je opět možné zanášet přímo do masteru běžícího pod PHP <7 (viz třeba) a mohou být tedy opět snadno testovány.

Dalším krokem je nasazení typehintů pro argumenty a návratové hodnoty. Tenhle krok by měl dle mého nastat až po vydání PHP 7. Jinak nebude možné tyto změny moc testovat, zároveň se tím kód hodně vzdálí v2.3, takže cherry-pickování commitů bude výrazně náročnější a nakonec: musí být na to připraveny editory, API generátory atd. Takže bych s tím nespěchal.

Plnému nasazení typehintů pro návratové hodnoty bude překážet to, že nepodporují nullable hodnoty. Ty by se měly objevit až s PHP 7.1, které odhaduji tak na přelom 2016/2017. Což je velká škoda, anotací @return zůstane tak v kódu stále dost a striktnost se úplně nebude dát ověřit.

Jan Tvrdík
Nette guru | 2595
+
+4
-

Místo 2.4 vydat Nette 3.0.

Nice!

nejprve by bylo vhodné master updatovat pro PHP 5.5 a poté PHP 5.6

Nebude zbytečně moc práce to aktualizovat postupně (tj. ne hned na PHP 5.6)? Ocení to někdo?

David Grudl
Nette Core | 8082
+
0
-

Jako jestli to bude v jednom commitu? To je přece úplně jedno.

Jan Tvrdík
Nette guru | 2595
+
0
-

@DavidGrudl Pochopil jsem to tvoji výše citovanou větu jako, že napřed všechno aktualizujeme na 5.5, počkáme, a pak všechno aktualizujeme na 5.6, což mi přijde zbytečně složité.

David Grudl
Nette Core | 8082
+
+9
-

Ne, klidně se to může stát najednou, jen mi jde o to, že dřív, než se začne řešit PHP 7 stuff, měl by být odladěn PHP < 7 stuff.

Jan Tvrdík
Nette guru | 2595
+
+8
-

Zkusím poslat PR s ::class.

kukulich
Člen | 58
+
+3
-

Super zpráva! Pokud někdo nebude rychlejší, tak budu postupně posílat do všech repozitářů jeden PR s úpravami pro striktní režim a druhý PR s typehinty. Ten druhý se pak budu snažit udržovat, dokud nepadne rozhodnutí o zamergování.

Jan Tvrdík
Nette guru | 2595
+
+3
-

Na ty typehinty to chce napsat nějaký nástroj, dělat to celé ručně mi nedává smysl.

Milo
Nette Core | 1283
+
0
-

Z toho plyne, že verze 2.4 vyjde nejdříve příští rok, tedy nemalou dobu po vydání PHP 7

Další věcí jsou PHP extensions, jak rychle budou zkompatibilizovány.

Myšlenkový pochod… Debian možná překvapí a udělá php7 paralelně k php5. Anebo nepřekvapí a php7 bude až v Debian Stretch tak ve 2018. Dotdeb by mohl balíčkovat brzy.

Dalším krokem je nasazení typehintů pro argumenty a návratové hodnoty… …takže cherry-pickování commitů bude výrazně náročnější.

V tomhle je Composer docela překážka. Když se Nette balilo postaru, byla to pohoda :o) Možná nějaký git hook (nebo spíš GitHub hook), který bude v commitech z masteru PHP7 fičurky stripovat a force-pushovat do větve master-php5.

Odprostím-li se od technických a BC potíží, moc se na to těším. Bude pro mě dost inspirativní sledovat PHP7 fičurky v kódu Nette.

David Grudl
Nette Core | 8082
+
+19
-

Rozumím tomu dobře tak, že tahle myšlenka byla přijata bez výhrad?

Jan Tvrdík
Nette guru | 2595
+
+8
-

Osobně si myslím, že pravděpodobně ještě Nette 2.4 jako závěrečná verze dvojkové řady bude potřeba. Jednak se tam bude pár užitečných věcí z 3.0 a jednak by měla usnadnit přechod na trojkovou řadu.


Co se přechodu na 5.6 týče tak

následující věci jsou cca hotovo a čeká na review

  • změna minimální požadované verze na 5.6.0
  • ClassName::class – je otázkou, jestli ty zápisy často nezkrátit pomocí use
  • password_*
  • DateTimeInterface
  • finally
  • list() ve foreach
  • constant expressions
  • odstranění podmínek pro kód < 5.6

následující věci potřebují prodiskutovat

  • variadic vs. array, řešíme to tady

následující věci ještě nejsou vůbec

  • zjednodušení Json pomocí json_last_error_msg() a zrušení Json::$messages
  • kouknout, jestli se někde nebude hodit array_column
  • přidat nové funkce do Image
  • kouknout podrobněji na Sessions, možná půjde vyhodit některé workaroundy
  • projít zmínky konkrétních bugů
xificurk
Člen | 121
+
+1
-

Ještě by to chtělo v rámci přechodu k PHP >5.4 prozkoumat, jestli by některé třídy neměly být nahrazeny úplně nebo částečně traitama.

Milo
Nette Core | 1283
+
0
-

David Grudl napsal(a):

Rozumím tomu dobře tak, že tahle myšlenka byla přijata bez výhrad?

Co udělat anketku, jak jsou na tom lidé s PHP na webhostinzích?

Jan Tvrdík
Nette guru | 2595
+
+3
-

@Milo Jenomže tebe zajímá, jestli lidé budou mít za půl roku na hostingu PHP 7, ne? To se z ankety dozvíš dost těžko.

Milo
Nette Core | 1283
+
0
-

@JanTvrdík Nedozvíš. Ale je fajn vědět, jestli mohou lidé využívat vlastnosti PHP 5.5 nebo 5.6, propast se pak zúží. Hledal jsem přehled stavu PHP na českých webhostinzích, ale nic seriózního nenašel.

Milo
Nette Core | 1283
+
0
-

Rozumím tomu dobře tak, že tahle myšlenka byla přijata bez výhrad?

A tou anketou jsem odbočil… výhrady nemám.

Honza Kuchař
Člen | 1662
+
+1
-

Jan Tvrdík napsal(a):

Na ty typehinty to chce napsat nějaký nástroj, dělat to celé ručně mi nedává smysl.

@JanTvrdík Našel jsem tyto:

Editoval Honza Kuchař (4. 8. 2016 19:23)