Opcodeを読んでいたら何故かphp-srcを読んでいた話
by
むらおか
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
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/ 参考資料