17
HPHPは約束の地なのか 小泉 守義 < [email protected] > HipHop for PHP

HPHPは約束の地なのか

Embed Size (px)

Citation preview

Page 1: HPHPは約束の地なのか

HPHPは約束の地なのか小泉 守義 <[email protected]>

HipHop for PHP

Page 2: HPHPは約束の地なのか

自己紹介

六本木のある会社で働いていました

ソーシャルゲームは作っていません

Python、C++、Rubyを書いて生計を立てています

PHP

Page 3: HPHPは約束の地なのか

HipHop for PHP (HPHP)

2010年2月公開

名前がださい

PHPのスクリプトをC++のコードに変換する

Zendのランタイムに依存しない

独自ランタイムを装備

Page 4: HPHPは約束の地なのか

HPHPの構造

パーサ

アナライザ

コードジェネレータ

ランタイム

ビルトイン (Web) サーバ

Page 5: HPHPは約束の地なのか

HPHPの構造 - パーサFlex / Bisonベース

ASTを構築

ZendEngineではThree-Address Codeを直接生成していた

Page 6: HPHPは約束の地なのか

HPHPの構造 - アナライザ最適化

dead code eliminationなど

型推論

constructツリーを生成

ASTというよりはCST

コード生成に特化したもの

Page 7: HPHPは約束の地なのか

HPHPの構造 - コードジェネレータ以下のコードを生成

PHP

C++

実はアナライザとコードジェネレータはちゃんと分離されていない

いけてない

Page 8: HPHPは約束の地なのか

HPHPの構造 - ランタイムZendEngineとは全く異なる構造

大まかな概念は同一

struct zval_value → HPHP::Variant

Thread / Fiberなどをサポート

ビルトインサーバ

Multitasking

Page 9: HPHPは約束の地なのか

HPHPの構造 - ビルトインサーバFaceBook改造版libeventで実装

以下の機能を提供

HTTPサーバ

XBOX (cross-box) サーバ

RPC (satellite) サーバ

他にもあるかもしれないがちゃんと調べてないです

Page 10: HPHPは約束の地なのか

Multitasking

PHPの夢

以下の機構を提供

XBOX

Pagelet

call_user_func_async

Page 11: HPHPは約束の地なのか

XBOX

なんかよくわからんプロトコルで非同期RPCする

他ホストもサポート

xbox_send_message($msg, $ret, $timeout_ms, $host)

xbox_post_message(msg, $host)

Page 12: HPHPは約束の地なのか

Pagelet

ローカルホストへのHTTPリクエストをzero I/Oで再現

$task = pagelet_server_task_start($url, $headers, $post_data)

pagelet_server_task_result($task, $headers, $code)

Page 13: HPHPは約束の地なのか

call_user_func_async

Fiberによって直接ランタイム上で並行処理を実現

安定しなかったのか外部関数を呼び出すタイミングでブロックしたりするのがまずかったのか知らんがdeprecatedになっている

Page 14: HPHPは約束の地なのか

HHVMについて

vmブランチ

HPHPランタイムの上にスタックマシンを構築

tracing JITの実装 (TBD)

Page 15: HPHPは約束の地なのか

ソースコード総評コードの品質は低くない。

やたらC++のext以下のライブラリに頼ったりとかTLSとかC++11の新機能使ったりとかかなりチャレンジングなことをしている。

そのためコンパイルできるGCCのバージョンが限定されていたりとかいろいろ面倒くさい。

CMakeの定義ファイルがクソなためにビルドの障壁が環境によっては異常に高い。

Page 16: HPHPは約束の地なのか

HPHPは約束の地なのか

思ったより構造はシンプルで問題解決がしやすそうではある

VMじゃないバージョンはプロダクションで使ってみてもいいかもね

でも誰も助けてくれないけどね!

Page 17: HPHPは約束の地なのか