You can't just wave away the impact of having eval though. Just the fact that it exists means you need to keep around some supporting state like variable names. You can't do full constant folding and eliminate all intermediate steps for example if there a chance a runtime-created code will reach into your frame and want them back.
eval() is scoped to the current block. If you even just ignored JITing any function with eval() in it then you'd still get quite far.
Re:PHP 8 to Add a JIT
by rujuladanh on Sunday March 31, 2019 @04:58PM
(#19538340)
Similar things are done by JS engines and others nowadays. They optimize and keep the original stuff in case assumptions stop holding.
Re:PHP 8 to Add a JIT
by bufferoverflow on Monday April 01, 2019 @07:22PM
(#19549395)
You can do this in PHP:
<?php
eval('class Hello {public static function you(){echo "Yes!";}}');
Hello::you();
or this: <?php
file_put_contents('c.php', '<?php class Hello {public static function you(){echo "Yes!";}}');
require('c.php');
Hello::you();
Thus generating a class at runtime-ish.
Re:PHP 8 to Add a JIT
by keithnoizu on Sunday March 31, 2019 @05:31PM
(#19538543)
I used to use that pattern $$ frequently for library code.
I wish PHP had classes spread across several files like ASP.NET.
The PHP way for that is Traits
Although PHP does support the above syntax, it's actually pretty rare in production code. PHP can be optimized like JavaScript is: perform direct variable/member access but provide a slow path for these kinds of dynamic lookups.