Hi Stas, Dmitry,

I forgot to reply to Stas' message yesterday, sorry...  But, there is no
change in behavior here either as far as I know.  For the code Stas quoted,
with static vars (if that's what was being referred to), there's definitely
not been a change (though its parser code was tweaked a bit), and there has
never been a locale issue, and the operand negation happens at compile-time
(as always).

The reason there should also be no change doing +/- at compile time now (out
of static_scalar context) with constant values is because locale *does not
affect* string to number conversion -- only '.' works as a decimal point in
is_numeric_string() (maybe zend_strtod() too; didn't look), so there's no
way the conversion could be different during runtime. :-)

Now for going the other way, double to string, locale is honered, I believe?
In that case, Dmitry, that would be another issue trying to do the full
folding (with ZEND_CONCAT), with something like

$a = 'abc ' . 1.23;

So good thing it's left out for now!  (Hmm, don't [some] optimizers do this
folding? Maybe they haven't considered the locale issue...)

But anyway, I don't think there are any worries about the current code and
what has been done.


Thanks,
Matt


----- Original Message -----
From: "Dmitry Stogov"
Sent: Sunday, August 31, 2008

> Hi Stas,
>
> We discussed this patch with Matt, and I allowed this change.
> So it probably my fault (I missed run-time locale change possibility).
> I don't think it is a really big issue, but it really may change
> behavior of some scripts.
> I think we should revert this patch, before we get complete solution for
> compile-time expression evaluation (not in 5.3 of course).
>
> Thanks. Dmitry.
>
> Stanislav Malyshev wrote:
> > Hi!
> >
> >>     static $a = -'abc'; // 0
> >>     static $b = +'abc'; // abc
> >>     $c = +'abc'; // 0
> >> }
> >
> > We could get into trouble here. Imagine:
> > static $a = -'12.8';
> >
> > This should be -12.8, but what if locale changes and . is no longer
> > decimal separator? Moreover, what if locale changes between compile and
> > runtime? We get entirely different code now.
> >
> >> Well, I don't know if it can be tossed in quickly at this time, but
> >> there ya
> >> go since I think it's pretty basic! ;^)
> >
> > I think it's not the feature that can be "tossed in quickly" - it can
> > have some obscure side effects, as I described in my later emails.


-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to