Slide 1

Slide 1 text

TrufflePHP  JJUG    2019/2/27 LINE Fukuoka  

Slide 2

Slide 2 text

 •   • LINE Fukuoka •    • @kis

Slide 3

Slide 3 text

Truffle • 

Slide 4

Slide 4 text

Truffle •  ()          

Slide 5

Slide 5 text

Truffle

Slide 6

Slide 6 text

PHP   • jparsec ( ) • https://github.com/jparsec/jparsec/ •   • +-<>.(  ) •  •  • if • echo https://github.com/kishida/phpparser

Slide 7

Slide 7 text

   

Slide 8

Slide 8 text

(1/6) • Node

Slide 9

Slide 9 text

(2/6) •    • (Specialization)

Slide 10

Slide 10 text

(3/6) • CallNode 

Slide 11

Slide 11 text

(4/6) •  

Slide 12

Slide 12 text

(5/6) • NodeDirectCallNodeCompilerAssertsGraal • Java   

Slide 13

Slide 13 text

(6/6) • 5; • 0:, 4 %)5210:,  69; • return=-2/   goto(JVM%)) jmp(*!' +) ReturnException #+&"$(87  resultObject <3.

Slide 14

Slide 14 text



Slide 15

Slide 15 text

 •  (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

Slide 16

Slide 16 text

(JIT) • PHP 7.3PHP5.63 •   PHP7.37 • Truffle+GraalVM CEPHP7.3 • Truffle+GraalVM EEPHP7.32 • GraalVM CE    PHP7.32 • GraalVM EE    PHP7.34

Slide 17

Slide 17 text

 • JIT    •   •  • EE PHP7.3   • CE PHP7.3  

Slide 18

Slide 18 text

  • PHP  # &!"' •  % •  • EE$CE%

Slide 19

Slide 19 text

 • Real$) "UserCPU! " • JVMUser" ' •  ( CPU" ' • GraalVMRealUser & • Graal#% ( CPU" 

Slide 20

Slide 20 text

 • PHPPHP3PHP4PHP5PHP7 '5# !"(PHP6&8) • (0, +*:% PHP7941   •  "$!(03  • . '5# (0,6 -2 • 5/$7)#(Specialization) 

Slide 21

Slide 21 text

 • GraalVM  • Truffle   • " # SimpleLanguage  • Writing a Language in Truffle •  gitter ! % • Graal&$