On Mon, 14/10/2024 05:01, Jordan LeDoux <jordan.led...@gmail.com>:
>
>
>
> On Sun, Oct 13, 2024 at 5:03 PM Valentin Udaltsov 
> <udaltsov.valen...@gmail.com> wrote:
>>
>> On Mon, 14 Oct 2024 at 01:28, Jordan LeDoux <jordan.led...@gmail.com>:
>> > Backwards compatible has never, in any work I've done through my entire 
>> > career, meant something like "if you take old code and then update it to 
>> > the new version incorrectly, it doesn't work"... that seems... obvious?
>> >
>> > What exactly is the claim being made here? Because it sounds like the 
>> > claim is very much that second "definition".
>> >
>> > Jordan
>>
>> Hi, Jordan!
>>
>> The problem is that in practice most of the PHP libraries consider
>> themselves to be compatible with newer PHP versions.
>>
>> For instance, Symfony PropertyInfo uses `"php": ">=8.2"` constraint in
>> its `composer.json`. However, it is not compatible with PHP 8.4, I've
>> just created an issue: https://github.com/symfony/symfony/issues/58556
>>
>> The end user will be the victim, because `composer require
>> symfony/property-info` will happily install property-info v7.1.4 for
>> PHP 8.4, but it's not gonna work.
>>
>> --
>> Valentin
>
>
> How does a library that uses code that will not even compile (like `readonly` 
> or `private(set)`), but claims to not require a PHP version that uses the 
> syntax, suddenly make a BC problem for the language? Composer allows 
> libraries to set minimum PHP versions for releases. Any time you update your 
> libraries, you may have to update your code which uses it. That's just part 
> of how libraries work.
>
> Jordan

First of all, I have already agreed above that PHP does not have a BC
break here. Now we are discussing the potential problems in the PHP
ecosystem and how they could be mitigated.

> Composer allows libraries to set minimum PHP versions for releases.

I think you've got the problem wrong. The problem is about the maximum
version, not the minimum one.

Consider the Symfony issue I've just reported:
https://github.com/symfony/symfony/issues/58556

Symfony PropertyInfo requires `php >= 8.2`. And it is written in PHP
8.2 syntax. So it can be safely installed and used in PHP 8.2 and 8.3.
In other words it's forward compatible. However, the `php >= 8.2`
constraint also allows installing it in PHP 8.4. And as it turned out,
PropertyInfo is not ready for 8.4 syntax (see my reproducer
https://github.com/vudaltsov/symfony-property-access-php84). In my
opinion, this is a problem, because a PHP 8.4 user can install the
library without any obstacles and only later find out that `private
(set)` properties do not work as expected there. Ideally
`symfony/property-info` should not be installable until it ensures to
be compatible with all the PHP 8.4 features. So, its PHP constraint
should be `>=8.2 && <8.4`. And then `>=8.2 && <8.5`, once the tests
pass for PHP 8.4 features.

--
Best regards,
Valentin

Reply via email to