• anton@lemmy.blahaj.zone
    link
    fedilink
    arrow-up
    1
    ·
    edit-2
    1 day ago

    But you’re also missing one use of the impl keyword: fn func() -> impl Trait.

    […] So dropping the impl in [return position] might not be completely impossible like the other uses of impl.

    But the impl markes that it is a trait to the programmers.
    Take the following functions:

    func1()->A{...}
    func2()->A{...}
    

    Does the following snippet compile?

    let mut thing = func1();
    thing = func2();
    

    Under the current rules we know it will. But if A could be a trait, the functions could return different types. We currently mark that with the impl.


    Why? What value does -> () provide? Why not elide that?

    What value is provided by keeping it?

    What value does cluttering up your code with -> () provide?

    Why a syntactic special-case for exactly that type and not any other random type?

    Because the unit type is special, just like the never ! type. () also has the special importance of being the return value of an empty statement and some other stuff.


    languages w/o [semicolons] feel awkward since you’re generally limited to one statement per line

    Then fixing that might make sense. :-)

    It’s fixed with semicolons ;-)