in reply to Re^5: Run Perl 5 in the Browser! (JIT Compilation)
in thread Run Perl 5 in the Browser!

Actually I'm wondering why this is not generally used for JITing Perl.

Three semi-informed guesses:

These can all be solved, but it would surprise me if they were solved easily.

Replies are listed 'Best First'.
Re^7: Run Perl 5 in the Browser!
by ikegami (Patriarch) on Aug 23, 2018 at 01:45 UTC

    I think the fundamental problem is that Perl has too many hooks (operation overloading, constant overloading, variable type overloading, custom opcodes, etc) that prevent optimizations without changing the language. We can't even guarantee that 2 returns a number (e.g. when using use bigint;), so we're stuck with fat opcodes that must be able to accept any kind of value.

      Yeah, given that observing a variable at the Perl level could cause SV upgrades within an opcode, maybe it's better to say the challenges are:

      • Polymorphic data structures at the C level; with
      • SV upgrades in opcodes; leading to
      • Large opcode function sizes

      We're not talking about JITting a five line Smalltalk method that's monomorphic across 80% of calls here. It would surprise me if the average opcode didn't expand to a size larger—and quite a few basic blocks more‐than LLVM wants to try to JIT.

        Nah, implicit type conversions is something JIT compilers can handle.

      JIT is about optimizing the main cases and observing the edge cases.

      You don't need guarantees because you just fall back to the generic solution if the input variables become unusual.

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

        It's the checking that makes it slow right now, so I'm not sure how what you said helps.

Re^7: Run Perl 5 in the Browser!
by LanX (Saint) on Aug 23, 2018 at 00:37 UTC
    I'm not a JIT expert, but if one of the strategies is to reduce a dynamic type to a static one, one could use Inline::C to generate a static version of a functions body.

    I also remember Steffen Müller giving a talk demonstrating some Perl JIT.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice