2018年6月21日
HHVMの今後
(2017-09-18)by Max Wang
本記事は、原著者の許諾のもとに翻訳・掲載しております。
2017年1月、PHPはPHP5のアクティブサポート終了を 正式に発表 しました。
私たちHHVMチームはPHPがPHP7で打ち出している方向を歓迎しており、この言語とランタイムを今日の位置に推し進める役割を担ったことを光栄に思っています。PHPコミュニティがPHP5に別れを告げようとしている今、HHVMチームも同じ決断を下しました。
HHVMの次のLTSリリースである3.24は、 2018年1月 にテスト公開され、その後1年間サポートされます。また、3.24は PHP5をサポートする最後のHHVMリリース となります。これは、2018年末にPHP5のセキュリティサポートも終了するPHP自体のタイムラインと同調するものです。HHVMチームはPHP5固有の特殊な挙動に対する全てのサポートを即座に中止するわけではありませんが、それらは3.24のテスト公開後はいつでも中止となる可能性があり、ext_zend_compatのような互換性機能はゆくゆくは旧式となり、廃止されます。HHVMユーザの方はご注意ください。
しかし、PHP7がPHP5から大幅に転換したことは明らかです。いくつもの挙動が変わりましたが、その中には後方互換性のないものもあります。一方Facebookでは、私たちはもう何年も、ほとんどHackを動かすためだけにHHVMを使っています。Hackは、PHP7も修正したPHP5の問題の多く(とPHP7が修正していない他の問題)に対応済みですが、Hackの取った解決策が必ずしもPHP7の解決策に合うとは限りません。
PHP7はPHP5から舵を切っており、それと同様にHHVMチームは、改めてHackに重点を置きたいと考えています。したがって HHVMは、PHP7を対象にすることは目指しません。 HHVMチームは、HackをPHPに由来することに縛られずWeb開発の素晴らしい言語とする見通しをつけています。チームは、一般性やドキュメント整備、互換性の点で劣ったPHP7ランタイムとしてHHVMを位置づけることで、私たち自身とユーザに対しひどい仕打ちをしていたようです。
チームは、HHVMとHackについて、開発者エクスペリエンスとパフォーマンスをもっと良くしたいと考えています。多くの機能やライブラリを開発中であり、パフォーマンスの向上も見込んでいますので、以下で皆さんにご紹介していきたいと思います。
Hackトゥ・ザ・フューチャー
チームは、HHVMにおけるHackのサポートを向上させるための現実的な目標を設定しました。トップレベルの目標3つは以下のとおりです。
- オープンソースに再投資する。 HHVMの主要外部ユーザに必要なサポートを提供しようとする時でさえ、エンジニアにコミュニティと直接協力してそのニーズをくみながら開発させることは高いハードルです。私たちはその体制を整え始めましたので、今後数カ月のうちに、以下に概要を述べる方向において明らかな改善を見ていただけるようになるはずです。
- より明確な見通しを立て、よりオープンなコミュニケーションを取る。 ユーザに私たちの計画、目標、優先事項を明確に理解していただき、ユーザが製品開発に際して最善の技術的決断を下せるようにしたいと考えています。公開予定の機能や言語の変更点について、開発工程のもっと早い段階でHackユーザと対話することを目指します。
- 焦点をぶらさず、広げすぎない。 PHP7とHackの両方をサポートしようとすれば、その両方で望ましくない妥協が必要となるでしょう。私たちは、HackをPHPの設計の古く分かりにくい部分全てには対応しなくても素晴らしい言語であるようにするため、PHPからさらに離れるつもりです。Hackのパフォーマンスをもっと向上させ、最終的にはHackを最高の現行Webアプリケーション言語にするための、自由が必要なのです。
これらの目標を補完するため、避けるべき方向を1つ明示的に定めました。
- 純粋なPHP7コードに関してユーザに好まれるランタイムとなることは目指さない。 HackとPHP7が当面かなりの程度オーバーラップすることは予想され、多くのユーザは短期間、両者のランタイムを互換的に使うことができるかもしれません。ですが、PHP7の最新バージョンの新しい挙動を使いたい人にとって、HHVMは最適なプラットフォームとはならなくなるでしょう。
近々予定している変更点
以上の目標は、実際問題としてHHVMユーザにどのような影響を与えるでしょうか。
皮肉にも、 PHP7との互換性は短期的には高まる ことになります。HHVMチームのオープンソースへの取り組みは今後Hackに集中しますが、実のところ、HackはPHPのエコシステム上に設計・構築された言語です。”純粋なHack”で意義のあるアプリケーションを構築するためには、開発者は主要なPHPフレームワークに頼るか、一から独自のものを作る必要があります。後者は十分なリソースを持つ中規模企業なら可能かもしれませんが、大抵の潜在的Hackユーザにとっては現在のところ非現実的な選択肢です。この状況を変えたいのです。
これらの目標に向けた取り組みとして、私たちはComposerやPHPUnitといった 主要なPHPツールの現行バージョンとHHVMの互換性を持たせる 作業に着手しており、HackコミュニティやHHVMの主要ユーザのニーズを満たす方向でこの作業が進んでいくと予想しています。ですが、これは互換性のための互換性ではありません。ニーズに基づいて機能やバグ互換性を入念に選び、特定のPHP 7.xバージョンは対象にしないつもりです。最終的な目標は、Hackにコアフレームワークの独自のエコシステムを持たせることです。それを構築するのがHHVMチームであれ外部の方であれ、”純粋なHack”のプロジェクトを書くことを”純粋なPHP”で書くことと同じくらい容易にし、それでいてパフォーマンスと開発者エクスペリエンスの点で上回るようなエコシステムです。また、 Hackに特化して設計されたツールやライブラリとして、以下のようなものを開発中 です。
- The Hack Standard Library :dict型、keyset型、vec型をフルサポートする、一貫した型安全な標準ライブラリ。安定したv1.0をHHVM 3.23の前にリリースする見込み(訳注:現在はリリース済み)です。
- TypeAssert :型付けされていないデータ(例:データベース結果、JSONデータ)を完全に型付けされたデータに安全に変換する。
- Hack Codegen :
__call()
のようなマジックメソッドに対する、型安全な代替策。 - XHP-Lib v2:Hack型チェッカーのフルサポート付き。
- オートローダ :クラス、型エイリアス、関数、定数のオートロードのサポート付き。
- 抽象構文木(AST)ベースライブラリ:リンティングと自動コード編集のツール付き。初期バージョンを今後数週間以内にリリースする見込み(訳注:現在はリリース済み)です。
Hackユーザのサポートは現在、一部PHPライブラリのサポートをまだ伴っていますが、3.24リリース以降はそのようなライブラリ以外のPHPソフトウェアは対象にしません。
こうした様々な取り組みは、Hack言語の変更に合わせて進めていくつもりです。私たちは、PHPやフレームワーク依存から脱却することで、Hack言語のパフォーマンスと設計を大幅に改善する機会を広げられるでしょう。HHVMチームが現在取り組んでいる事項を以下にいくつかご紹介します。
- Hack配列を完成させる。 明示的に特化された配列風のデータ構造体として、
vec[]
、dict[]
、keyset[]
を開発しました。これによって、型チェックが容易になり、パフォーマンス向上の機会が広がります。この構造体は数カ月にわたるランタイムの実験を経ており、間もなく正式リリースの予定です。 - デストラクタを廃止する。 オブジェクト破棄を必ず行うには、PHPの非スカラ値の正確な参照カウントが必要となります。この要件は長い間、最適化されたJITコンパイル済みコードにおいてかなりのパフォーマンスボトルネックとなってきましたし、今後もそれは同様です。その代わりにガベージコレクションを使うことで、相当のパフォーマンス改善が見込まれ、デストラクタの挙動はtry/finallyの組み合わせや他の新しい言語構造体で近似できるでしょう。
- 参照を廃止する。 PHPの参照は普通と異なるセマンティクスを持っており、関数が呼び出し元での指示なしにパラメータのバインディングを指定します。その上、参照性は関数インターフェースの一部ではなく、一部あるいは全てのパラメータにおいて、親メソッドが異なる参照バインディングによって派生クラス内でオーバーライドされる可能性があります。これは紛らわしいと同時にパフォーマンスを低下させるものであり、より規則正しい参照風の構造体(例:in/out関数パラメータ)の方が有用かつ効率的でしょう。
以上のような計画を構想し進めており、HHVMチームはこうした起こり得る変化についてユーザに伝えることを優先していきます。Hack言語に関してもっと積極的に工程を繰り返すには、それが不可欠の前提条件だと考えています。私たちは、ユーザが各リリースにうまく対処し未来の変更に向けて準備するのに役立つよう、適切な工程で進めて いかなくてはいけません。
チームはまた、主要ユーザの多くから提起された長期にわたる問題にも取り組んでいきます。HHVMの設定に関してより役立つより充実したドキュメントを書くこと、リリース間の変更点をより明確に伝えること、クロスプラットフォームの開発やテストを改善することなど、全てはHackの開発者エクスペリエンス向上を目指しています。
皆さんがHHVMを使っていて、HHVMチームの方向について感じた疑問や懸念、意気込みを共有されたい場合は、Facebookの HHVM General グループまでお知らせください。私たちは今後数カ月にわたってこの取り組みを強化していく中、皆さんの声に耳を傾けるために最善を尽くし、動き出したら情報をしっかりとお伝えしていきます。
株式会社リクルート プロダクト統括本部 プロダクト開発統括室 グループマネジャー 株式会社ニジボックス デベロップメント室 室長 Node.js 日本ユーザーグループ代表
- Twitter: @yosuke_furukawa
- Github: yosuke-furukawa