PHP8のJITのインパクト
こんにちは、朝型生活2日目にして、前日の筋トレのせいなのか起き上がることができなかった穂苅(@tomoyanhokarin)です。
次はガンバル!
さて、今回は、
次世代PHP、PHP8のJITによるさらなる高速化
についてお話します。
現在のPHP
現在の最新版のPHPは、PHP7.4.2 です(2020年1月23日リリース)。
プリローディングやFFI(Foreign function interface:他のプログラム言語て定義された関数などを使うためのもの)など
とても多くの機能が利用できる様になりました。
細かくは、このQiitaの記事に詳しく書いてあります。
【PHP7.4】PHP7.4がリリースされたので新機能全部やる
PHP8
次世代PHPであるPHP8は現在のところ正式リリースは未定です。
なにが注目されているのかというと、さらなる高速化のためにJIT(Just In Time)コンパイラが導入され、スクリプトの実行速度が大きく高速化することです。
JIT(ジット)は、Facebookが開発したHHVM(HipHop Virtual Machine)というPHPの実行環境で使われていました。
HHVMの大きな特徴は、JITコンパイラを有している事で何度も実行される部分については実行時にコンパイルされネイティブコードとして実行することができます。
PHPのソースコードをバイトコードに変換しキャッシュ保持を行うのですが、再利用される部分については実行時にネイティブコードに変換して実行されます。それにより、高速化を実現するものです。
通常のPHP5.6やPHP7 ではJITコンパイラは導入されていないため、PHPで書かれたソースコードを一度バイトコードに変換し、バイトコードが実行される形をとります。
しかし、PHP7の登場で、実行速度がかなり向上したことでHHVMは話題に上がらなくなり、
世界No.1シェアのCMSであるWordPressでもサポートはされていませんでした。
自分でも過去に書いていました(^^)
FacebookがHHVMでのPHPサポート終了の方針を発表
PHPというのは、Zend Engineと呼ばれるインタプリタ(ソースコードを読んですぐ実行する)エンジンを使って動いているものです。 そのPHP やHack 言語のソースコードを JIT コンパイルするための Virtual Machine です。
通常のPHPで行うようにZend Engine で逐一実行する代わりに、 JIT コンパイルして実行させることで高速化させる仕組みをとっています。
JITコンパイルとは、JIT(Just In Time)、プログラムの実行時にあらかじめ用意された(実行環境に依存しない汎用的な)中間コードをプログラムの実行時点でプロセッサが実行可能な機械語(ネイティブコード)にコンパイルすることを指します。
なぜJITなのか?
JITが速いのはわかったけど、なぜそこまでしていままで導入してこなかったものを導入する方向になったのでしょうか?
理由としては、PHPサイトのJITのページに3つ書いてありました。
- 他のパフォーマンス向上はやり尽くした。JITの導入以外ではさらなるパフォーマンスアップは見込めないため
- JITの使用でWeb以外の分野(CPU集約型のシステム)での利用が増えるため
- C言語の代わりにPHPで組み込み関数を開発できるようになるため、新たなイノベーションが開かれる
ということで、PHP8は従来の縛りを破壊するだけのインパクトを秘めた言語になりそうです!
私、穂苅智哉の情報は、以下のFacebookページTwitterアカウントをごらんください!
※Facebookの友達申請をいただける方は、お手数ですがメッセージを添えていただけるとありがたいです(^^)
※Twitterのフォローはお気軽にお願いします(*^^*)
Facebook
▶https://www.facebook.com/tomoya.hokari.79
Twitter
▶https://twitter.com/tomoyanhokarin