
HHVM's Profile-Guided Region JIT - Cozumel
http://hhvm.com/blog/2017/02/17/region-jit.html
======
tyingq
I was honestly surprised how well PHP7 fared against HHVM. No JIT, and likely
a much smaller team and budget. Most of the comparisons I've seen show them as
roughly the same performance.

~~~
noir_lord
PHP7 was a huge performance leap over 5.x, I saw all the benchmarks and they
looked impressive (100% performance, 50-80% reduction in memory usage) and
expected the usual "Ok but in the real world I'll get maybe 10-20% because
benchmarks" and nope, in production I see exactly what the 5 vs 7 benchmarks
show.

The memory reductions when dealing with large arrays (pretty much the only
datatype in PHP...) are colossal.

~~~
fooyc
> arrays (pretty much the only datatype in PHP...)

linked-hash-map-arrays, they are :)

------
twic
Has anyone tried building a PHP runtime based on Truffle?

It might not be as fast as a dedicated JIT with a big team behind it, but it
seems Facebook's HHVM effort is relatively small as these things go.

Is there anything about PHP that would make Truffle a bad fit? I ask this as
someone who knows next to nothing about either PHP or Truffle!

~~~
tyingq
>Is there anything about PHP that would make Truffle a bad fit?

Perhaps one barrier would be the insane number of built-in functions. There's
1000+[1]. And, as far as I can tell, most of them tied to underlying C code
versus being written in PHP themselves.

The other might be that because of the built-in templating thing, you would
have to parse html as well, to find the embedded PHP. I'm not sure how well
that aligns with Truffle's approach. Things like this:

    
    
      <ul> 
        <?php foreach ($foolist as $foo) { ?> 
          <li><?php echo $foo;?></li>
        <?php } ?>
      </ul>
    

[1] Try: php -r 'var_dump(get_defined_functions());' | less

~~~
chrisseaton
Built-in functions are certainly a pain. They pose a similar problem for Ruby
(which there is a Truffle implementation of). I think the best way around is
to rewrite them in PHP, but it may not be tractable to do this with the same
semantics. Another option is to run the C code that implements the builtins
using the same JIT as you use for the PHP code. Then you can inline through
the builtins, which is one reason why HHVM may be slow.

