On Fri, Oct 18, 2019 at 3:18 AM Victor Stinner <vstin...@python.org> wrote:

> If possible, please try to read the whole PEP before replying. I would
> prefer to avoid knee-jerk reactions :-) The backward compatibility is
> complex topic where things are not black or white: it's more a
> grayscale.


The proposal seems to add another dimension to the complexity the language
is already facing. So instead of trying to keep up with different versions
(and how they affect the core functionality or stdlib, or 3rd party libs),
it adds another degree of freedom to area, so it is no longer identified by
the version it supports only, but also by (possibly) a list of
compatibility versions it also supports and on which functionality subset.

Determining the target version for the project in this environment will
become a serious task for an optimizer:

If someone maintains a project on version A and version B introduces some
new features and breaks some other things he may:
1) either backport the relevant new things from B to his project,
2) migrate the project from A to B
3) leave it be
Whatever he will choose would depend on the importance and effort required
and I would consider this to be a "standard" approach and I do not see
anything wrong with that.

Now, let's say B introduces some new features and breaks some things and
provides B(a) compatibility mode for 'a' functionality. Now the project
maintainer has new options (apart from the previous ones):

4) Convince Python devs to define 'a' as such that B(a) will cover his
project "legacy" code, so he would be able to switch to B(a) without doing
anything.
5) If the lobbying does not succeed he still may be able to use B(a) and
just migrate from A to B(a) (assuming that A->B(a) is less effort than full
A->B).

In both last cases the project will find itself in a "compatibilty version"
in between, i.e. neither runs on pure A, nor on pure B. Now imagine the
project will use 3rd party lib, which may run on A, or B, but would not
support B(a) (i.e. mixing the different features from both versions A and B
will break the lib). Maybe he will be able to run the lib in a restricted
"pure A" version mode (because the project will not need the other
non-compatible functionality), or in a restricted "pure B" (for the same
reason), or he may try to convince the 3rd party lib dev to support also
B(a).

Would I venture into B(a) land with my project? Definitely not. But I am
writing "small stuff" (experimental code, which usually depends on 3rd
party code as well).

I would be interested to know, from people who do the "serious stuff",
business logic, production code, how they feel about it and how they plan
to do lobbying at the core-devs to get the right B(a).

Richard
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/QHUY74W2LPA2VIFPTZYIF6QMUPAC6644/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to