> On 7 Oct 2022, at 18:44, Larry Garfield <la...@garfieldtech.com> wrote:
>
> On Fri, Oct 7, 2022, at 5:58 AM, G. P. B. wrote:
>> On Fri, 7 Oct 2022 at 07:57, Christian Schneider <cschn...@cschneid.com>
>> wrote:
>>
>>> But now to my main point: You are talking about the most simple and
>>> isolated case, a new function.
>>>
>>
>> I agree, and for most intent and purposes a function can be polyfilled in
>> userland. So this is the least interesting case.
>>
>> However, I don't think this approach is that useful. To give an example,
>> for DNF types the implementation is based on a change in how iterable works
>> in PHP.
>> It went from a pseudo-type to a compile time alias, as this massively
>> simplified variance and LSP checks.
>> I would not want such a change to land in a patch release especially as it
>> turned out there was an unintended BC break with the compile time
>> redundancy which only got fixed in PHP8.2RC2.
>>
>>
>>> Your model may work fine with that but as soon as we are talking something
>>> like a syntax change we have some additional problems:
>>> - Enabling it with a prefix obviously does not work, something like
>>> declare() is definitely needed
>>> - Maintaining such changes to the engine / parser could turn out messy,
>>> e.g. lots of "if (experimental_x)"-like code in the core
>>> - The test suite would possibly have to deal with an exponential explosion
>>> of experimental feature combinations to make sure they don't interfere with
>>> each other.
>>>
>>> All in all I'm not sold yet that the benefit outweighs the cost of this
>>> approach.
>>>
>>
>> Ditto.
>>
>> When Nikita proposes editions back in 2020 (
>> https://github.com/nikic/php-rfcs/blob/language-evolution/rfcs/0000-language-evolution.md)
>> the point about them was mainly about backwards-incompatible changes,
>> not
>> new features.
>> Because in general new features don't have the same issues, especially
>> since the RFC process (although not without its issues) does force
>> thinking
>> about the design of it instead of just shoving something in php-src
>> randomly as in the before days.
>>
>> Best regards,
>>
>> George P. Banyard
>
> I think what would be useful here to better understand the value, if any,
> would be to look back at some recent RFCs, both those that passed and those
> that didn't, and imagine how they would have gone had there been an
> "experimental" flag option for them.
>
> Would they have been marked experimental at all? Why?
> What might have changed and when while in experimental phase?
> When would they have been removed instead of being adjusted?
> Etc.
>
> Some candidates to consider could be:
>
> 1. Named args
> 2. PIpes
> 3. PFA
> 4. Intersection types
> 5. Enums
> 6. JIT
> 7. FFI
>
> Personally I'm still highly skeptical that this would be useful, or useful
> enough to justify the engine complexity.
>
> Bear in mind that browsers had "experimental" CSS features for a while, and
> eventually abandoned prefixing as it was an absolute mess as the experimental
> features ended up in production and then had to be supported forever in that
> early, broken form. Instead, they switched to an opt-in flag in browser
> configuration (~php.ini setting) on the assumption that devs could play with
> it, but *it was completely impractical to ship to production* so no one did,
> so they could still change it. Experimental features never leave the dev's
> own computer until they are no longer experimental. That has worked out a
> lot better.
>
> We should learn from that experience.
>
> --Larry Garfield
>
> --
> PHP Internals - PHP Runtime Development Mailing List
> To unsubscribe, visit: https://www.php.net/unsub.php
>
I don't think it's valid to compare browser (client side) and PHP (server
side): browser versions and support is not controlled by the server, so it's
not fair to expect client-side experimental features to perform as good as
server-side ones. If there's anyone to learn from, it should be Kotlin or other
server languages.
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: https://www.php.net/unsub.php