20 年の歴史を持つベテラン Web プログラミング言語である PHP は、早ければ 10 月末に新しいバージョンの PHP 7 をリリースします。これは 10 年ぶりの大幅な改訂であり、最大の特徴はパフォーマンスの大幅な向上です。これは、以前のバージョンの PHP 5 よりも高速です。PHP の父である Rasmus Lerdorf 氏によると、これは HHVM 仮想マシンでの PHP プログラムのパフォーマンスよりもさらに高速であると述べています。
HHVM は Facebook の Web サイトの特性に合わせてカスタマイズされた PHP 最適化メカニズムであり、どの Web サイトにも適用できるわけではありません。しかし、Rasmus Lerdorf氏は、新バージョンの目標の1つは、開発フレームワークDrupalやオープンソースの電子商取引システムOpencartを使用している場合でも、Webサイト開発者がHHVMテクノロジーを使用しているのと同じパフォーマンスを発揮できるようにすることだと述べた。新バージョンのリリース前夜、彼は機会を利用して台湾を訪れ、PHPConf 台湾年次会議に出席し、PHP 7 のパフォーマンスの飛躍的進歩の鍵を共有しました。
過去 20 年間に多くの改訂と無数の最適化を経てきた成熟した言語の場合、パフォーマンスを 2 倍にするブレークスルーを見つけるのは簡単ではなく、通常の新しいプロジェクトとは異なり、多くのことを見つけるのは簡単だと Rasmus Lerdorf 氏は率直に述べました。新しいバージョンの PHP では、プログラムの一部を変更しただけではこのような結果は得られませんでした。逆にPHP 7は細かな最適化と性能の蓄積を重ねた結果、HHVMと比べても遜色ない実行性能を持っています。Rasmus Lerdorf と PHP コア貢献チームは、プログラムの実行時に移動されるメモリ ビット数を削減するために多大な努力を費やし、それによって実行パフォーマンスを高速化しました。例えば、PHP の変数を格納するデータ構造 zval は 24 ビットから 16 ビットに削減され、Hashtable は 72 ビットから 56 ビットに削減され、パフォーマンスに改善の余地があるかどうかが検討されます。
メモリ使用量の削減に加えて、Rasmus Lerdorf 氏は、CPU のキャッシュ ラインの動作原理も調べて、プログラム コードが CPU とどのように相互作用するか、新しい CPU アーキテクチャでコンパイラがプログラム コードをコンパイルする方法、その他の詳細を理解しました。 PHP 7 のプログラム コード。最新の CPU のアーキテクチャに準拠しています。各プロジェクトの最適化によるパフォーマンスへの寄与は 0.5% 未満ですが、最適化プロジェクトの数が多かったり、特定の改善された関数がアプリケーションによって繰り返し呼び出されたりするため、修正の全体的な効果はこれほど大きな改善になる可能性があります。
HHVM に触発されて、パフォーマンスと機能性の両方を備えた PHP を構築することにしました
PHP の動作を最適化するために、Facebook は JIT コンパイルを使用して仮想マシン HHVM を作成しました。 HHVM は高速な実行パフォーマンスを備えていますが、特定の目的に最適化された設計は少数の開発者しか満足できません。それどころか、Rasmus Lerdorf 氏は、PHP のパフォーマンスを向上させるだけでなく、ハイエンド ユーザーとアマチュア ユーザーのニーズにも同時に応えたいと考えており、PHP 7 をパフォーマンスと一般的な機能の両方を備えたプログラミング言語にしたいと考えています。ただし、市場で少数の人々のニーズを満たすプログラミング言語を開発することは難しくありません。しかし、PHP プロジェクトは多くのターゲットを対象としており、アマチュアユーザーとプロの開発者の両方のニーズを満たす必要があります。すべてをカバーするのは困難です。常に一部のニーズが存在するためです。グループのニーズを満たすことはできません。「これは、水道管で広い範囲に水を噴霧するようなものです。全員の服は多少濡れますが、完全に濡れている人の服はありません。」ラスムス・レルドルフ氏は語った。
外部フレームワークを使用しない場合の PHP のコンピューティング パフォーマンスは非常に優れていますが、外部フレームワークの影響により、本来は数秒で数千の Web ページ リクエストを処理できる PHP のパフォーマンスが大幅に低下し、数十のリクエストを処理します。 Rasmus Lerdorf 氏は、HHVM が登場する前、ユーザーは PHP のパフォーマンス要件よりも、PHP が Web 開発の困難さを軽減できるかどうかに関心があり、これらのフレームワークによって開発者の作業が容易になると述べました。しかし、Facebook が HHVM を発表した後、PHP のパフォーマンスを重視する多くのユーザーを魅了したため、Rasmus Lerdorf 氏は、多くのユーザーがパフォーマンスを必要としていることに気づきました。彼は、HHVM の JIT アーキテクチャを PHP と統合する方法について考え始めました。
しかし、Rasmus Lerdorf 氏は、PHP と HHVM はアーキテクチャ設計においてまったく異なり、たとえば、HHVM のマルチスレッド アーキテクチャはあまり安定していないと述べました。さらに、HHVM の移植性は良くなく、PHP は Windows 環境で開発している開発者が多く、HHVM はそれらのユーザーをサポートできません。
Rasmus Lerdorf 氏は、PHP の主要なアーキテクチャを放棄することはできなかったが、2 つの統合を検討したが、HHVM の使用には多くの制限があると述べました。 HHVM は Facebook や多くの開発者にとって非常に優れたツールですが、PHP プロジェクトの場合、HHVM の使用範囲は十分に広くなく、Facebook や Wikipedia などの特定のプロジェクトのニーズにしか満たせません。
PHP は厳密に型指定された言語ではないため、JIT にインポートするのはさらに困難です
しかし、PHP に JIT コンパイルを追加するのは非常に困難です。 Rasmus Lerdorf氏は、JITはどの部分が重要なプログラムコードであるかを理解し、プログラムがいつ呼び出されるのか、またはプログラムのどの部分が呼び出されるのかをプログラムの実行前に予測するなど、プログラムの動作パターンを識別する方法を学習する必要があると述べた。ラスムス・レルドルフ氏は、多くの車において、JIT は車のどの部分が右折するか、どの部分が左折するか、または特定の色の車が直進するかを予測できなければならない、と述べました。予測が正しければ、パフォーマンスが低下します。「大幅に低下します。」ただし、予測が正しければ、プログラムの実行パフォーマンスは大幅に向上します。
一般的なプログラミング言語のコンパイルに JIT を追加するのは簡単ではありません。Rasmus Lerdorf 氏は、PHP の動的属性 (動的) により、JIT を追加するのはさらに難しいと述べました。たとえば、開発者はパラメータ $a の値を 1 と宣言しましたが、パラメータ値は PHP で簡単に再定義できるため、プログラム内のすべての $a の値が 1 であることを意味するわけではありません。 C 言語では、開発者がパラメータ a を整数として宣言すると、a は常に整数になります。プログラムのどこかで a が整数以外の型であると宣言されている場合、コンパイルすらできなくなります。また、C 言語は厳密に型指定されたプログラミング言語であるため、「JIT は変数 a が整数であることを予測できますが、PHP ではそのような余裕はありません。HHVM のアプローチは、JIT が a が整数であることを学習することであると説明しました。」 type 以降は、a は常に整数であると見なされます。
JIT コンパイルを使用するために、HHVM は PHP の開発をある程度制限しています。 HHVM のユーザーは変数の性質を明確に宣言する必要がありますが、PHP を使用する開発者は、まず属性 (クラス) なしでカテゴリを宣言し、次にそのカテゴリの変数属性を指定できます。 「いかなる制限もなく、PHP に JIT を追加することが私たちがしなければならないことです。PHP は WordPress、Drupal、その他のフレームワークの開発者を考慮する必要があり、これらのフレームワークのサポートを恣意的に停止することはできません」と同氏は述べました。したがって、HHVM と比較して、PHP では JIT の作成に関する制限が増えます。
しかし、「これは、JIT ができないという意味ではありません。さらに、PHP の開発方向もコントロールする必要があります。」と Rasmus Lerdorf 氏は言いました。
現在、PHP の中心的な貢献者の 1 人である Dmitry Stogov は、プロトタイプの JIT を開発し、いくつかの実験的アプリケーションを使用してその動作をテストしています。 Rasmus Lerdorf 氏は、この JIT を特定の反復操作やループ プログラムの実行に使用すると、PHP 7 のパフォーマンスを 10 倍高速化できると述べました。
しかし、彼はまた、この実験的な JIT を WordPress で使用したとき、加速効果が得られなかったことも認めました。「私たちが作りたい JIT は、大学の教科書で習うものではなく、現実の世界で動作するものです。」ジット。」と彼は言いました。なぜなら、PHP は常にそのような理想を持ち、教科書上の理論だけでなく、人々の生活や現実世界のオンライン環境で問題を解決しようと努めてきたからです。
Rasmus Lerdorf 氏は、PHP が初めて登場したとき、PHP の開発に 1 日に少なくとも 16 時間を費やしたと述べました。しかし現在、彼は開発への投資を徐々に減らし、その代わりに世界中での宣伝や講演にエネルギーを注いでいます。彼は冗談めかして、「自分で開発するよりも、私よりはるかに賢くて、1 日 18 時間費やしてプログラムを書いて PHP を開発する人たちにインスピレーションを与えるほうが良い」と語った。彼が書いた PHP の 1 行のプログラミング コードは、「成長するプロジェクトは 1 人の開発者によって主導されるべきではありません。古いプログラム コードは新しいプログラム コードに置き換えられるべきであり、他の開発者がこれを目指すべきだと信じています。」