Re: Asymmetric visibility is a BC break

From: Date: Mon, 14 Oct 2024 11:29:19 +0000
Subject: Re: Asymmetric visibility is a BC break
References: 1 2 3 4 5 6 7 8 9 10  Groups: php.internals 
Request: Send a blank email to internals+get-125801@lists.php.net to get a copy of this message
On 10/14/24 4:37 AM, Valentin Udaltsov wrote:
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.
Then perhaps we should change the name of the thread, since the title of this is rather confusing.
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.
There are some major problems with this ideal: 1. Often, a partially working library (because of a bug that only occurs with new PHP features) is of more use than one that doesn't work at all because of version constraints 2. With upper version constraints if any of the projects you depend on aren't on the ball it will hold you back from upgrading PHP versions. You are now only as up-to-date as the slowest of your dependencies (Regardless whether the upper version constraint is warranted because of an impending bug) 3. Any project that already has the typical php >= 8.2 constraint can NEVER use upper version constraints: If you decide to add an upper version constraint eg. php >= 8.3 < 8.5 then years down the line with php >= 10.1 < 10.3 everyone who updates to 10.3 will still be installing the years old >= 8.2 version which is the latest one they are "compatible" with. This will cause far more breakage if the library isn't up to date than without the upper version constraint. I don't know if it's technically possible to force push new tags with a changed composer.json for all old versions of a library but just typing that out sounds scary.

« previous php.internals (#125801) next »