PHP 8でのJIT採用が可決、賛成50反対2。PHP 7.4への試験的採用は否決
現在開発中のPHP 8にJITコンパイラを組み込むべきかどうかを決定する投票が3月28日に締め切りを迎え、賛成が50票、反対が2票と圧倒的多数で可決されたことが、発表されました。
JITコンパイラはプログラムの実行時にコンパイルを行い、ネイティブコードを生成して実行するというもの。事前にコンパイル作業が不要なためプログラムを手軽に実行できるうえ、ネイティブコードによる高速な実行が期待できることが特徴です。
投票に参加したのはPHPの開発に貢献しているプログラマなど。同時にPHP 7.4へのJITコンパイラの実験的組み込みについても投票が行われましたが、こちらは賛成18、反対36の結果となり否決されました。
PHPは2015年12月、PHP 7へと10年ぶりにバージョンアップした際、PHP 5と比較して2倍以上の大幅な性能向上を果たしています。
参考:「PHP 7」登場。10年ぶりのメジャーバージョンアップで実行速度はPHP 5の2倍以上に、PHPの生みの親が語る。PHPカンファレンス2015(前編)
この性能向上はPHPのインタプリタを改善することで達成されており、まだJITコンパイラは採用されていませんでした。PHP 8でJITコンパイラが実現すれば、さらに大幅な性能向上が期待できます。
これ以上のPHPの性能向上はJITコンパイラなしにはできない
今年の1月28日付けで公開されたJITコンパイラの実装を提案するドキュメント「PHP RFC: JIT」では、下記のようにPHPのこれ以上の性能向上はJITコンパイラなしではできないところまできていることなど、JITコンパイラをPHPで採用すべき3つの理由を挙げています。
First, we believe we've reached the extent of our ability to improve PHP's performance using other optimization strategies. In other words - we can't further improve the performance of PHP unless we use JIT.
第一に、私たちは従来とは異なる最適化手法を用いてPHPの性能向上を行うところまでやってきた、という確信に至った。言い換えるならば、JITなしにこれ以上のPHPの性能向上はできないということだ。
Secondly - using JIT may open the door for PHP being more frequently used in other, non-Web, CPU-intensive scenarios - where the performance benefits will actually be very substantial - and for which PHP is probably not even being considered today.
第二に、JITを使うことによって、PHPにはWeb以外のCPUインテンシブな処理にも使われる可能性が開かれるだろう。これは性能向上の利点によるところがかなり大きく、それは現在のPHPの用途では考えられていないようなものだろう。
Lastly - making JIT available can provide us (with additional efforts) with the ability to develop built-in functions in PHP, instead of (or in addition to) C - without suffering the huge performance penalty that would be associated with such a strategy in today's, non-JITted engine. This, in turn, can open the door to faster innovation - and also more secure implementations, that would be less susceptible to memory management, overflows and similar issues associated with C-based development.
最後に、JITを用いることで現行の非JITにまつわる大幅な性能低下を被ることなく、Cの代わりにPHPを用いてを組み込み関数を開発することが(追加の努力で)可能になるだろう。これはつまり、メモリ管理やオーバーフローといったCベースの開発の影響を受けにくくなるわけで、より速いイノベーションの可能性と、よりセキュアな実装につながるだろう。
LuaJITで開発されたDynAsmを採用
PHP 8で組み込まれる見通しのJITコンパイラは、Lua言語のJITコンパイラ「LuaJIT」のプロジェクトで開発されたDynAsmが採用される予定。これは非常に軽量なツールだと説明されています。
JITコンパイラをPHPに組み込んでも、そのための新たな中間コードなどができるわけではなく、PHPのバイトコードからネイティブコードを生成する仕組みを採用するとのこと。JITコンパイラが実現されれば既存のプログラムもそのまま性能向上などの恩恵を受けることになるでしょう。
あわせて読みたい
[速報]Google、新サービス「Anthos」公開。Kubernetesをベースにオンプレミスやマルチクラウドを実現するプラットフォーム。Google Cloud Next '19
≪前の記事
Kubernetesを軸に再定義されつつある、新しい「クラウド対応」の意味とは[PR]