Page 1
『えこひいき』される関数たち
Functions Specialized by Zend Engine
pixiv Inc.
USAMI Kenta
2022-12-20
PHP勉強会@東京
公開日:
by USAMI Kenta @tadsan
に東京都渋谷区道玄坂のGMO Yours フクラスで開催された『第147回 PHP勉強会@東京』でライトニングトーク(5分)として発表しました。
『えこひいき』される関数たち
Functions Specialized by Zend Engine
pixiv Inc.
USAMI Kenta
2022-12-20
PHP勉強会@東京
お前誰よ
さて
Zend Engineって
なあに
仮想機械?
I am CPU.
つまり?
自分のことをCPU だと思い込んだ象
CPUの言葉でしゃべれ
Zend Engine
オ ペ コ ー ド
opcode
PHPはオペコードにコンパイルされる
<?php
echo 1; ECHO 1
PHPはオペコードにコンパイルされる
<?php
echo 'foo'; ECHO 'foo'
PHPはオペコードにコンパイルされる
<?php
print 'foo'; ECHO 'foo'
PHPはオペコードにコンパイルされる
<?php
echo 1 + 2; ECHO 3
PHPはオペコードにコンパイルされる
<?php
$a = 1; ASSIGN !0, 1
ADD ~2 !0, 2
echo $a + 2;
ECHO ~2
opcodeでおk
<?php echo "foo";
ECHO 'foo'
なんで
こんなことするの
PHP
高度な構文解析が必要 な高級なシンタックス
opcode
構文解析不要な
シンプルな命令セット
分けて開発することで
最適化しやすくなる
これを極めれば
パフォーマンス改善に
役立つのか?
ここまでが前振り
関数呼び出し
<?php
INIT_FCALL 'var_dump' SEND_VAL 'foo'
var_dump("foo");
DO_ICALL
関数呼び出しは 関数呼び出しに
なるとは限らない
!?
関数呼び出し
<?php
TYPE_CHECK 16 ~0 'foo'
echo
is_int('foo'); ECHO ~0
!?
関数呼び出し
<?php
ECHO 3
echo
strlen('foo');
まとめ
『えこひいき』とは何だったのか