On Tue, Apr 21, 2020 at 9:35 PM Gregory P. Smith <g...@krypto.org> wrote:

> Could we go ahead and mark lib2to3 as Pending Deprecation in 3.9 so we can
> get it out of the stdlib by 3.11 or 3.12?
>

I'm going ahead and tracking the idea in https://bugs.python.org/issue40360.


>
> lib2to3 is the basis of all sorts of general source code manipulation
> tooling.  Its name and original reason d'etre have moved on.  It is
> actively used to parse and rewrite Python 3 code all the time.  yapf uses
> it, black uses a fork of it.  Other Python code manipulation tooling uses
> it.  Modernize like fixers are useful for all sorts of cleanups.
>
> IMNSHO it would be better if lib2to3 were *not* in the stdlib anymore -
> Black already chose to fork lib2to3
> <https://github.com/psf/black/tree/master/blib2to3>.  So given that it is
> eventually not going to be able to parse future syntax, the better answer
> seems like deprecation, putting the final version up on PyPI and letting
> any descendants of it live on PyPI where they can get more active care than
> a stdlib module ever does.
>
> -gps
>
>
> On Tue, Apr 21, 2020 at 6:58 PM Guido van Rossum <gu...@python.org> wrote:
>
>> Great! Please submit a PR to update the [lib]2to3 docs and CC me
>> (@gvanrossum).
>>
>> While perhaps it wouldn't hurt if the PEP mentioned lib2to3, it was just
>> accepted by the Steering Council without such language, and I wouldn't want
>> to imply that the SC agrees with everything I said. So I still think we
>> ought to deal with lib2to3 independently (and no, it won't need its own PEP
>> :-). A reasonable option would be to just deprecate it and recommend people
>> use parso, LibCST or something else (I wouldn't recommend pegen in its
>> current form yet).
>>
>> On Tue, Apr 21, 2020 at 6:21 PM Carl Meyer <c...@oddbird.net> wrote:
>>
>>> On Sat, Apr 18, 2020 at 10:38 PM Guido van Rossum <gu...@python.org>
>>> wrote:
>>> >
>>> > Note that, while there is indeed a docs page about 2to3, the only docs
>>> for lib2to3 in the standard library reference are a link to the source code
>>> and a single "Note: The lib2to3 API should be considered unstable and may
>>> change drastically in the future."
>>> >
>>> > Fortunately,  in order to support the 2to3 application, lib2to3
>>> doesn't need to change, because the syntax of Python 2 is no longer
>>> changing. :-) Choosing to remove 2to3 is an independent decision. And
>>> lib2to3 does not depend in any way on the old parser module. (It doesn't
>>> even use the standard tokenize module, but incorporates its own version
>>> that is slightly tweaked to support Python 2.)
>>>
>>> Indeed! Thanks for clarifying, I now recall that I already knew it
>>> doesn't, but forgot.
>>>
>>> The docs page for 2to3 does currently say "lib2to3 could also be
>>> adapted to custom applications in which Python code needs to be edited
>>> automatically." Perhaps at least this sentence should be removed, and
>>> maybe also replaced with a clearer note that lib2to3 not only has an
>>> unstable API, but also should not necessarily be expected to continue
>>> to parse future Python versions, and thus building tools on top of it
>>> should be discouraged rather than recommended. (Maybe even use the
>>> word "deprecated.") Happy to submit a PR for this if you agree it's
>>> warranted.
>>>
>>> It still seems to me that it wouldn't hurt for PEP 617 itself to also
>>> mention this shift in lib2to3's effective status (from "available but
>>> no API stability guarantee" to "probably will not parse future Python
>>> versions") as one of its indirect effects.
>>>
>>> > You've mentioned a few different tools that already use different
>>> technologies: LibCST depends on parso which has a fork of pgen2, lib2to3
>>> which has the original pgen2. I wonder if this would be an opportunity to
>>> move such parsing support out of the standard library completely. There are
>>> already two versions of pegen, but neither is in the standard library:
>>> there is the original pegen repo which is where things started, and there
>>> is a fork of that code in the CPython Tools directory (not yet in the
>>> upstream repo, but see PR 19503).
>>> >
>>> > The pegen tool has two generators, one generating C code and one
>>> generating Python code. I think that the C generator is really only
>>> relevant for CPython itself: it relies on the builtin tokenizer (the one
>>> written in C, not the stdlib tokenize.py) and the generated C code depends
>>> on many internal APIs. In fact the C generator in the original pegen repo
>>> doesn't work with Python 3.9 because those internal APIs are no longer
>>> exported. (It also doesn't work with Python 3.7 or older because it makes
>>> critical use of the walrus operator. :-) Also, once we started getting
>>> serious about replacing the old parser, we worked exclusively on the C
>>> generator in the CPython Tools directory, so the version in the original
>>> pegen repo is lagging quite a bit behind (is is the Python grammar in that
>>> repo). But as I said you're not gonna need it.
>>> >
>>> > On the other hand, the Python generator is designed to be flexible,
>>> and while it defaults to using the stdlib tokenize.py tokenizer, you can
>>> easily hook up your own. Putting this version in the stdlib would be a
>>> mistake, because the code is pretty immature; it is really waiting for a
>>> good home, and if parso or LibCST were to decide to incorporate a fork of
>>> it and develop it into a high quality parser generator for Python-like
>>> languages that would be great. I wouldn't worry much about the duplication
>>> of code -- the Python generator in the CPython Tools directory is only used
>>> for one purpose, and that is to produce the meta-parser (the parser for
>>> grammars) from the meta-grammar. And I would happily stop developing the
>>> original pegen once a fork is being developed.
>>>
>>> Thanks, this is all very clarifying! I hadn't even found the original
>>> gvanrossum/pegen repo, and was just looking at the CPython PR for PEP
>>> 617. Clearly I haven't been following this work closely.
>>>
>>> > Another option would be to just improve the python generator in the
>>> original pegen repo to satisfy the needs of parso and LibCST. Reading the
>>> blurb for parso it looks like it really just parses *Python*, which is less
>>> ambitious than pegen. But it also seems to support error recovery, which
>>> currently isn't part of pegen. (However, we've thought about it.) Anyway,
>>> regardless of how exactly this is structured someone will probably have to
>>> take over development and support. Pegen started out as a hobby project to
>>> educate myself about PEG parsers. Then I wrote a bunch of blog posts about
>>> my approach, and finally I started working on using it to generate a
>>> replacement for the old pgen-based parser. But I never found the time to
>>> make it an appealing parser generator tool for other languages, even though
>>> that was on my mind as a future possibility. It will take some time to
>>> disentangle all this, and I'd be happy to help someone who wants to work on
>>> this.
>>>
>>> This seems like the place to start. When we start work on Python 3.10
>>> support for LibCST, we can start with trying to use and adapt pegen in
>>> place of the vendored fork of parso we currently use, and if that's
>>> promising enough, consider taking over maintenance of it.
>>>
>>> Carl
>>>
>>
>>
>> --
>> --Guido van Rossum (python.org/~guido)
>> *Pronouns: he/him **(why is my pronoun here?)*
>> <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
>> _______________________________________________
>> Python-Dev mailing list -- python-dev@python.org
>> To unsubscribe send an email to python-dev-le...@python.org
>> https://mail.python.org/mailman3/lists/python-dev.python.org/
>> Message archived at
>> https://mail.python.org/archives/list/python-dev@python.org/message/RDV3GAL2SPBGDAOX27ZMXMX7SETZ3D7M/
>> Code of Conduct: http://python.org/psf/codeofconduct/
>>
>
_______________________________________________
Python-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/Q4SBIFUGFKYIJ437FG5IS7YNESS2C5LI/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to