phpcon北海道2024-新米PHPerですが、php-srcをちょっとだけ読めちゃった件について
by
kero kero
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
新米 PHPerですが、 php-src を ちょっとだけ読めちゃった件について 2024/01/13 (株)インフィニットループ サーバーサイドエンジニア kerokero
Slide 2
Slide 2 text
Agenda 1. 自己紹介しつつ 2. php-src を読んでみたい 3. おわりに
Slide 3
Slide 3 text
どうも、kerokero です。
Slide 4
Slide 4 text
22卒 自称青魔道士系エンジニア (株)インフィニットループ kerokero ・北海道の 札幌 生まれ、札幌 育ち ・水産→数学(非情報系)→2022年4月にIL入社 ・最近の趣味は 絵を描く (→↓↘) ことと ストリートファイター6 (MR1400周辺) です ・担当領域は サーバーサイド のアプリ・インフラ周辺(Laravel, AWS, k8sなど) です
Slide 5
Slide 5 text
今回の発表の対象者 ・ PHP本体のソースコードに興味がある初心者の方
Slide 6
Slide 6 text
今回の発表の対象者 ・ PHP本体のソースコードに興味がある初心者の方 ・ php-srcに興味を持ったことがあるけど難しそうだからと敬遠気味な 人
Slide 7
Slide 7 text
今回の発表の対象者 ・ PHP本体のソースコードに興味がある初心者の方 ・ php-srcに興味を持ったことがあるけど難しそうだからと敬遠気味な 人 ・ 難しそうな話を聞くのは5分間が限界な人 ↑ HOT‼ 5分間も集中できるの偉い!
Slide 8
Slide 8 text
今回の発表の対象者 ・ PHP本体のソースコードに興味がある初心者の方 ・ php-srcに興味を持ったことがあるけど難しそうだからと敬遠気味な 人 ・ 難しそうな話を聞くのは5分間が限界な人 ↑ HOT‼ 5分間も集中できるの偉い! 1分間だけ🙏 1
Slide 9
Slide 9 text
では、見ていきましょう!
Slide 10
Slide 10 text
少しPHPが分かったと思った頃に こんな経験、ありませんか? アルバイトのめぐるちゃん
Slide 11
Slide 11 text
PHP 難しくてよく分からないな~ <
Slide 12
Slide 12 text
シュバッ! え、なになに? > PHP 難しくてよく分からないな~ <
Slide 13
Slide 13 text
Composer の実装を見てるんだけど…… (おっ......?) あー、Composerね どれどれ、どこが分からんの? > <
Slide 14
Slide 14 text
No content
Slide 15
Slide 15 text
※ ・PHPのオートロードは spl_autoload_register を使って登録される らしい ・引数としてautoload関数を与えてあげる とキューの中に追加されていき、定義さ れた順に紐づけられていくみたいです ・とはいえ、php-srcの中に踏み込むこと になるのでここでは詳細は触れません
Slide 16
Slide 16 text
spl_autoload_register ってどうやって動いてるんですか? あーね…… > <
Slide 17
Slide 17 text
???
Slide 18
Slide 18 text
…… >
Slide 19
Slide 19 text
https://github.com/php/php-src この辺読むといいかもね slackにリンク張っておいたわ >
Slide 20
Slide 20 text
https://github.com/php/php-src この辺読むといいかもね slackにリンク張っておいたわ >
Slide 21
Slide 21 text
・
Slide 22
Slide 22 text
・ ・
Slide 23
Slide 23 text
・ ・ ・
Slide 24
Slide 24 text
php-srcを読んでみたい
Slide 25
Slide 25 text
php-srcを読んでみたい!!
Slide 26
Slide 26 text
Agenda 1. 自己紹介しつつ 2. php-src を読んでみたい 3. おわりに
Slide 27
Slide 27 text
・php-srcを読んでみたい ・PHPとはThe PHP Groupによって開発されている ・オープンソースの汎用プログラミング言語 および ・その公式の処理系
Slide 28
Slide 28 text
・php-srcを読んでみたい ・PHPとはThe PHP Groupによって開発されている ・オープンソースの汎用プログラミング言語 および ・その公式の処理系 ・そして、php-srcというのは「公式の処理系」である方のPHPのことであり、これを読んで理解す るというのはなかなか骨が折れる作業
Slide 29
Slide 29 text
・php-srcを読んでみたい ・個人的にphp-srcを読みたいと思った動機は Composerの中身を知りたいというものだった
Slide 30
Slide 30 text
調べてみよう
Slide 31
Slide 31 text
・php-srcを読んでみたい ・php-src を読むためにはC言語が読めないといけない
Slide 32
Slide 32 text
・php-srcを読んでみたい ・php-src を読むためにはC言語が読めないといけない 基本的には雰囲気で読んでいけばOKらしい
Slide 33
Slide 33 text
たしかに、なんとなく追えそうな……
Slide 34
Slide 34 text
・php-srcを読んでみたい ・一見、コードの流れ自体はなんとか理解できそう……
Slide 35
Slide 35 text
・php-srcを読んでみたい ・一見、コードの流れ自体はなんとか理解できそう…… ・大文字で書いてあるマクロ部分がヤバい ※小文字の部分がヤバくないとは言ってない
Slide 36
Slide 36 text
・php-srcを読んでみたい ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み
Slide 37
Slide 37 text
・php-srcを読んでみたい ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み ・C言語の構文とかお構いなしに、だいたいなんでも書ける
Slide 38
Slide 38 text
・php-srcを読んでみたい ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み ・C言語の構文とかお構いなしに、だいたいなんでも書ける ・マクロの中で変数定義してたりする
Slide 39
Slide 39 text
・php-srcを読んでみたい ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み ・C言語の構文とかお構いなしに、だいたいなんでも書ける ・マクロの中で変数定義してたりする ・引数がマクロで書かれてたりする
Slide 40
Slide 40 text
・php-srcを読んでみたい ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み ・C言語の構文とかお構いなしに、だいたいなんでも書ける ・マクロの中で変数定義してたりする ・引数がマクロで書かれてたりする ・型定義もマクロで書いてあったりする
Slide 41
Slide 41 text
・php-srcを読んでみたい ・マクロはC言語で書いたコードがビルドされる前に、自分で定義した内容 を文字列置換によって扱うことができる仕組み ・C言語の構文とかお構いなしに、だいたいなんでも書ける ・マクロの中で変数定義してたりする ・引数がマクロで書かれてたりする ・型定義もマクロで書いてあったりする ・ < えっ?型定義だけでなく、メモリの割り当てと配置も理 解し ないといけないんですか……?
Slide 42
Slide 42 text
とりあえず一旦整理
Slide 43
Slide 43 text
・php-srcを読んでみたい ・php-srcはほとんどC言語で書いてある ・まずは雰囲気で読めばOK
Slide 44
Slide 44 text
・php-srcを読んでみたい ・php-srcはほとんどC言語で書いてある ・まずは雰囲気で読めばOK ・大量に出てくるマクロを理解する必要がある ・マクロの処理を追う必要があることを理解しておく
Slide 45
Slide 45 text
・php-srcを読んでみたい ・php-srcはほとんどC言語で書いてある ・まずは雰囲気で読めばOK ・大量に出てくるマクロを理解する必要がある ・マクロの処理を追う必要があることを理解しておく ・php-src特有のメモリ配置に関する知識が必要 ・zend_execute_data, zval など ・zval構造体を取得する仕組みなど
Slide 46
Slide 46 text
PHPが動く話 急いで!!
Slide 47
Slide 47 text
・php-srcを読んでみたい ・PHPは以下の流れでだいたい動いてる 1. 実行環境が SAPI のエントリポイントを呼び出す 2. PHP 処理系に SAPI から入出力用の処理が登録される 3. PHP 処理系が SAPI から起動される 4. PHP 処理系がリクエストの処理を開始し、スクリプトファイルを開く 5. Zend Engine がスクリプトから VM で実行する中間コードを生成する 6. Zend Engine が生成された中間コードを実行する 7. 実行中に PHP 処理系からの出力処理が必要なら、SAPI で登録された処理を通 して行われる 8. PHP 処理系がリクエストの処理を終了する
Slide 48
Slide 48 text
よく分からん
Slide 49
Slide 49 text
・php-srcを読んでみたい ・すごい簡単にまとめると ・SAPIのエントリポイント ↓ ・SAPI ↓ ・Zend Engine ↓ ・処理の実行
Slide 50
Slide 50 text
・php-srcを読んでみたい ・SAPIのエントリポイント ・なんかよく分からんけどSAPIってやつを呼び出している部分 ・コマンドラインとかApacheとか
Slide 51
Slide 51 text
・php-srcを読んでみたい ・SAPI ・ServerAPIの略 ・WebサーバーでPHPを動かすためのAPI ・PHPを実際に処理してるZendEngineというものを動かすため のイン ターフェースという理解 ・mod-php, CLI, php-fpmなど
Slide 52
Slide 52 text
・php-srcを読んでみたい ・Zend Engine ・PHPのスクリプトを処理して実行する部分 ・CLIやphp-fpmなんかも、最後はZendEngineを呼ぶ
Slide 53
Slide 53 text
実際の処理 たぶんここまでたどり着いてない
Slide 54
Slide 54 text
・php-srcを読んでみたい ・Zend Engineで処理される流れ ・SAPIから起動される ・スクリプトの内容を抽象構文木(AST)というものへ変換 ・スクリプトを構造体にする処理 ・ASTからOpcodeという命令を生成する ・zend_compile.c で関数が定義されてます ・↑で生成されたOpcodeの実行
Slide 55
Slide 55 text
Agenda 1. 自己とか色々紹介 2. php-src を読んでみたい 3. おわりに
Slide 56
Slide 56 text
・おわりに ・本当に本当に、0が1になった話でした ・1から100にするためには神記事や過去のカンファレンスを見よう
Slide 57
Slide 57 text
結局、 このスライドでphp-srcが読めるように なった話聞けてなくない??
Slide 58
Slide 58 text
なんと、PHPについて学べる 場所があります!!
Slide 59
Slide 59 text
No content
Slide 60
Slide 60 text
会場 札幌オフィス
Slide 61
Slide 61 text
ご清聴ありがとうございました!!