2010年9月4日土曜日

hiphop for PHPで頑張れない

出稼ぎ先の事情で、hiphopを試そうとしました。
facebook御謹製の、php/C++トランスレータです。
http://github.com/facebook/hiphop-php

結論から言うと、トランスレートまでは何とかテストできたのですが、
それのコンパイルで挫折しました。

  • まずは、facebookとしてはcentosを推奨しており、筆者の環境(ubuntu lucid(10.04))で動かすには意外と骨が折れたこと。cmakeとやらが全然通らず、仕方がないのでCMakefile.txtを修正したりとか。
  • 64ビットlinux専用。この為に、64bit ubuntuに入れ直した。
  • PHPのinclude_pathを参照しないので、フレームワーク群を多用しているソースは、正常に変換できないこと。
  • コンパイル時点で解決できない外部includeは、一応はincludeのままで残るが、挙動としてはhtmlの表示しか使えなさそう。
  • 「変換」したcppソースのbuildには、hiphop自身のincludeファイル群を必要とすること。
  • クラス群の「変換」では、クラス変数やクラス関数群に全てユニークIDを振っており、どうやらそれは「変換」したソースにも現れる。
  • クラスメソッド呼び出しは、クラスの問い合わせ関数に、メソッド名を指定している。何もかもcall_user_funcを使う感じ。オーバーヘッドが凄そう。


総合して、hiphopに向いた書き方が必要で、赤の他人が別のプロジェクトに適用するにはまだ辛いかなと。

特に、ユニークIDと問い合わせ関数はどうかなと思った。これは変換とは言えない。「展開」ですね。

native C++に変換しながらも、PHPより2倍、としか言えてないところも、
オーバーヘッドが大きいことに起因しそうです。

これだったら、最速と名高いlua(http://www.lua.org/)に「展開」する方が現実的か?とも思ったりします。