Upgrade to Pro — share decks privately, control downloads, hide ads and more …

TruffleでPHPぽい言語を実装したら爆速だった話 / truffle php at jjug night seminar

Naoki Kishida
February 27, 2019

TruffleでPHPぽい言語を実装したら爆速だった話 / truffle php at jjug night seminar

TruffleでPHPを実装したら爆速だった話です

Naoki Kishida

February 27, 2019
Tweet

More Decks by Naoki Kishida

Other Decks in Technology

Transcript

  1. TrufflePHP


    JJUG


    2019/2/27 LINE Fukuoka

    View Slide



  2. • LINE Fukuoka


    • @kis

    View Slide

  3. Truffle

    View Slide

  4. Truffle
    • ()





    View Slide

  5. Truffle

    View Slide

  6. PHP

    • jparsec(
    )
    • https://github.com/jparsec/jparsec/

    • +-<>.( )


    • if
    • echo
    https://github.com/kishida/phpparser

    View Slide



  7. function fib($n) {
    if ($n < 2) {
    return $n;
    }
    return fib($n - 1) + fib($n - 2);
    }
    echo "fib:".fib(31);
    echo "¥n";

    View Slide

  8. (1/6)
    • Node

    View Slide

  9. (2/6)


    • (Specialization)

    View Slide

  10. (3/6)

    CallNode

    View Slide

  11. (4/6)


    View Slide

  12. (5/6)
    • NodeDirectCallNodeCompilerAssertsGraal
    • Java


    View Slide

  13. (6/6)
    • 5;
    • 0:,
    4 %)5210:,

    69;
    • return=-2/
    goto(JVM%))
    jmp(*!' +)
    ReturnException
    #+&"$(87

    resultObject
    <3.

    View Slide



  14. 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";

    View Slide


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

    View Slide

  16. (JIT)
    • PHP 7.3PHP5.63

    PHP7.37
    • Truffle+GraalVM CEPHP7.3
    • Truffle+GraalVM EEPHP7.32
    • GraalVM CE


    PHP7.32
    • GraalVM EE


    PHP7.34

    View Slide


  17. • JIT




    • EEPHP7.3
    • CEPHP7.3

    View Slide



  18. • PHP
    #&!"'
    • %

    • EE$CE%
    function fib($n) {
    if ($n < 2) {
    return $n;
    }
    return fib($n - 1) + fib($n - 2);
    }
    echo "fib:".fib(31);
    echo "¥n";

    View Slide


  19. • Real$)"UserCPU!"
    • JVMUser"

    '
    • (
    CPU"
    '
    • GraalVMRealUser
    &
    • Graal#% (
    CPU"

    View Slide


  20. • PHPPHP3PHP4PHP5PHP7
    '5#
    !"(PHP6&8)
    • (0, +*:%
    PHP7941

    • "$!(03
    • . '5#(0,6 -2
    • 5/$7)#(Specialization)

    View Slide


  21. • GraalVM

    • Truffle

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

    View Slide