Upload
moriyoshi-koizumi
View
2.353
Download
2
Embed Size (px)
Citation preview
自己紹介
六本木のある会社で働いていました
ソーシャルゲームは作っていません
Python、C++、Rubyを書いて生計を立てています
PHP
HipHop for PHP (HPHP)
2010年2月公開
名前がださい
PHPのスクリプトをC++のコードに変換する
Zendのランタイムに依存しない
独自ランタイムを装備
HPHPの構造
パーサ
アナライザ
コードジェネレータ
ランタイム
ビルトイン (Web) サーバ
HPHPの構造 - パーサFlex / Bisonベース
ASTを構築
ZendEngineではThree-Address Codeを直接生成していた
HPHPの構造 - アナライザ最適化
dead code eliminationなど
型推論
constructツリーを生成
ASTというよりはCST
コード生成に特化したもの
HPHPの構造 - コードジェネレータ以下のコードを生成
PHP
C++
実はアナライザとコードジェネレータはちゃんと分離されていない
いけてない
HPHPの構造 - ランタイムZendEngineとは全く異なる構造
大まかな概念は同一
struct zval_value → HPHP::Variant
Thread / Fiberなどをサポート
ビルトインサーバ
Multitasking
HPHPの構造 - ビルトインサーバFaceBook改造版libeventで実装
以下の機能を提供
HTTPサーバ
XBOX (cross-box) サーバ
RPC (satellite) サーバ
他にもあるかもしれないがちゃんと調べてないです
Multitasking
PHPの夢
以下の機構を提供
XBOX
Pagelet
call_user_func_async
XBOX
なんかよくわからんプロトコルで非同期RPCする
他ホストもサポート
xbox_send_message($msg, $ret, $timeout_ms, $host)
xbox_post_message(msg, $host)
Pagelet
ローカルホストへのHTTPリクエストをzero I/Oで再現
$task = pagelet_server_task_start($url, $headers, $post_data)
pagelet_server_task_result($task, $headers, $code)
call_user_func_async
Fiberによって直接ランタイム上で並行処理を実現
安定しなかったのか外部関数を呼び出すタイミングでブロックしたりするのがまずかったのか知らんがdeprecatedになっている
HHVMについて
vmブランチ
HPHPランタイムの上にスタックマシンを構築
tracing JITの実装 (TBD)
ソースコード総評コードの品質は低くない。
やたらC++のext以下のライブラリに頼ったりとかTLSとかC++11の新機能使ったりとかかなりチャレンジングなことをしている。
そのためコンパイルできるGCCのバージョンが限定されていたりとかいろいろ面倒くさい。
CMakeの定義ファイルがクソなためにビルドの障壁が環境によっては異常に高い。
HPHPは約束の地なのか
思ったより構造はシンプルで問題解決がしやすそうではある
VMじゃないバージョンはプロダクションで使ってみてもいいかもね
でも誰も助けてくれないけどね!