in reply to Performance penalties of in-Perl docn vs compiled CGIs.

"Perl compiler" is a bit misleading: the interpreter is still there and still interpreting.
  • Comment on Re: Performance penalties of in-Perl docn vs compiled CGIs.

Replies are listed 'Best First'.
Re^2: Performance penalties of in-Perl docn vs compiled CGIs.
by LanX (Saint) on Feb 03, 2021 at 15:05 UTC
      The main thing that B::C does is output the start-up state of the perl interpreter (post-compilation but before execution) as a bunch of C structs which can be compiled into an executable. This improves the start-up time of the code, but has little effect on the run-time performance - which is still the perl interpreter calling out to a C-level pp_foo() C function for each op in the perl OP tree (the OP tree now being a static structure hard-coded into the executable). There is no JIT compilation to machine code in the Java sense (unless something has changed recently in B::C).

      So really there aren't any perl compilers - in the sense of something that at some point (build time or run time) converts perl code into machine code for fast execution.


        Yes Java has JIT, but this was not always so.

        Both languages have a "virtual machine" with OP-codes/Bytecode which is/can be interpreted.

        My point is, the black and white distinctions between compiler and interpreter are from the <80s and don't match the current shades of grey anymore.

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery


        Please correct me, but IIRC is JIT only attempting to compile a code path if past interpretation proved to be inefficient. Hence "interpretation" is still the default.


        from WP: Just-in-time_compilation

        A system implementing a JIT compiler typically continuously analyses the code being executed and identifies parts of the code where the speedup gained from compilation or recompilation would outweigh the overhead of compiling that code.

        JIT compilation is a combination of the two traditional approaches to translation to machine code ahead-of-time compilation (AOT), and interpretation and combines some advantages and drawbacks of both.

        > Is Perl a compiled or an interpreted programming language?

        Yep, the answer is both... this distinction is from the 70s and doesn't apply to many newer languages.

        You mentioned a Perl to LLVM translation in SO, where can I find out more about this project?

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery

        I like one of the comments below your linked post which points out what's really important in this distinction: interpreted language can be extended ad-hoc, eg. eval. That's a lot of flexibility.

      Yes. In the original Apple ][, Steve Wozniak used an interpreter which he called "SWEET16," to very great effect. Precious memory-bytes were saved, and "Integer BASIC" ran as well as it could have.