Re: constant folding optimization

From: Date: Fri, 07 Dec 2007 21:47:27 +0000
Subject: Re: constant folding optimization
References: 1 2 3 4  Groups: php.internals 
Request: Send a blank email to internals+get-33857@lists.php.net to get a copy of this message
There is no "fix" for the the class constants yet. I didn't have the time to look at it nor anyone else did. Anyway my patch for "regular" constant folding is still on-line, if someone wants to commit or use it. Nuno ----- Original Message -----
Did this topic end nowhere? Isn't some fix here better than no fix? class-constants are currently compile-time constants and letting them use constants from classes defined in other files will move them to run-time constants (because php has ambiguity-feature of conditional-loading), so, probably, this part should be skipped anyway. On 9/10/07, Marcus Boerger <helly@php.net> wrote:
Hello Dmitry, This is a good catch. I gave it a bit of attention some time ago and it is not trivial to fix. However code often improves from this. Most of all ofeten enough you end up with some consts that would in other languages be enums like: class Week { const Monday = 0; const Tuesday = Monday + 1; // ... } or this: class Logging { const INFO = 0; const WARN = INFO + 1; const FAIL = WARN + 1; // ... } I'd especially like this because it would make my enum implementation in pecl/spl_types more handy. marcus Monday, September 10, 2007, 9:55:49 AM, you wrote:
I see a problem with this idea. In case we support constant expressions, we should support constants in such expressions, but the values of these constants may be unknown in compile time.
<?php class Foo {
        const A = 0;
}
?>>
<?php require_once "foo.php"; class Bar extends Foo {
        const B = self::A + 1;
}
?>>
Delaying constant initialization for expressions in general will require keeping of Abstaract Syntax Tree, that should be evaluated at run-time by zval_update_constant().
Thanks. Dmitry.
-----Original Message----- From: Nuno Lopes [mailto:nlopess@php.net] Sent: Saturday, September 08, 2007 10:50 PM To: Stanislav Malyshev Cc: internals@lists.php.net; andi@php.net; dmitry@php.net Subject: Re: Re: [PHP-DEV] constant folding optimization
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.
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


« previous php.internals (#33857) next »