Possibly relevant for tilde:
https://www.thecut.com/article/why-the-internet-tilde-is-our-most-perfect-tool-for-snark.html

On Thu, Aug 29, 2019 at 5:09 PM Dominik Vilsmeier <dominik.vilsme...@gmx.de>
wrote:

> Guido van Rossum wrote:
> > On Thu, Aug 29, 2019 at 4:04 PM Dominik Vilsmeier
> dominik.vilsme...@gmx.de
> > wrote:
> > > I never really understood the importance of
> > > Optional. Often it can be
> > > left out altogether and in other cases I find Union[T, None] more
> > > expressive (explicit) than Optional[T] (+ the latter saves only 3
> > > chars).
> > > I respectfully disagree. In our (huge) codebase we see way more
> occurrences
> > of Optional than of Union. It's not that it saves a tremendous amount of
> > typing -- it's a much more intuitive meaning. Every time I see Union[T,
> > None] I have to read it carefully to see what it means. When I see
> > Optional[T] my brain moves on immediately (in a sense it's only one bit
> of
> > information).
>
> You are probably right, it's all a matter of how used our brains are to
> seeing stuff. So if I started using it more frequently, after some time I
> would probably appreciate it over `Union[T, None]`.
>
> > > Especially for people not familiar with typing, the
> > > meaning of Optional
> > > is not obvious at first sight. Union[T, None] on the other hand is
> pretty
> > > clear. Also in other cases, where the default (fallback) is different
> from
> > > None, you'd have to use Union anyway. For example a function
> > > that
> > > normally returns an object of type T but in some circumstances it
> cannot
> > > and then it returns the reason as a str, i.e. -> Union[T,
> > > str];
> > > Optional won't help here. Scanning through the docs and PEP I can't
> find
> > > strongly motivating examples for Optional (over Union[T, None]).
> > > E.g.
> > > in the following:
> > > def lookup(self, name: str) -> Optional[Node]:
> > >     nodes = self.get(name)
> > >     if nodes:
> > >         return nodes[-1]
> > >     return None
> > >
> > > I would rather write Union[Node, None] because that's much more
> explicit
> > > about what happens.
> > > Then introducing ~T in place of Optional[T] just further
> > > obfuscates
> > > the meaning of the code:
> > > def lookup(self, name: str) -> ~Node:
> > >
> > > The ~ is easy to be missed (at least by human readers) and the meaning
> > > not obvious.
> > > Do you easily miss the - in an expression like -2?
>
> I don't miss the `-` in the context because my brain is trained on
> recognizing such patterns. We encounter negative numbers everywhere, from
> (pre-)school on, so this pattern is easy to recognize. However `~Noun` is
> not something you've likely seen in the real world (or anywhere), so it's
> much harder to recognize. I cn wrt ths txt wtht vwls or eevn rdoerer teh
> lterets and you'll still be able to read it because your brain just fills
> in what it expects (i.e. what it is accustomed to). For that reason `~Node`
> is much harder to recognize than `-3637` because I wouldn't expect a `~` to
> appear in that place.
>
> > Surely the meaning of ? in a programming language also has to be learned.
> > And not every language uses it to mean "optional" (IIRC there's a
> language
> > where it means "boolean" -- maybe Scheme?)
> > > For Union on the other hand it would be
> > > more helpful to have a shorter
> > > syntax, int | str seems pretty clear, but what prevents tuples (int,
> > > str) from being interpreted as unions by type checkers. This doesn't
> > > require any changes to the built-in types and it is aligned with the
> > > already existing syntax for checking multiple types with isinstance or
> > > issubclass: isinstance(x, (int, str)). Having used this a couple
> > > of
> > > times, whenever I see a tuple of types I immediately think of them as
> or
> > > options.
> > > First, if we were to introduce (int, str) it would make
> > more sense for
> > it to mean Tuple[int, str] (tuples are also a very common type). Second,
> > comma is already very overloaded.
> > Yes, it's unfortunately that (int, str) means "union" in
> > isinstance()
> > but it's not enough to sway me.
> > Anyway, let's just paint the bikeshed some color. :-)
>
> I don't think it's unfortunate, it's pretty neat syntax (and intuitive).
> Checking if `x` is an instance of `y` it makes sense to "list" (`tuple`)
> multiple options for `y`. It's a clever way of reusing the available syntax
> / functionality of the language. And I think this is what typing should do
> as well: build around the existing language and use whatever is available.
> Adding `__or__` to `type` for allowing things like `int | str` on the other
> hand bends the language toward typing and thus is a step in the opposite
> direction.
>
> Then I don't think it's the comma that receives emphasis in the syntax
> `(int, str)`, it's rather the parens - and those, as a bonus, provide
> visual boundaries for the beginning and end of the union. Consider
>
>     def foo(x: str | int, y: list):
>
> versus
>
>     def foo(x: (str, int), y: list):
>
> The comma is a small character, visually the scene will be dominated by
> the matching parens - and whatever is inside is anyway a common sight as we
> are used to seeing tuples. Hence I think from readability perspective it's
> a plus to reuse existing, common syntax.
>
> I agree that there is the ambiguity with `(int, str)` being interpreted as
> `Tuple[int, str]` and this is a valid argument. Since I've used the
> `isinstance(x, (y,z))` syntax quite often I wouldn't interpret `(int, str)`
> as a tuple but of course for other people the situation might be completely
> different. Hence that could really be a blocker.
> _______________________________________________
> 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/ZONQON7O46YC666CGBBZ3XDX7SBWITOU/
> Code of Conduct: http://python.org/psf/codeofconduct/
>


-- 
--Guido van Rossum (python.org/~guido)
*Pronouns: he/him/his **(why is my pronoun here?)*
<http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________
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/X7U2ZVBQ6UCSXDODSVPPTUSUTAJX45WG/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to