TruffleでPHPを実装したら爆速だった話です
TrufflePHP JJUG 2019/2/27 LINE Fukuoka
View Slide
• • LINE Fukuoka• • @kis
Truffle•
Truffle• ()
Truffle
PHP • jparsec()• https://github.com/jparsec/jparsec/• • +-<>.( )• • • if• echohttps://github.com/kishida/phpparser
function fib($n) {if ($n < 2) {return $n;}return fib($n - 1) + fib($n - 2);}echo "fib:".fib(31);echo "¥n";
(1/6)• Node
(2/6)• • (Specialization)
(3/6)• CallNode
(4/6)•
(5/6)• NodeDirectCallNodeCompilerAssertsGraal• Java
(6/6)• 5;• 0:,4 %)5210:,69;• return=-2/ goto(JVM%))jmp(*!' +)ReturnException#+&"$(87resultObject<3.
if ($n < 2) {return $n;}return fib($n - 1) + fib($n - 2);}$start = microtime(1);echo "fib:".fib(31);echo "¥n";echo "time:".(microtime(1) - $start);echo "¥n";fib(31);fib(31);fib(31);fib(31);fib(31);$start = microtime(1);echo "fib:".fib(31);echo "¥n";echo "time:".(microtime(1) - $start);echo "¥n";
• (interpreter) on JDK 11• Truffle JDK 11• Truffle GraalVM CE• Truffle GraalVM CE• Truffle GraalVM EE• Truffle GraalVM EE• PHP 5.6• PHP 7.3
(JIT)• PHP 7.3PHP5.63• PHP7.37• Truffle+GraalVM CEPHP7.3• Truffle+GraalVM EEPHP7.32• GraalVM CE PHP7.32• GraalVM EE PHP7.34
• JIT • • • EEPHP7.3 • CEPHP7.3
• PHP #&!"'• %• • EE$CE%function fib($n) {if ($n < 2) {return $n;}return fib($n - 1) + fib($n - 2);}echo "fib:".fib(31);echo "¥n";
• Real$)"UserCPU!"• JVMUser"'• ( CPU"'• GraalVMRealUser&• Graal#% (CPU"
• PHPPHP3PHP4PHP5PHP7 '5#!"(PHP6&8)• (0, +*:%PHP7941• "$!(03 • . '5#(0,6 -2• 5/$7)#(Specialization)
• GraalVM• Truffle • " #SimpleLanguage • Writing a Language in Truffle• gitter!%• Graal&$