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