Pár nesouvislých poznámek o přechodu na PHP7
- David Grudl
- Nette Core | 8227
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
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?
- Jan Tvrdík
- Nette guru | 2595
@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 | 8227
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
Na ty typehinty to chce napsat nějaký nástroj, dělat to celé ručně mi nedává smysl.
- Milo
- Nette Core | 1283
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.
- Jan Tvrdík
- Nette guru | 2595
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()
veforeach
- 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ů
- Jan Tvrdík
- Nette guru | 2595
@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.
- Honza Kuchař
- Člen | 1662
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)