Hi Nikita

Is the ini setting available in current 7.4 builds? Is it documented somewhere? 
I'd like to test this change in some of our projects.

Kind regards
Brent

> On 15 Jul 2020, at 10:28, Nikita Popov <nikita....@gmail.com> wrote:
> 
> On Tue, Jul 14, 2020 at 11:47 PM Björn Larsson <bjorn.x.lars...@telia.com 
> <mailto:bjorn.x.lars...@telia.com>>
> wrote:
> 
>> Den 2020-07-14 kl. 15:48, skrev Nikita Popov:
>>> On Thu, Jul 2, 2020 at 10:09 AM Nikita Popov <nikita....@gmail.com>
>> wrote:
>>> 
>>>> On Mon, Mar 4, 2019 at 6:00 PM Nikita Popov <nikita....@gmail.com>
>> wrote:
>>>> 
>>>>> On Wed, Feb 27, 2019 at 10:23 AM Zeev Suraski <z...@php.net> wrote:
>>>>> 
>>>>>> 
>>>>>> On Tue, Feb 26, 2019 at 2:27 PM Nikita Popov <nikita....@gmail.com>
>>>>>> wrote:
>>>>>> 
>>>>>>> Hi internals,
>>>>>>> 
>>>>>>> I think it is well known that == in PHP is a pretty big footgun. It
>>>>>>> doesn't
>>>>>>> have to be. I think that type juggling comparisons in a language like
>>>>>>> PHP
>>>>>>> have some merit, it's just that the particular semantics of == in PHP
>>>>>>> make
>>>>>>> it so dangerous. The biggest WTF factor is probably that 0 ==
>> "foobar"
>>>>>>> returns true.
>>>>>>> 
>>>>>>> I'd like to bring forward an RFC for PHP 8 to change the semantics
>> of ==
>>>>>>> and other non-strict comparisons, when used between a number and a
>>>>>>> string:
>>>>>>> 
>>>>>>> https://wiki.php.net/rfc/string_to_number_comparison
>>>>>>> 
>>>>>>> The tl;dr is that if you compare a number and a numeric string,
>> they'll
>>>>>>> be
>>>>>>> compared as numbers. Otherwise, the number is converted into a string
>>>>>>> and
>>>>>>> they'll be compared as strings.
>>>>>>> 
>>>>>>> This is a very significant change -- not so much because the actual
>> BC
>>>>>>> breakage is expected to be particularly large, but because it is a
>>>>>>> silent
>>>>>>> change in core language semantics, which makes it hard to determine
>>>>>>> whether
>>>>>>> or not code is affected by the change. There are things we can do
>> about
>>>>>>> this, for example the RFC suggests that we might want to have a
>>>>>>> transition
>>>>>>> mode where we perform the comparison using both the old and the new
>>>>>>> semantics and warn if the result differs.
>>>>>>> 
>>>>>>> I think we should give serious consideration to making such a change.
>>>>>>> I'd
>>>>>>> be interested to hear whether other people think this is worthwhile,
>> and
>>>>>>> how we could go about doing it, while minimizing breakage.
>>>>>>> 
>>>>>> I generally like the direction and think we should seriously consider
>> it.
>>>>>> 
>>>>>> I think that before we make any decisions on this, or even dive too
>> deep
>>>>>> into the discussion - we actually need to implement this behavior,
>>>>>> including the proposed INI setting you mentioned we might add in 7.4
>> - and
>>>>>> see what happens in some real world apps, at least in terms of
>> potential
>>>>>> danger (as you say, figuring out whether there's actual breakage would
>>>>>> require a full audit of every potentially problematic sample.
>> Ultimately,
>>>>>> I think there's no question that if we were to start from scratch,
>> we'd be
>>>>>> going for something along these lines.  But since we're not starting
>> from
>>>>>> scratch - scoping the level of breakage is key here.
>>>>>> 
>>>>>> Zeev
>>>>>> 
>>>>> Totally agree that assessing the amount of breakage in real code is key
>>>>> here. I have now implemented a warning for PHP 7.4 (for now
>> unconditional,
>>>>> no ini setting) that is thrown whenever the result of a comparison is
>> going
>>>>> to change under the currently proposed rules:
>>>>> https://github.com/php/php-src/pull/3917
>>>>> 
>>>>> I've done a few initial tests by running this against the Laravel,
>>>>> Symfony and pear-core. The warning was thrown 2 times for Laravel, 1
>> times
>>>>> for Symfony and 2 times for pear-core. (See PR for the results.)
>>>>> 
>>>>> Both of the warnings in pear-core pointed to implementation bugs. The
>>>>> Symfony warning was due to trailing whitespace not being allowed in
>> numeric
>>>>> strings (something we should definitely change). One of the Laravel
>>>>> warnings is ultimately a false-positive (does not change behavior),
>> though
>>>>> code could be improved to avoid it. I wasn't able to tell whether the
>> other
>>>>> one is problematic, as it affects sorting order.
>>>>> 
>>>>> I have to say that this is a lot less warnings than I expected. Makes
>> me
>>>>> wonder if I didn't make an implementation mistake ^^
>>>>> 
>>>>> Regards,
>>>>> Nikita
>>>>> 
>>>> As we're moving closer to PHP 8 feature freeze, I want to give this RFC
>> a
>>>> bump. I've updated the text to account for some changes that have
>> happened
>>>> in the meantime, such as the removal of locale-sensitivity for float to
>>>> string conversions.
>>>> 
>>>> It's been quite a while since we discussed this last, and back then the
>>>> discussion was fairly positive. Some experiments with a warning mode
>> also
>>>> showed that the impact, at least in framework/library code, appears to
>> be
>>>> fairly low in practice, contrary to what one might intuitively expect.
>>>> 
>>>> Now would be the time to decide whether or not we want to pursue this
>>>> change for PHP 8.
>>>> 
>>> And then there was silence...
>>> 
>>> I think I'll just put this up for vote on Friday, and we'll see what
>> people
>>> think :)
>>> 
>>> Nikita
>> 
>> Seems like a very good idea!! Especially in conjunction with the RFC:
>> - https://wiki.php.net/rfc/saner-numeric-strings
>> 
>> Btw, in the RFC there is a reference to the "Trailing whitespace in numeric
>> strings" RFC. Update to reference "Saner numeric strings" RFC instead?
>> 
> 
> Thanks, I've updated the link to point to the new proposal!
> 
> Nikita

Reply via email to