Yeah, PEP 585 should definitely get pushed through! That would be super
useful all around.

Besides that, I think PEP 563 would mitigate most of the slowdown at
runtime introduced by 604. The only exceptions would be explicit like
assigning variables to types (int_list = List[int]) or dataclasses and the
like.

----

And a sidenote on 563: wouldn't this pep allow us to use basic annotations
without *having* to import typing (technically speaking)? For all PEP 563
cares, this would be valid code:

var1: List[Tuple[int, str]] # List and Tuple not imported
my_var: Definitely_not_a_type = 42

Maybe a complementary PEP to 563 would make it standard to use unresolved
type annots without importing the typing module. Unless you have something
that uses annotations at runtime, I don't see a need to import the library
at all. Static analysis tools would import typing themselves to do their
magic.

But that is also, unfortunately, pushing more work onto them and other
tools like autocomplete...

On Fri, Mar 13, 2020 at 10:01 PM Guido van Rossum <gu...@python.org> wrote:

> I think we should try to get PEP 604 accepted, with the runtime option
> (a), since that's the way we've gone already.
>
> PEP 604 proposes the right syntax, and I think mostly the right semantics
> (one could quibble about whether isinstance()/issubclass() ought to accept
> unions). Unfortunately it does not have a reasonable reference
> implementation. (The mypy patch looks okay, but the CPython patch is not
> realistic, since it attempts to import typing.py from the C code for |.)
>
> There is another PEP, PEP 585, which is complete (in fact, we should just
> submit it to the SC for review!). There is also a basically complete
> implementation, in C. It introduces a C type types.GenericAlias (note:
> types, not typing!) which is used to represent generics involving builtins
> at runtime, e.g. after "a = list[int]", a.__origin__ points to 'list' and
> a.__args__ is the tuple (int,).
>
> Here's an idea for an implementation of `a | b` based on that. A union
> could be an instance of types.GenericAlias whose __args__ is (a, b) and
> whose __origin__ points to some dummy type (implemented in C) that's only
> used to mark it as a union.
>
_______________________________________________
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/Z4QAIBA6RWPPNTMCS5RT5NOKYREIXK44/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to