Opcodeを読んでいたら何故かphp-srcを読んでいた話
by
むらおか
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Opcodeを読んでいたら 何故かphp-srcを読んでいた話 むらおか @muraSHOTARO PHP Conference Japan 2024
Slide 2
Slide 2 text
intの型キャストとintval関数 ● (int) “1234” と intval(“1234”) ● 文字列を整数にする
Slide 3
Slide 3 text
intの型キャストとintval関数 ● (int) “1234” と intval(“1234”) ● 文字列を整数にする なにが違う?
Slide 4
Slide 4 text
php-srcを読んでみよう!
Slide 5
Slide 5 text
C言語わからない。。。
Slide 6
Slide 6 text
php-srcの前にOpcodeを読むと良いらしい ● OpcodeはPHPファイルを解析して生成される中間コード ● PHP実行時に内容を出力することができる
Slide 7
Slide 7 text
Opcodeを読んでみよう!
Slide 8
Slide 8 text
intval (int)
Slide 9
Slide 9 text
intval (int)
Slide 10
Slide 10 text
関数の呼び出しの場合 ● INIT_FCALL ● DO_ICALL
Slide 11
Slide 11 text
● いくつかの関数がOpcodeのコンパイル時に最適化されるようになった ○ intvalもそのうちの1つ (>=7.1.0) ● Opcodeのコンパイルは zend_compile_* 関数で行われる ○ https://wiki.php.net/rfc/abstract_syntax_tree#compiler_implementation AST導入とOpcodeの最適化
Slide 12
Slide 12 text
● いくつかの関数がOpcodeのコンパイル時に最適化されるようになった ○ intvalもそのうちの1つ (>=7.1.0) ● Opcodeのコンパイルは zend_compile_* 関数で行われる ○ https://wiki.php.net/rfc/abstract_syntax_tree#compiler_implementation AST導入とOpcodeの最適化 zend_compile_* を探そう!
Slide 13
Slide 13 text
php-srcを読んでみよう!
Slide 14
Slide 14 text
zend_compile.c を読む ● zend_try_compile_special_func ○ intvalは特別な関数 https://github.com/php/php-src/blob/php-7.1.0/Zend/zend_compile.c#L3664
Slide 15
Slide 15 text
zend_compile.c を読む ● zend_compile_func_cast ○ ZEND_CASTにコンパイルされる https://github.com/php/php-src/blob/php-7.1.0/Zend/zend_compile.c#L3395
Slide 16
Slide 16 text
intval (int) Opcodeが 最適化されてる
Slide 17
Slide 17 text
● Opcodeリーディングはphp-srcを読む糸口になる ● C言語を読むのに抵抗がある人でもOpcodeなら読みやすいかも? まとめ
Slide 18
Slide 18 text
● Opcodeリーディングはphp-srcを読む糸口になる ● C言語を読むのに抵抗がある人でもOpcodeなら読みやすいかも? まとめ Opcodeから始めよう!
Slide 19
Slide 19 text
ありがとうございました!
Slide 20
Slide 20 text
https://wiki.php.net/rfc/abstract_syntax_tree https://qiita.com/tadsan/items/d11229761504c8a1ca81 https://speakerdeck.com/yasuaki640/phpnoopcodewo-du-ndemiyou https://hakre.wordpress.com/2010/05/13/php-casting-vs-intval/ 参考資料