[Python-ideas] Code version evolver
Chris Angelico
rosuav at gmail.com
Fri Mar 15 21:37:36 EDT 2019
On Sat, Mar 16, 2019 at 12:28 PM Steven D'Aprano <steve at pearwood.info> wrote:
>
> On Fri, Mar 15, 2019 at 08:10:58PM +0100, francismb wrote:
> > On 3/15/19 4:54 AM, Stephen J. Turnbull wrote:
> > > Not really. For example, addition of syntax like "async" and "yield"
> > > fundamentally changes the meaning of "def", in ways that *could not*
> > > be fully emulated in earlier Pythons. The semantics simply were
> > > impossible to produce -- that's why syntax extensions were necessary.
> > But here, the code for versions before that change (e.g. aync) also
> > worked on the new versions? there was not need to translate anything to
> > the new version as it was a backward compatible change. To use the new
> > feature you have to explicitly use that feature. If that so far correct?
>
> No, it is not a backwards compatible change. Any code using async as a
> name will fail.
>
> py> sys.version
> '3.8.0a2+ (heads/pr_12089:5fcd3b8, Mar 11 2019, 12:39:33) \n[GCC 4.1.2 20080704 (Red Hat 4.1.2-55)]'
> py> async = 1
> File "<stdin>", line 1
> async = 1
> ^
> SyntaxError: invalid syntax
Though that particular case is a little complicated.
Python 3.4.4 (default, Apr 17 2016, 16:02:33)
>>> async def foo():
File "<stdin>", line 1
async def foo():
^
SyntaxError: invalid syntax
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
and Python 3.6.5 (default, Apr 1 2018, 05:46:30)
>>> async def foo():
... pass
...
>>> async = 1
>>>
Python 3.7.0a4+ (heads/master:95e4d58913, Jan 27 2018, 06:21:05)
>>> async = 1
File "<stdin>", line 1
async = 1
^
SyntaxError: invalid syntax
So at what point do you call it a backward-incompatible change? And if
you have some sort of automated translation tool to "fix" this, when
should it rename something that was called "async"?
ChrisA
More information about the Python-ideas
mailing list