PHP 7: rilascio in arrivo

Il PHP 7 è in arrivo. Il rilascio è stato pianificato per ottobre 2015 e già nel corso dell’estate dovremmo vedere le prime RC.

Grandi novità in vista, perciò, come in ogni occasione di nuova major version. L’ultima volta era stato nel lontanissimo luglio del 2004, con l’uscita della 5.0 e l’avvio di una consistente avventura OOP.
E gli effetti si sono visti: la programmazione a oggetti è diventata irrinunciabile, il nuovo modo di programmare ha scatenato la cascata di pattern e framework che oggi conosciamo e la condivisione del codice ha prodotto maturazioni nella comunità degli sviluppatori che all’epoca non erano nemmeno immaginabili.

Sarà difficile anche questa volta fare una previsione sugli effetti “di costume” che produrrà il nuovo rilascio. Il salto in avanti certamente ci sarà e quello che possiamo fare adesso è iniziare ad annusare le novità.

Performance

PHP Next-Gen (PHPNG) è il nome che è stato dato alla reingegnerizzazione dello Zend Engine, che anima l’esecuzione dei nostri programmi. I risultati sembrano stupefacenti, come annuncia lo stesso Zeev Suraski.

L’obiettivo, in casa Zend, era almeno raggiungere le performance ottenute con HHVM in casa Facebook. Obiettivo raggiunto, a quanto pare, che raddoppia, triplica, quadruplica le velocità di esecuzione, a seconda dei benchmark e dei test nel mondo reale.

Real word apps - Benchmark
Real word apps – Benchmark

I valori in campo sembrano annunciare una vera e propria rivoluzione. Oltre al tempo di esecuzione in senso stretto, logiche di compilazione JIT (Just In Time) uso intensivo di OPCache e parallelismo estremo garantiranno la possibilità di sopportare carichi di lavoro elevatissimi. La sfida proposta dall’hacking di casa Zuckemberg è raccolta, e con successo.

[ Rfc: PHPNG (next generation) #Performance Evaluation ]

Novità del linguaggio

Meno impressionanti, invece, sembrano essere le novità del linguaggio. Alcune vecchie funzionalità vengono definitvamente rimosse, mentre vengono aggiunte nuove raffinatezze che però, ad una prima occhiata, non sembrano cambiare il nostro modo di programmare.

Vediamo in dettaglio qualche novità.

Dichiarazione del tipo restituito

L’amministrazione dei tipi sembra essere la novità più importante. Garantirà maggiore robustezza al codice,nuova potenza alle interfacce e miglior chiarezza documentale rispetto al semplice commento testuale.

Sarà possibile definire a priori il tipo di variabile restituito dalle funzioni.

Il vincolo sarà stringente: le funzioni così definite non potranno più restituire tipi diversi a seconda degli argomenti in ingresso. In altre parole, una volta definito il tipo restituito non avremo più quei casi che siamo abituati a commentare come  mixed  o array|string . In particolare, non sarà possibile nemmeno che il valore restituito sia null , obbligandoci a ricorrere a valori che ricadono in false o, meglio ancora, alle eccezioni.

La forza del vincolo sarà più o meno stringente, a seconda della scelta dello sviluppatore. Nel prossimo paragrafo si capirà perché.

[ Rfc: Return Type Declarations ]

Type hinting per gli scalari

Si direbbe l’argomento più controverso, che ha richiesto più di una Rfc. La soluzione è stata affidare questa opportunità ad una dichiarazione preliminare, per lasciar decidere allo sviluppatore se farne uso o meno. Ma vediamo di che si tratta.

Siamo abituati a richiedere che gli argomenti di una funzione siano oggetti di una certa classe:

Questa opportunità funziona solo con argomenti che siano oggetti di una certa classe, con gli array (PHP >= 5.1) o con lo “pseudotipo” callable (PHP >= 5.4).

Il PHP 7 introduce una nuova dichiarazione che ha effetto solo per il file corrente, che consente di definire il tipo degli argomenti anche per i tipi scalari:

La declare(strict_type = 1); deve essere inserita nel file dove avviene la chiamata alla funzione, non in quello in cui la funzione viene definita. Questo consente di fare liberamente hinting dei tipi in fase di preparazione, affidando la scelta al momento dell’assemblaggio dell’applicazione.

Si osservi che declare(strict_types=1); ha effetto anche sul tipo restituito, rendendone stringente l’indicazione. Se si sceglie di usarla, la conversione di tipi in uscita dalle funzioni non sarà più ammessa e cadremo in un «Catchable fatal error».

[ Rfc: Scalar Type Declarations ]

Operatore di confronto combinato (spaceship operator)

Il nuovo operatore è  <=>  ed è un operatore di confronto ternario, che non restituisce il tradizionale booleano (vero o falso), ma una terna di possibilità (maggiore, minore e uguale) rappresentate da 1 ,  -1  e 0  .

A cosa può servire? Un buon esempio sono i casi di ordinamento, in cui “maggiore” e “minore” non devono essere trattati come se fossero “uguale”.

[ Rfc: Combined Comparison (Spaceship) Operator ]

Operatore di fusione

Il nuovo operatore è ?? e serve a sbrogliare la seccatura di assegnare un valore di default a variabili non definite.
Tradizionalmente:

Il nuovo operatore, invece, consente di scrivere una forma compatta simile all’ultima, senza errori:

[ Rfc: Null Coalesce Operator ]

Funzionalità rimosse o deprecate

Il processo di rimozione di alcune funzionalità fa un passo in avanti.

Genereranno un errore E_DEPRECATED:

  • I costruttori in stile PHP4, definiti con il nome stesso della classe e non con __construct() ; [ Rfc ]

Verranno del tutto rimossi:

  • L’estensione mysql ; attenzione quindi a quei vecchi programmi che usavano mysql_connect() e le altre funzioni associate: non funzioneranno più; si dovrà usare, invece, PDO_mysql ; [Rfc ]
  • Gli “asp tag” ( <% e %> ) e le forme <script language="php"> ; sopravvivono invece, per quanto sconsigliate, le forme abbreviate  <?<?= ; [ Rfc ]

Conclusioni

Non sembra che lo sforzo degli sviluppatori per passare al PHP 7 sarà particolarmente gravoso. Le nuovi gestioni dei tipi introdurranno un maggiore rigore che potrà essere apprezzato. Ma la scelta, come si è visto, è stata morbida e raramente pratiche più vecchie o approssimative porteranno a dei fallimenti.

Gioie e dolori di sempre, quindi, con un linguaggio che mantiene la caratteristica di essere di facile apprendimento per il principiante, ma che nasconde la trappola di lasciare che pratiche non eccellenti continuino a girare nelle CPU dei webserver di tutto il mondo.

Difficile, invece, immaginare dove porterà il nuovo scenario delle performance, che si accompagnerà naturalmente alle nuove potenze di calcolo dell’hardware e alle sempre nuove tecnologie di cluster. Il linguaggio, insomma, sarà adatto ad imprese possenti ed è evidente che Zend, in questa operazione, si rivolge ai colossi di Internet, offrendo l’opportunità di sostenere carichi di lavoro pazzeschi a costi tanto ridotti quanto sono ridotti i tempi di esecuzione.

Leave a Comment

Your email address will not be published.

Analisi degli accessi a www.istat.it
×
', 'auto'); ga('require', 'displayfeatures'); ga('set', 'forceSSL', true); ga('send', 'pageview');