Upgrade to Pro — share decks privately, control downloads, hide ads and more …

PHP の新しいバージョンはどのようにして⽣まれるか

PHP の新しいバージョンはどのようにして⽣まれるか

【PHP Tech Talk】PHPの今を語る!4社合同勉強会 発表資料
https://colopl.connpass.com/event/286658/

Infiniteloop

August 03, 2023
Tweet

More Decks by Infiniteloop

Other Decks in Programming

Transcript

  1. 前提: 言語バージョン == 処理系バージョン PHP はどちらかといえば実装 == 仕様の言語 先に言語仕様を厳密に記述した文書があってそのとおり実装、の順ではない RFC

    (後述)で各言語改定の内容を先に協議・決議はする かつては言語仕様の文書化を進める動きもあったが、今は非活発 php.net の公式処理系のバージョンが言語のバージョンでもある https://github.com/php/php-langspec/
  2. 3 種類のリリース PHP のバージョンは x.y.z のように表記 例: 8.2.7 とか 8.1.20

    とか x 、y 、z のどの部分が変わるかで 3 種類に分類 ポイントリリース マイナーリリース メジャーリリース
  3. ポイントリリース x.y.z の z 部分が 1 増える 例: 8.2.7 なら

    7 の部分 原則的に言語改定を含まない バグ修正やセキュリティ修正のみが行われる サポート中の各マイナーリリースについてほぼ毎月出る 各マイナーリリースで 34 〜 35 回が PHP 7 での実績
  4. マイナーリリース x.y.z の y 部分が 1 増える 例: 8.2.7 なら

    2 の部分 x.y.z の z 部分は 0 にリセット 機能追加のような言語改定を含む スクリプトについて後方互換性のない修正は原則的に入らない メジャーリリースでの削除に向けた機能の非推奨化は起きる 標準添付の C 拡張が PECL に移動される場合はある C 拡張向けの互換性が崩れる場合はある 年 1 回のペースでリリース(だいたい 11 月か 12 月) サポート期間は 3 年 2 年間バグ修正のポイントリリースが行われる 3 年目はセキュリティ修正のみでポイントリリースが行われる
  5. メジャーリリース x.y.z の x 部分が 1 増える 例: 8.2.7 なら

    8 の部分 x.y.z の y 部分と z 部分は 0 にリセット 機能追加のような言語改定を含む スクリプトについて後方互換性のない修正も入る マイナーリリースで非推奨化されてきた機能が一気になくなったりする リリース間隔に決まりはない PHP 8.0.0 は 2020 年 11 月 26 日にリリース PHP 7.0.0 は 2015 年 12 月 3 日にリリース
  6. GitHub PHP は OSS 処理系のソースコードは GitHub の php/php-src で管理 issues

    で不具合報告を受付 PR で修正を受付 零細な修正はコミット権を持つコア開発者が直 接コミットしたりも
  7. internals ML 言語改定には合意形成が必要 「こんな機能いいと思う!」で実装して PR するだけでは入らない 公式の議論の場としてどのような改定が必要かを議論する ML がある 議論への参加は自由(英語)

    後述の RFC プロセスに従って改定が提案され、投票が行われる ML に参加していない人でもアーカイブサイトで議論の経緯が追える 公式のものだが見づらい 非公式で ML のアーカイブを見やすく整形して公開しているサイト https://news-web.php.net/group.php?group=php.internals https://externals.io/
  8. Stack Overflow Chat | Room 11 Stack Overflow Chat の

    Room 11 が PHP のチャットルーム 一部のコア開発者がよく顔を出す 非公式なコミュニケーションチャンネルとして ML へ出す前のアイデアが議論されることも https://chat.stackoverflow.com/rooms/11/php
  9. RFC プロセスの概要 RFC: Request For Comments 言語改定を提案し、議論し、決議するためのプロセス PHP 5.4 の開発途中頃にルールが固まった

    PHP には全ての方針を決定付けるような個人がいない、良く言えば民主的 バグ修正やセキュリティ修正はふつう RFC プロセスなしに GitHub 上のやり取りだけで完結
  10. RFC プロセスの詳細 php.net の Wiki で RFC を書く internals ML

    でアナウンス 言語改定の提案には告知から最低 2 週間の議論が必要 ML で投票開始をアナウンス 最低でも 2 週間の投票期間が必要 2/3 以上の賛成で承認 投票権を持つのは一部の人々 リポジトリへのコミット権を持つコア開発者 internals での議論によく参加するコア開発者に認められた人
  11. RFC プロセスを実際にやってみると PHP 8.2 向けで trait で定数を定義可能にする提案を出して受理された けっこうやることが多い! 提案内容をまとめて英語で文書化(言葉の壁…… !)

    ツッコミへ適宜に英語で対応(言葉の壁…… !) 過去の関連する議論を追って一通り対応(言葉の壁…… !) PHP の他の言語機能との整合性の検討 他言語の類似機能と比較して見落としがないか検討 提案の通りに動く実装を C で用意 https://wiki.php.net/rfc/constants_in_traits
  12. 企業所属のコミッター PHP の開発は企業所属のコミッターが支えてきた面もある 日中の時間フルタイムで開発に関われるか、は大きい Zend by Perforce の Dmitry Stogov

    さん PHP 7 の高速化や PHP8 の JIT 導入などを成し遂げた 今も PHP 9 向けの新 JIT エンジンを作ってる かつて JetBrains で PHP の開発をしていた Nikita Popov さん
  13. ネブラスカ問題 "xkcd: Dependency" 出典: https://xkcd.com/2347/ (CC BY-NC 2.5) 現代のシステム開発は至るところで OSS

    を利用 OSS は更に別の OSS に依存 重要なシステムが一個人に依存していたりする 個人には生活があり人生に色々なことが起きる 話が一企業への依存になっても基本は同じ
  14. The PHP Foundation 2021 年 11 月に設立 寄付を集めて PHP のコア開発者を雇う団体

    現在までに 100 万 USD を調達 日本からも多くの寄付が集まっている 現在は 6 人のフルタイム・パートタイム開発者 を雇っている 多くのバグ修正や機能開発が成し遂げられた PHP から利益を得ている人々で分担して PHP 自 体を支えていく
  15. 新しいバージョンの PHP は 俺たちの寄付から生まれる! 弊社技術ブログでも 2 回ほど取り上げたので、ぜひ読んでね インフィニットループは PHP の継続的な発展を目指す

    The PHP Foundation に寄付をしました 今年度も PHP Foundation に寄付をしました https://www.infiniteloop.co.jp/tech-blog/2021/11/php-foundation/ https://www.infiniteloop.co.jp/tech-blog/2023/02/php-foundation-donation/