🥳

PHP Internals 最新まとめ 2022-08-02

2022/08/02に公開

この記事は、第3回 - PHPerブラウンバッグ の発表資料です。

https://phper-brownbag.connpass.com/event/255293/

Internals の説明しつつ、 PHP 8.2 を間近に控えた最新情報をまとめます。

Internals とは?

PHP 開発者が情報を交換するメーリングリストの一つです。PHP 自体の開発に関わる相談が行われています。

https://www.php.net/mailing-lists.php

メールで受け取ることも出来ますし、下記のウェブサイト上から読むことも可能です。

https://externals.io/

例えばどんな相談 1

RFC を提出する前の機能追加についての相談。

https://externals.io/message/118310

文字列が JSON かどうかを判定する is_json 関数の提案

  • json_decode とエラー補足を行うことで現状でも達成
  • json_decode はオブジェクト生成を行う、memory_limit を超えるリスク
  • 文字列が json かどうかだけ知りたいケース(Validation)

この提案に対して、Internals では

  • PoC 実装のパフォーマンスを memry_get_peak_usage で確認してほしい
  • 名前は is_json_valid がいいのでは?
  • filter_var に新しい Filter を追加したほうが一貫性があるのでは?

こんな感じで、議論が行われます。十分に議論がされて、正式な RFC が作成されます。
※そうじゃない場合も多いのですが......

例えばどんな相談 2

Travis CI やめませんか?という相談

https://externals.io/message/118237

  1. Github Actions
  2. Azure Pipelines + Appveyor + Circle CI
  3. Travis CI

CI は 1 でほとんどカバーできているから、少なくとも3はいらなくない?という提案

しかし、下記のような返信があり

Tracivs CI は aarch64, s390x
Circle CI は FreeBSD

それぞれの CI プラットフォームでしかサポートされていないテスト環境があるため、やめることは出来ない。

https://ja.wikipedia.org/wiki/IBM_S/390


このように、普通に PHP を利用者として使っているだけでは知ることの出来ない情報や、今後 PHP に追加されていく新機能の最新情報について知ることが出来ます。

メールの数は、そんなに多くありません。直近一週間であれば、10スレッド程度なので、十分に読みこなすことが可能です。

PHP 8.2 に向けた新機能

実は、皆さん同じみの stitcher.io にすでにまとまっています。

https://stitcher.io/blog/new-in-php-82

では、Internals を読む必要はない?いえいえ、新機能一覧に乗っているのは What です。Internals を継続的に読むことで Why How などの RFC の背後にある物語が頭の中にインプットされます。

深い洞察を得ることで、PHP を使って、より適切なプログラミングをすることが出来ます。下記の RFC にも様々な物語があります。

日本人開発者が RFC を作成した機能

ext-random の新規追加

https://wiki.php.net/rfc/rng_extension

RFC に至るストーリがここにあります。

https://speakerdeck.com/colopl/colopltech-04-02

Internals 内の議論においては、言葉の定義・曖昧な文章について細かく指摘が入っています。それらを地道に取り入れて RFC を少しずつ修正されています。

https://externals.io/message/117295

ext-random の細かい実装内容に関する RFC

https://wiki.php.net/rfc/random_extension_improvement

random 拡張の実装は、細かい部分まで、元の RFC で決めきれていなかったため、細かい挙動や実装についての RFC が別途作られて議論されています。

ここでも、丁寧な議論がされた上で、実装内容単位で Vote が分割されて投票されています。私ならへこたれちゃうね!!!という流れまで見ることで、より深く記憶に残りますし、普段注目してない乱数の世界にちょっとだけ入り込むことが出来ます。

なお、工藤さんは、CSPRNG (暗号論的疑似乱数生成器)の PHPコード側での PoC 実装を使って、さらなる議論を行っています。

trait に定数を定義できるようにする

https://wiki.php.net/rfc/constants_in_traits

RFC が出されてから、しばらく無風で議論が少ない。Vote が始まってからは無言の NO が半数以上になるという辛い流れ。

途中で、過去の Trait に対する仕様提案をされていた人や、応援してくれる方からのコメントにより盛り返しました。

その議論の中で、Trait とはなにかという話し合いの中で、PHP の Trait はどういう可能性を持っているのか?五十嵐さんは、なぜ Trait に機能追加をしようと思ったのか?そんなことが有用な参照と共にわかるようになります。

下記は、PHP における継承の限界や、Abstract の中途半端さんについて解説されているブログ。めちゃくちゃ勉強になりました。

https://www.garfieldtech.com/blog/beyond-abstract

とはいえ英語がネック?

大丈夫、DeepL がある。それに我々には rana_kualu さんもついてる。

https://qiita.com/rana_kualu/items/fc4b02e2daaf102aa92f

普段から Internals で最新情報に触れていると、rana_kualu さんが書いてくれる日本語情報が「わかる〜、わかるぞ〜〜〜」ってなります。

まとめ

もっと日本人の PHP コミュニティでも、PHP 本体に対してコミットしていく人が増えないと、いつの間にか PHP の日本語対応がおかしくなってしまったりするかもしれません。

みんなも Internals を読んで、どっぷり PHP に浸かりましょう!

忙しい人のために、zenn にまとめた上で、毎週土曜日早朝に10分程度の Youtube Live をやっています。こういった入りやすいメディアから少しずつ初めてみるのはいかがでしょうか?

YouTubeのvideoIDが不正ですhttps://youtube.com/playlist?list=PL-95rBnE38Z6Ko4rHva-_Ady1zIlygmVU

Discussion