今週の PHP 2023-04-15 〜 2023-04-21
PHP のメーリングリストから、気になった情報をピックアップします。
Internal
Windows PECL build machine died - Externals
この件については、Githubのイシュー内で話されてた方向になるのかなと思います。
つまり、PECL側ではなく、拡張側が自分たちでビルドして提供してねという話です。ビルド環境の一貫性とかの話が当初は問題になっていたような気がしますが、プラットフォーム側のコミュニティが善意で維持し続けるのは厳しいですね。
Expansion of PHP Symbols? - Externals
型エイリアスがほしいという話、関数のオートロードの話、そして列挙型に対して、1ファイルではなくそれぞれの列挙型に対してファイルを作成しなきゃならないことなど、現在のPHPが抱えているある種の一般性に対して疑問を投げかける投稿です。
特に、型エイリアスについて議論は盛り上がっていました。実際に内部の挙動を考えてみると、いつの時点でエイリアスが有効になるのかとか、エイリアスが競合したらとか、考えることが多いです。
1クラス、1ファイルなのは、PSR-0, PSR-4 のせいだよねとか、当たり前になっていることに対してちょっと気付かされるようにお便りでした。
[VOTE] PHP 8.3 Release Managers - Externals
ルーキーのリリースマネージャーさんが2名選出されていました。おめでとうございます。そして、ありがとうございます。
self-hosting (compiling context) PHP - Externals
PHPをコンパイルするPHPって、どっかにやったことある人いるのかな?という質問。
Pythonでは、pypy
ですね!
PHPには、PHPPHP
があるそうです!実装は10年前ですね。楽しそうなので、コンパイラの勉強がてら、自分もチャレンジしてみたいな。
ircmaxell/PHPPHP: A PHP VM implementation in PHP
Future stability of PHP? - Externals
俺の作った最強のPHPが 7.1 から 8.2 に移行したら、めちゃくちゃ非推奨と致命的エラーが出たんだが..... というお便り。
つまり、下位互換性について、5年 10年 20年というスパンで見ていくと、つらいよという。ようするに、古いコードがそのまま動くように維持してくれないかね?という話
この議論は、可燃性が高そうだなと思いましたが、たくさんレスがついています。モダンなプラクティスが使えるように進化しろよ!という方向性と、今までのものがそのまま動くように維持しろよ!という
- 今ならTypescriptを選ぶさ
- いや、成熟度ならPHPだ
- 互換性より、お前のコードの問題だ
- .....
などなど、様々な意見が出ています。興味のある方はぜひ。
Bugs
PECL website does not offer Windows DLLs anymore · Issue #10850 · php/php-src
Microsoft が PECL のための Windows Build System の提供を止めたため、PECLのウェブサイト上からDLLのダウンロードができなくなっているというイシュー。
PECL側に頼るのではなく、それぞれの拡張側がそれぞれのCI上でDLLをビルドするように変更してねという方向のようです。
そのためのやり方は、cmb69 さんがまとめてくれています。
filter_var FILTER_VALIDATE_IP with ip '0.2.3.4' will return true · Issue #11098 · php/php-src
FILTER_VALIDATE_IP
で先頭が0のIPアドレスがtrueと判断されるのはおかしいというイシュー。
0.0.0.0/8
つまり、0.0.0.0
から 0.0.0.255
は予約されている特別なIPアドレスです。だからといって、不正なのかなぁというのが焦点。
FILTER_VALIDATE_IP
にはすでにそのような要件を満たすフラグが存在詞ていて
FILTER_FLAG_NO_PRIV_RANG
FILTER_FLAG_NO_RES_RANGE
を使えば、ちゃんとはじけるとのこと。勉強になる。
ちなみに、2つのフラグ条件を兼ねる FILTER_FLAG_GLOBAL_RANGE
もあるそうです。
ドキュメントはこちら -> https://www.php.net/manual/en/filter.filters.flags.php
Use zval storage for php://memory stream · Issue #11106 · php/php-src
php://memory
php://temp
は、streamを使った入出力処理になるため、copy-on-write が使われておらず、メモリ使用量が2倍になってしまう。zval storage を使うことで copy-on-write に対応しようよというイシュー
良さそうですが、動きはなさそう。
Segfault when compiling code on the request shutdown after a fatal error · Issue #11108 · php/php-src
register_shutdown_function
内で、PHPファイルの include
を行ってコンパイルを走らせると、SegFault が発生するというイシュー
グローバル変数の状態がおかしくなっていることが原因だったようです。修正済み。
Discussion