Hi,
I made a patch to implement constant folding optimization in the Zend engine.
The patch is available at:
http://web.ist.utl.pt/nuno.lopes/zend_constant_folding.txt
Please review & commit.
Regards,
Nuno
P.S.: 'make test' shows 2 regressions with this patch
(tests/run-test/test005.phpt & tests/run-test/test008a.phpt). they
appear because of the "division by zero" warning. This problem still
needs to be fixed before commiting the patch.
I made a patch to implement constant folding optimization in the Zend
engine.
The patch is available at:
http://web.ist.utl.pt/nuno.lopes/zend_constant_folding.txt
I like the idea a lot, however I think this patch has one significant
downside - as far as I understand, it doesn't enable constant
expressions in constant contexts. I.e. I can do $a = 2+2 and get it
evaluated but I can't do function foo($a = 2+2) or const $a = 2+2. If we
moved this to the parser level I think we could do both.
--
Stanislav Malyshev, Zend Software Architect
stas@zend.com http://www.zend.com/
(408)253-8829 MSN: stas@zend.com
I made a patch to implement constant folding optimization in the
Zend engine.
The patch is available at:
http://web.ist.utl.pt/nuno.lopes/zend_constant_folding.txtI like the idea a lot, however I think this patch has one
significant downside - as far as I understand, it doesn't enable
constant expressions in constant contexts. I.e. I can do $a = 2+2
and get it evaluated but I can't do function foo($a = 2+2) or const
$a = 2+2. If we moved this to the parser level I think we could do
both.
Well we don't support that syntax at this moment. If you are saying
that we could add support for such syntax.. it does seem a good idea,
but in that case we would need to modify a few rules of the grammar
(like adding a const_expr production, and allow static_scalar derive
it, etc..).
If others agree with this syntax, I can take a look in implementing it.
Nuno
Well we don't support that syntax at this moment. If you are saying that
we could add support for such syntax.. it does seem a good idea, but in
that case we would need to modify a few rules of the grammar (like
adding a const_expr production, and allow static_scalar derive it, etc..).
Right, that's what I had in mind. That doesn't seem to break anything
and allows also a little more freedom. let's see if anyone objects.
--
Stanislav Malyshev, Zend Software Architect
stas@zend.com http://www.zend.com/
(408)253-8829 MSN: stas@zend.com
Well we don't support that syntax at this moment. If you are saying
that we could add support for such syntax.. it does seem a good
idea, but in that case we would need to modify a few rules of the
grammar (like adding a const_expr production, and allow
static_scalar derive it, etc..).Right, that's what I had in mind. That doesn't seem to break
anything and allows also a little more freedom. let's see if anyone
objects.
I tried implementing this and it seems much more complicated than what
I though. I modified the static_scalar rule of the grammar and I got
hundreds of reduce/reduce and shift/reduce ambiguities. Ignoring the
warnings, well.. didn't work (the parser then couldn't process the
run-tests.php script).
Nuno
P.S.: I already spoted a few more places where we can produce better
byte-code (including more simple constant folding).. but one thing at
a time :)