PHP

php-master-changes 2018-11-02

今日は死ぬほどエモいコミットと ext/opcache の組み込み関数呼び出し最適化のバグ修正があった!

2018-11-02

zsuraski: Update email addresses. We're still @Zend, but future proofing it...

  • https://github.com/php/php-src/commit/54dc07f3dc9fa2fcfeb2d2c6aebf79bd34ab041c
  • Zend(を 3 年前に買収した Rogue Wave)を退職することになった Zeev と Dmitry、及び一足早く 2 年前に退職して今は AWS にいる Andi のメールアドレスを、zend.com から php.net のものへ変更
  • 20 年以上前のこと、当時イスラエルの学生だった Zeev と Andi が PHP の生みの親 Rasmus のとこに殴りこみをかけ、PHP 3 を開発(元の PHP/FI 2.0 がびみょかったので)
  • PHP 4 で更に書き直したエンジンを、Zeev の Ze と Andi の nd から Zend Engine と名付ける
  • Zeev と Andi で Zend Technologies を創業
  • PHP 5 が出たり 6 が出なかったり 7 が出たりしつつ、 PHP はだいぶ普及
  • 2015 年に Rogue Wave が Zend を買収
  • 2016 年に Andi が退職
  • 時期は分からないがこれから Zeev も退職
  • 今後たとえ Zend の名前は残ったとしてもそこに Ze と nd はおらず、これからの Zend Engine を改修するのももはや Zend の中の人ではない
  • という、死ぬほどエモい色々が詰まっているような気がする12 年ぶりくらいのコミット
  • なお Zeev 自身は今現在特にコード触ってないので、Zend Engine の開発には Dmitry が今後もフルタイムで開発に関われるかの方が大事かもしれず

zsuraski: Future-proof email addresses...

nikic: Fixed bug #77092

  • https://github.com/php/php-src/commit/4daa413898948dad90bc797ccab200115326efc7
  • [7.2~]
  • ext/opcache で、opcache が有効な場合に array_diff_key() で SEGV が出る問題の修正
  • SSA を入れて導入した SCCP 最適化コードのバグ
  • opcache はスクリプトのコンパイル時にキャッシュへコンパイル済のオペコードを保存するが、保存前に幾つかの最適化を行う
  • 超雑に言うと、定数引数での一部組み込み関数呼び出しをコンパイル時(オペコード生成後の最適化フェーズ)に行って定数畳み込みを行うような処理があり、この関数呼び出し部分の処理がバグっていた、んだけど、多くの組み込み関数は fast_zpp へ移行済だったことでこのバグの影響を受けず、移行していなかった array_diff_key() では SEGV につながった、みたいな感じかな
  • EG(current_execute_data) が旧来の zend_parse_parameter() 内で参照されており、このバグは関数呼び出し時に EG(current_execute_data) を適切に扱っていないというものだった
  • その理屈だと他に fast_zpp に移行してなくてこの最適化の対象となる関数があるとダメそうだけど、何かあるのかなあ