HHVM

HHVM
開発者メタプラットフォーム
初回リリース2011年12月9日[ 1 ] (2011年12月9日
安定版リリース
3.15.0 [ 2 ] ウィキデータで編集する / 2016年9月28日 (2016年9月28日
リポジトリ
書かれたPHPC ++[ 3 ] OCaml [ 4 ] [ a ] Rust [ 5 ]
ライセンスPHPライセンスZendライセンス[ 6 ]
Webサイトhhvm.comWikidataで編集する

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 ] 。

参照

注記

  1. ^ HipHop 仮想マシンにバンドルされているHackチェック ( hh_serverhh_client ) およびコードフォーマット ( hh_format )コマンドラインユーティリティデーモンのみがOCamlで書かれています。

参考文献

  1. ^ a b c d Jason Evans (2011年12月9日). 「The HipHop Virtual Machine」 . Meta Platforms . 2014年8月2日閲覧
  2. ^ 「リリース 3.15.0」 2016年9月28日. 2018年3月13日閲覧
  3. ^ 「CentOS 7.xでのHHVMのビルドとインストール」 . github.com . Meta Platforms . 2015年5月26日. 2015年6月12日閲覧
  4. ^ 「Hack型チェッカーの構築」 . github.com . Meta. 2014年9月10日. 2015年6月12日閲覧
  5. ^ 「FacebookのHHVM、Rustの書き換えを検討開始 - Phoronix」2019年8月29日閲覧。
  6. ^ a b "facebook/hhvm: ライセンス" . github.com . Facebook, Inc. 2014年8月2日閲覧
  7. ^ Ottoni, Guilherme (2018年6月20日). 「HHVM JIT: PHPとHack向けのプロファイルガイド付きリージョンベースコンパイラ」 .第39回ACM SIGPLANプログラミング言語設計・実装会議 (PLDI) の議事録. ACM . pp.  151– 165.
  8. ^ "facebook/hhvm" . github.com . Meta Platforms . 2014年8月2日閲覧
  9. ^ Kaushik Pal (2014年4月28日). 「PHP and Zend Engine Internals」 . phpbuilder.com . 2014年9月15日時点のオリジナルよりアーカイブ2014年9月23日閲覧。
  10. ^ GitHub上のHHVMソースコード
  11. ^ a b c d Drew Paroski (2012年11月29日). 「HHVMによるPHPベース開発の高速化」 Meta Platforms . 2014年8月2日閲覧
  12. ^ 「GitHubによるHPHPcサポートの削除に関するお知らせ」 . github.com . Meta Platforms . 2013年2月19日. 2013年5月24日閲覧
  13. ^ "HipHop Bytecode v1 リビジョン 18" . github.com . Meta Platforms . 2014年7月31日. 2013年5月24日閲覧
  14. ^ "facebook/hhvm: PHP 5.4エンジンへのアップグレードについて" . github.com . 2013年5月. 2014年8月2日閲覧
  15. ^ "facebook/hhvm: ホーム" . github.com .メタプラットフォーム. 2014年5月8日. 2014年8月2日閲覧
  16. ^ Paul Tarjan (2014年3月28日). 「HHVM 3.0.0」 . Facebook . 2022年12月26日閲覧
  17. ^ Cade Metz (2014年3月20日). 「Facebook、未来のプログラミング言語『Hack』を発表」 . Wired . 2014年4月15日閲覧
  18. ^ Julien Verlaguet、Alok Menghrajani (2014年4月). 「Hack: HHVM向けの新しいプログラミング言語」 . code.facebook.com . Facebook . 2014年3月23日閲覧
  19. ^ Josh Lockhart (2014年4月3日). 「Facebookのハック、HHVM、そしてPHPの未来」 . O'Reilly Media . 2014年8月2日閲覧
  20. ^ 「HackとHHVM:型注釈(Hackマニュアル)」 . docs.hhvm.com . 2014年3月25日閲覧
  21. ^ 「HackとHHVM:型推論(Hackマニュアル)」 . docs.hhvm.com . 2014年3月26日時点のオリジナルよりアーカイブ2014年3月25日閲覧。
  22. ^ 「HackとHHVM:HackでサポートされていないPHP機能(Hackマニュアル)」 . docs.hhvm.com . 2015年11月4日時点のオリジナルよりアーカイブ。 2014年4月2日閲覧
  23. ^ Fred Emmott (2018年9月12日). 「PHPサポート終了とHackの未来」 . 2022年12月26日閲覧
  24. ^ Krill, Paul (2017年9月20日). 「PHPはもう古い!FacebookのHHVMエンジンがHackに切り替え」 InfoWorld . 2019年2月6日閲覧
  25. ^ Fred Emmott (2019年2月11日). “HHVM 4.0.0” . 2022年12月26日閲覧
  26. ^ 「私たちは98.5%(そして残りの16%)」 hhvm.com 2013年12月19日2014年8月2日閲覧