# HHVM

La Macchina Virtuale HipHop (HipHop 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. Ciò avviene in contrasto con l'esecuzione via interprete solita del PHP, nella quale lo Zend Engine trasforma il codice sorgente PHP in opcode che, utilizzati come una forma di bytecode, vengono eseguiti direttamente dalla CPU virtuale dello Zend Engine.
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.

## Caratteristiche

HHVM è stato creato come il successore del motore di esecuzione di PHP HipHop for PHP (HPHPc), un transpiler PHP-to-C++ creato anch'esso da Facebook. 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. 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. 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. 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.
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. 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.

## Performance

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 e nel dicembre 2013 le performance della HHVM sono migliorate fino a superare del 15% circa quelle della HPHPc.