Apri il menu principale
HHVM
software
Logo
GenereMacchina virtuale (non in lista)
SviluppatoreFacebook
Data prima versione2011 dicembre 09; 7 anni fa[1]
Ultima versione3.15.0 (28 settembre 2016)
Sistema operativo
Linguaggioocaml
C++
C
Objective Caml (non in lista)
LicenzaLicenza PHP
(licenza libera)
Sito webhhvm.com

La Macchina Virtuale HipHop (Hip Hop Virtual Machine - HHVM) è una macchina virtuale open-source basata sulla compilazione just-in-time (JIT) utilizzata come motore di esecuzione per i linguaggi di programmazione PHP e Hack.

Utilizzando il principio della compilazione JIT, il codice PHP o Hack eseguito viene prima trasformato nel bytecode HipHop (HHBC) e successivamente tradotto dinamicamente in linguaggio macchina x86-64, ottimizzato ed eseguito nativamente.[2][3] Ciò avviene in contrasto con l'esecuzione via interprete solita del PHP, nella quale lo Zend Engine transforma il codice sorgente PHP in opcode che, utilizzati come una forma di bytecode, vengono eseguiti direttamente dalla CPU virtuale dello Zend Engine.[4]

HHVM è sviluppata da Facebook. Il suo codice sorgente è ospitato su GitHub ed è concessa in licenza sotto i termini della licenza PHP e la licenza Zend.

CaratteristicheModifica

HHVM è stato creato come il successore del motore di esecuzione di PHP HipHop per PHP (HPHPc), un transpiler PHP-to-C++ creato anch'esso da Facebook.[5][6] Reduce dall'esperienza nel provare a risolvere i problemi introdotti dalla HPHPc, Facebook ha deciso all'inizio del 2010 di creare una macchina virtuale per il PHP basata sulla compilazione JIT. I problemi principali della HPHPc erano infatti la poca popolarità del software, la mancanza del supporto completo a tutte le caratteristiche del linguaggio PHP e le difficoltà di sviluppo e pubblicazione di alcuni progetti imponenti che usavano la HPHPc.[5] Nel primo quadrimestre del 2013 la versione pubblica del sito facebook.com ha smesso di usare HPHPc ed è passata alla HHVM.

Seguendo il principio di compilazione HIT, HHVM converte il codice PHP o Hack eseguito in un bytecode ad alto livello, l'HHBC conosciuto anche come rappresentazione intermedia. HHBC è un formato bytecode creato appositamente per la HHVM, un modo che sia utilizzabile sia dagli interpreti che dai compilatori just-in-time. Come passo successivo durante l'esecuzione, la HHVM traduce dinamicamente ("just-in-time") il bytecode HHBC in linguaggio macchina x86-64, esegue ulteriori ottimizzazioni grazie all'analisi dinamica del bytecode tradotto ed esegue il linguaggio macchina x86-64.[7][5][8] Dal risultato, si osserva come la HHVM abbia alcune similarità alle macchine virtuali usate da altri linguaggi di programmazione come il Common Language Runtime (CLR, per il linguaggio C#) e la Java Virtual Machine (JVM, per il linguaggio Java).

HHVM porta molti benefici rispetto alla HPHPc, e uno di questi è il supporto quasi completo all'intero linguaggio PHP come definito dall'implementazione ufficiale del PHP versione 5.4, includendo il supporto della macchina per i costrutti create_function() e eval().[9][10] Inoltre la HHVM utilizza lo stesso motore di esecuzione sia durante lo sviluppo che durante la produzione, supportando l'integrazione con il debugger HPHPd in entrambi gli ambienti. Inoltre HHVM elimina le lunghe build necessarie dalla HPHPc per eseguire i programmi PHP, creando un processo di sviluppo e pubblicazione molto più semplice rispetto a quello della HPHPc.[7]

Insieme alla HHVM, Facebook ha rilasciato anche Hack, un linguaggio di programmazione creato appositamente per la HHVM e che può essere visto come una nuova versione del linguaggio PHP.[11][12] Hack permette di utilizzare sia la tipizzazione statica che quella dinamica, un concetto noto come tipizzazione graduale. Permette inoltre di specificare i tipi per le proprietà di classe, per i parametri e per i valori di ritorno. Allo stesso tempo, Hack non è completamente compatibile con il PHP a causa della mancanza di alcune caratteristiche del PHP come la dichiarazione goto e l'assegnazione dinamica dei nomi delle variabili.[13][14][15][16]

PerformanceModifica

Essendo una macchina virtuale per processi che provvede al loro ambiente di esecuzione, HHVM ha la capacità di utilizzare le informazioni prodotte dal codice durante l'esecuzione per produrre linguaggio macchina più efficiente, portando ad un maggiore throughput dei server e ad una minore latenza. Nell'ultimo quadrimestre del 2012, l'esecuzione del codice sorgente di facebook.com sulla HHVM ha ottenuto performance pari a quelle ottenute sulla HPHPc[5] e nel dicembre 2013 le performance della HHVM sono migliorate fino a superare del 15% circa quelle della HPHPc.

NoteModifica

  1. ^ Jason Evans, The HipHop Virtual Machine, Facebook, dicembre 9, 2011. URL consultato il agosto 2, 2014.
  2. ^ Guilherme Ottoni, HHVM JIT: a profile-guided, region-based compiler for PHP and Hack, ACM, 11 giugno 2018, pp. 151–165, DOI:10.1145/3192366.3192374. URL consultato il 4 agosto 2018.
  3. ^ (EN) facebook/hhvm, su GitHub. URL consultato il 4 agosto 2018.
  4. ^ PHP and Zend Engine internals, su phpbuilder.com. URL consultato il 4 agosto 2018 (archiviato dall'url originale il 15 settembre 2014).
  5. ^ a b c d Speeding up PHP-based development with HHVM, su www.facebook.com. URL consultato il 4 agosto 2018.
  6. ^ (EN) Remove support for buildling HPHPc · facebook/hhvm@fc5b951, su GitHub. URL consultato il 6 agosto 2018.
  7. ^ a b The HipHop Virtual Machine, su www.facebook.com. URL consultato il 6 agosto 2018.
  8. ^ (EN) facebook/hhvm, su GitHub. URL consultato il 6 agosto 2018.
  9. ^ (EN) About upgrade to PHP 5.4 engine · Issue #716 · facebook/hhvm, su GitHub. URL consultato il 6 agosto 2018.
  10. ^ (EN) facebook/hhvm, su GitHub. URL consultato il 6 agosto 2018.
  11. ^ (EN) Facebook Introduces 'Hack,' the Programming Language of the Future, in WIRED. URL consultato il 6 agosto 2018.
  12. ^ (EN) Hack: a new programming language for HHVM – Facebook Code, su code.facebook.com. URL consultato il 6 agosto 2018.
  13. ^ (EN) Josh Lockhart, Facebook’s Hack, HHVM, and the future of PHP, in O'Reilly Radar, 3 aprile 2014. URL consultato il 6 agosto 2018.
  14. ^ Types: Annotations, su docs.hhvm.com. URL consultato il 6 agosto 2018.
  15. ^ Other Features: Introduction, su docs.hhvm.com. URL consultato il 6 agosto 2018 (archiviato dall'url originale il 12 maggio 2015).
  16. ^ Unsupported: Introduction, su docs.hhvm.com. URL consultato il 6 agosto 2018 (archiviato dall'url originale il 4 novembre 2015).

Altri progettiModifica

Collegamenti esterniModifica