HipHop Virtual Machine (HHVM)
開発元Facebook
初版2011年12月9日 (12年前) (2011-12-09)[1]
最新版4.9.0 / 2019年6月11日 (4年前) (2019-06-11)[2]
リポジトリ
github.com/facebook/hhvm
HipHop Virtual Machine(ヒップホップ・バーチャル・マシン、HHVM)は、実行時コンパイラ (JIT) 方式でPHPおよびHackといったプログラミング言語を実行する、仮想機械型の処理系である。HHVMで実行する場合、PHPやHackのコードは、JITコンパイルの過程でまず中間言語のHipHopバイトコード (HHBC) に変換され、さらに動的にx64の機械語へとコンパイル・最適化を行った上で実行される[1][4]。これに対し、公式のPHP実装であるZend Engineでは、PHPのコードを中間表現に変換した上で、中間表現をそのまま実行している[5]。
HHVMはFacebook社が開発しており、Github上にあるソースコードはPHP LicenseとZend License(英語版)のもと公開されている[1][3]。2018年9月12日、Facebookの開発チームはPHPのサポートを段階的に終了することを発表[6][7]し、同年9月18日にはHHVMのPHP 5のサポートを終了すると同時に、以降はHackに注力し、PHP 7の新しい機能も積極的には実装しないことを発表した。[8]2023年10月27日、Paul Bissonetteは公式ブログにてGCCサポート終了決定とHHVMおよびHackの公式リリースを以降行わない旨を表明した。[9] HHVMはFacebook社で使われていた、PHPをC++に変換するタイプの処理系であるHipHop for PHP
概要
JITコンパイルの過程として、HHVMではPHPやHackのコードを、HHBCと呼ばれるバイトコード型の中間言語へと変換する。HHBCはHHVMのために設計されたバイトコードであり、後工程でJITコンパイラとインタープリタのどちらも使用できるようになっている。そして、HHBCはバイトコードのレベルで最適化が行われ、x64の機械語にその場で(JIT)コンパイルされ、CPUが直接実行する[1][10][13]。このような実行過程は、.NET Frameworkでの共通言語ランタイムや、Javaの仮想マシンといった、他の言語での仮想マシンとも共通する部分がある。
HHVMでは、公式のPHP 5.4が含む機能を、create_function()やeval()といった、文字列をコードとして実行する機能までほぼ完全に実装したこと[14][15]、時間のかかるバイナリビルドが不要となりデプロイが簡単となること、開発用と本番用で同じ処理系が使えること(HPHPcの時代には、開発過程で逐一ビルドするのを避けるため、別途でインタープリタを用意していた)など、HPHPcと比べて多くの利点がある。
HHVMの公開に合わせて、「PHPの新たな形態」とも言える、Facebook社が開発したHack言語も同時に動かせるようになっている[16][17]。Hackは動的型付けと静的型付けをあわせ持つ言語であり、関数の引数や返り値、プロパティに型チェックを加えられる(ローカル変数に対しては不可能)。なお、HackではPHPの一部機能に非対応となっている[18][19][20][21]。 ウェブサイトでは、ユーザーはページ表示の速度に敏感であり、サーバの、1秒の半分にも満たない遅れであっても、ユーザーエクスペリエンスに深刻な悪影響を及ぼし、サイトの効果を大きく損ねてしまうことが知られている[22]。 実行環境としてのHHVMを考えると、実行時の型情報を使うことで、事前コンパイル型よりスループット・レイテンシの両面に優れたコードを出力しうるものとなっている。実際、2012年の第4四半期には、HHVMの性能は事前コンパイル型のHPHPcに匹敵するようになり[10]、2013年12月にはさらに15%高速化している[23]。
パフォーマンス