hhvm + hack > zend + php ?

PHPカンファレンス2014も無事に終わり、参加者も1000人超えとなるなど、大盛況でした。これだけイベントが大きくなるとメインのスタッフの方の負荷も相当なものだったと思います。大変お疲れ様でした。

プレゼンの時にも話をしましたが、今年はPHPNGを始めとして開発が活性化しつつあり、そのきっかけとなったのは、hhvm と HACK の公開だと思います。2010年のHipHop C++トランスレータ(HPHPc)の時は、そういう手法もあるのかなと思っていただけに近かったのですが、今回は少し違う印象を持っており、今後、その存在が一般に広く受け入れられると考えています。hhvmのサイトでプレゼンを見ただけでなく、今回Paulのプレゼンを直接みたり、彼と話をしてみて、その印象が大きくなっているところです。以下、少し考えをまとめてみたいと思います。(といってもあまりまとまっていませんが...)


PHP開発プロセスの課題


Paulのプレゼンでも触れられていましたが、以前のHPHPcアプローチとの違い一つは、PHPアメンバーのSaraなどを雇い入れ、本気でOSSとして開発しているということです。Facebookのような営利企業が、重要な開発インフラを公開するというのは日本ではあまり考えられないような気がしますが、開発の速度・質を重んじる考えが受け入れられているのでしょう。

PHP本体の開発体制は、RFCについて投票に基づき採否を判断する民主主義的なプロセスに移行しています。以前の一部のコア開発者による開発プロセスと比較して、この仕組みの良いところは多様な意見を取り入れることができるところで、実際、他の言語では一般的だったにもかかわらず、PHPでは未サポートだった便利な仕様などが取り入れられていたりします。

一方、投票に基づく判断プロセスは、例えばプロリクエストをメンテナが採否を独断で判断する方式に比べて、客観性には優れるものの、時間を要し、煩雑になることになります。また、少数派であっても反対意見の方が強い傾向があり、有用な機能が受け入れられないこともあります。

Hackで取り入れられている型アノテーションは、PHPにおいてもかなり以前から議論され、実装が開発ブランチに入ったこともありましたが、取り消されています。PHPの型付けがどうあるべきか、という議論には、おそらく結論がないでしょう。PHP自体がこうあるべきであるという思想はあるにしても、その実現方法は一つではないからです。

hhvm+Hack登場の意味

hhvm + Hack の完成度と実用性は既に高く、特に開発力のある大手のサイトが移行に積極的になっているようです。そして、これを成功例として、より広範なWebサイトに採用されるようになるでしょう。

PHPエンジンの高速化は5.3から5.4にかけて劇的に進み、PHP 4.3の時以上に高速化が進んできましたが、昨今はもうやりつくされた感がありました。しかし、今年に入ってから、Zend開発陣も明らかにhhvmに刺激を受けてPHPNGを立ち上げ、大幅な性能向上を目指すなど、開発の動きが大幅に活性化しています。

PythonRubyなどと同様にPHPにおいても複数の処理系が存在する時代が来ているということになりますが、心配なのは互換性となります。その意味で「PHP Language Specification」を定めるというのは大きな前進と言えます。従来は、PHPの出力がundocumentedな部分でおかしくても実質的に仕様となってしまっていたのですが、今後は、そういった曖昧さを排除していく必要があります。PHPがISOやJISになるとは思いませんが、標準化されるというのは企業ユーザにとっても安心感につながるのではないでしょうか?

hhvm+hackにおいてやはり心配となるのは、私企業であるFacebookが自分たちのビジネスに必要なツールとして開発をしているところです。彼らは既にPHPの最新版である5.6にもとづいており、今後のバージョン更新にも追従していくと宣言しており、また、大幅な仕様変更が行われる場合には移行ツールを提供する言っているため、その心配が現実になることは実質的にないと考えています。
 もちろん、Facebookが10年後にまだ現在の活力を保っていられるかはわかりません。Facebook自体で継続が困難となった場合にも、ソースコードが公開せれているOSSのメリットにより、プロプライエタリな環境と比べて、開発資産を有効に活用することができる確率は高いと考えます。

hhvm+Hackに移行すべきか

hhvm+hackでサポートされる機能は、特に大規模開発において有用なものです。PHPは主に小中規模のWebサイトで使用されていると言われてきた時代がありましたが、Facebookのような世界最大級のWebサイトで実用的に運用されていることを考えると、そうした見方は既に過去のものとなりつつあります。

種々の機能は、小中規模のWebサイトでも有用なものです。型アノテーションに加えて、非同期プログラミングについても実用例が多く公開されればその有用さが広く認知されるはずです。Webサーバの実行プロセスモデルとからんだりするのかもしれませんが、楽しみな機能の一つです。また、JITコンパイラについてもHotである(つなりJITコンパイルの対象とする)部分の判定や、最適化など、今後も話題になる部分があると考えます。

今回のプレゼンを準備する際、現在、PHP 7.0に提案されている機能リストを並べてみて、あらためて気づいたのは、その多くがhhvmで既に実現されていることです。これからPHP 7.0のリリースまでに1〜2年を要すると思われますが、hhvmが既にPHPの未来の姿であるとするならば、現時点で開発のプラットフォームを移行するというのもリーズナブルな選択肢と考えられます。