HipHop Virtual Machine ( HHVM ) は、JIT (just-in-time) コンパイルに基づくオープンソースの仮想マシンで、 Hack プログラミング言語の実行エンジンとして機能します。JIT コンパイルの原理を使用することで、Hack コードはまず中間HipHop バイトコード( HHBC ) に変換され、次に動的にx86-64マシン コードに変換され、最適化されてネイティブに実行されます。[ 7 ] [ 8 ] これは、PHP の通常のインタプリタ実行とは対照的です。PHP では、Zend Engine がPHPソース コードをバイト コードの一種として機能するオペ コードに変換し、Zend Engine の仮想CPU上でオペ コードを直接実行します。[ 9 ]
HHVMはMetaによって開発され、プロジェクトのソースコードはGitHubでホストされています。[ 10 ] PHPライセンスとZendライセンスの条件に基づいてライセンスされています。[ 1 ] [ 6 ]
HHVM は、 Facebook が作成したPHP からC++へのトランスパイラであるHipHop for PHP (HPHPc) PHP 実行エンジンの後継として作成されました。 [ 11 ] [ 12 ] HPHPc で得られた経験に基づき、HPHPc で発生した問題を解決することを目指して、Meta は 2010 年初頭に JIT ベースの PHP仮想マシンを作成することを決定しました。HPHPc に関連する問題には、パフォーマンスの向上が頭打ちになること、PHP 言語のすべての機能をサポートできないこと、特定の時間とリソースを消費する開発および展開プロセスから生じる困難などがありました。[ 11 ] 2013 年 第 1 四半期に、facebook.com ウェブサイトの本番バージョンは HPHPc の使用を停止し、HHVM に切り替えました。
JITコンパイルの原則に従い、HHVMはまず実行コードを中間言語である高水準バイトコードHHBCに変換します。HHBCはHHVM専用に作成されたバイトコード形式で、インタプリタとジャストインタイムコンパイラの両方で使用できます。次に、HHVMはHHBCを動的に(「ジャストインタイム」で)x86-64マシンコードに変換し、変換されたバイトコードの動的解析によって最適化します。最後に、x86-64マシンコードを実行します。[ 1 ] [ 11 ] [ 13 ]その結果、HHVMは、 C#言語の共通言語ランタイム(CLR )やJava言語のJava仮想マシン(JVM ) など、他のプログラミング言語で使用される仮想マシンといくつかの類似点があります。
HHVM は HPHPc と比較して多くの利点があります。HHVM は、本番環境と開発環境の両方にデプロイされたときに同じ実行エンジンを使用し、両方の環境タイプで実行エンジンとHPHPdデバッガの統合をサポートします。その結果、HPHPc の場合のように、開発ユーティリティとしてHPHPi (HipHop インタープリタ) を別途維持する必要がなくなりました。HHVM はまた、プログラムを実行するために HPHPc が必要とする長時間のビルドをなくし、HPHPc の場合よりも開発およびデプロイのプロセスをはるかに簡素化します。[ 1 ]create_function()最後に、4.0 より前のバージョンの HHVM は、PHP バージョン 5.4 の公式実装で定義されている PHP 言語全体をほぼ完全にサポートしており、HPHPc では不可能だったおよび構造 のサポートも含まれていますeval()。[ 14 ] [ 15 ]
HHVM 3.0 とともに、[ 16 ] Meta はPHP の派生版であるHackもリリースしました[ 17 ] [ 18 ] 。Hack では、プログラマーは動的型付けと静的型付けの両方を使用できます(段階的型付けとも呼ばれる概念)。また、関数の引数、関数の戻り値、およびクラスのプロパティに型を指定できます。ただし、Hack はステートメントや動的な変数名など、いくつかの PHP 機能を削除しているため、完全な後方互換性はありません。[ 19 ] [ 20 ] [ 21 ] [ 22 ]goto
2017年9月、バージョン3.30がPHPを公式にサポートする最後のHHVMバージョンとなり、今後はHHVMはHackのみをサポートすることが発表されました。[ 23 ] これはPHP 7の相違点と非互換性によるものでした。[ 24 ] 2019年2月にリリースされたHHVM 4.0は、PHPをサポートしない最初のバージョンでした。[ 25 ]
実行環境を提供するプロセス仮想マシンとして、HHVM はライブ型情報を使用してより効率的なネイティブコードを生成する能力を持ち、Web サーバーのスループットの向上とレイテンシの低減につながります。2012 年第 4 四半期には、HHVM 上での facebook.com のソースコード の実行はHPHPc と同等のパフォーマンスを達成し[ 11 ]、2013 年 12 月には HPHPc を約 15% 上回りました。[ 26 ]