不定期に誰に向けるでもなく PHP に関する雑な殴り書きをしている。日付が変わってから変わる前の日付の奴だと言い張って投稿するくらいの雑さ加減。
Reli 0.11.0 をリリースした
- https://github.com/reliforp/reli-prof/releases/tag/0.11.0
- PHP の
memory_limit
超過でAllowed memory size of 〜 bytes exhausted
が出た時にメモリ内容の内訳を吐ける奴 - メモリ解析機能のドキュメント をわりと充実させたりした
OSS で memory_limit
超過の issue を見つけては急にメモリ計測をとって去っていく PHP 界の妖怪としての活動もちょっとした
- https://github.com/PHPOffice/PhpSpreadsheet/issues/3814#issuecomment-1862367771
- "A possible optimization" として挙げていて PR で実装してるのはいわゆる zero page optimization 的な dedupe の仕組みを念頭に置いてる
- PHP の配列は CoW なので、ほぼ同じ発想でいけるな、みたいな
- OS や libc のメモリ管理と同じだなと考えると、CoW のコピーを実際に発生させないために PHP の配列を直接書き換えず配列内の要素と何らかの形で関連付けた mutable なデータを別で書き換える、とかの ELF の PIC 的な発想もどこかで活きることがあるのかもしれない
PHP の readonly クラスは諸事情により簡単にモックできない
- PHPUnit にはできない
- Mockery にもできない
- 個人的にはなんでできないのかよく分からない
-
readonly
クラスはreadonly
クラスでしか継承できず、よくあるモックライブラリはモック対象の子クラスのコードを動的に生成して読み込むような形で元クラスと互換性のある型を作って機能しているので、生成コードを非readonly
クラスと共通化できないのは分かる - ただ状態は別クラスへ分離してメンバで持てばよいだけで(PHP の readonly は中身まで immutable になるわけではない)、readonly クラスの子は通常クラスと別の形で生成しないといけない制約も元々あるわけなので、特に困らないような気もする
- それっぽいのを試してみてもふつうに動くので、全然やればできそうな気するけど、皆単に時間がないのか技術的な制約があるのか
- とりあえず readonly 対応のモックライブラリみたいなの作るなら今がチャンスな気がするので、暇なひとは作ってみるのがよいです