去る5/30にPHPカンファレンス関西2015で基調講演をさせていただきました。今回は長い枠だったのもあって資料準備にかなりの時間をかけました。その甲斐あってか、好評だったようで何よりです。発表資料は以下になります。
お伝えし忘れたことや誤解を招いた点があったかもしれませんので、4点ほど補足します。
その通りです。プレゼンでも紹介したzvalのポインタ参照が一段浅くなっていることや、内部APIが変更された影響があるため、PHP5用のエクステンションをPHP7でビルドしようとしても、そもそもコンパイルすら通らない可能性が高いです。xdebugなど内部構造と密接に関わるエクステンションほど対応に時間がかかるでしょう。
一方で、PHP本体に同梱のエクステンションは既にほぼ動作しています。まだ不穏なエクステンションも残っている気がしますが、beta1が出る頃には落ち着いてくれると期待しています。
また、外部でメンテされているものについても、mamcachedなど有名どころのエクステンションには随分前からPull Requestが出ていたりもします。PHP7リリースまでにはおおむね何とかなっているのではないでしょうか。
ちなみに、各エクステンションの対応状況をまとめているプロジェクトも存在します。
まだまだ空欄が目立つ状況ですが、少なくともPHP同梱のエクステンションについては対応が進んでいることが見て取れるかと思います。
構文解釈の処理だけ取り出すと遅くなっている可能性はあると思います。しかし、エンジン全体の改善に比べると十分無視できる程度の変化だと思いますし、万一遅いとしてもOPcacheでopcodeキャッシュすればその影響は実質ゼロになりますから、速度面での懸念はないと考えていいでしょう。
PHP7でのデータ構造変更では、32bit/64bitどちらの環境でもPHP5のときのような変な隙間ができたりしないよう考えられています。また、高速化チームによるベンチマークテストは32bit/64bit両方で行われており、どちらもほぼ同レベルの高速化を達成しています。
mysqlエクステンションは本体に同梱されなくなっただけで、エクステンション自体は残るはずです。既にエクステンションのPHP7対応は終わっているので、どうしてもという場合は自前ビルドすれば各関数が動作するようになります。とはいえ、今後メンテが続くかどうかも未知数ですから、可能なら使わないようにPHPソースコードを書き換えるべきでしょう。
PHP7で追加・変更される機能はかなり多いので、限られた時間では紹介しきれませんでした。直前のエントリ「PHP7で変わること」では多くの変更点を紹介しましたが、その中であと5分あれば紹介したかった機能を紹介します。
「もっと新機能の話が聞きたかった」という方もいらっしゃったと思いますが、当初のプレゼン資料では今より内部構造のマニアックな話を盛り込んでいました。時間的に厳しかったので削ってしまいましたが、本当はこんなことが話したかった!ということを箇条書きにしておきます。
このあたりも機会があれば発表したいものです。
僕としては「パフォーマンスチューニングって面白いよね」ということが少しでも伝わればいいなと考えていました。この機会に内部構造に興味を持つような人が増えてくれるといいと思っています。パフォーマンスチューニングって色々な知見が詰まっているので、今回のPHP7はとても良い教材だと思うんですよね。
僕はこれほど遠くのカンファレンスに参加するのは初めてでした。また、基調講演ということで45分の枠を頂きましたが、これほど長い発表も初めてのことでした。今回このような機会をいただき、新しい経験をさせてもらったことにまずは感謝いたします。
また、発表者の方々からも刺激をもらいました。4トラック並列だったので見られなかったセッションも多かったのですが、いずれ動画も公開されるはずですから楽しみに待つことにします。いままでアイコンしか知らなかった方々や、お久しぶりの方々とお会いできたのも良かったです。
そして何より運営スタッフの皆様、本当にお疲れさまでした。とても楽しいイベントでした。来年も期待してます!