Benjamin Striegel writes:

    Sadly, you should really read this subsequent blog post:

    
http://smallcultfollowing.com/babysteps/blog/2013/01/15/lifetime-notation-r
edux/

Ok, here's another suggestion:


    pure fn each</f/>(&self, f: fn(&(&/f/K, &/f/V)) -> bool) { ... }


Lifetimes are always written in slashes. We drop the convention
of using a /self/ lifetime. We require the explicit lifetime
parameter on the function, to minimize magic.

-----------
    struct StringReader</s/> {
        value: &/s/str,
        count: uint
    }


    struct Foo</f/, T: Reader+Eq> {
        value: &/f/T,
        count: uint
    }

We treat the lifetime as a type parameter, in <...>. We stick to
requiring that it be explicit on the struct and the field, to
minimize magic. I believe this meets Niko's goal of recognizing
lifetimes in the parser.

-------------
    struct RefPair</fst/, /snd/, T> {
         first: &/fst/T,
         second: &/snd/T
    }

Multiple lifetime parameters on a struct work fine.
It is clear both to the human reader and to the parser
that /snd/ is another lifetime while T is a type.

-------------
    impl StringReader {
        fn new</f/>(value: &/f/str) -> StringReader</f/> {
            StringReader { value: value, count: 0 }
        }
    }



    fn value</f/>(s: &/f/StringReader</f/>) -> &/f/str {
        return s.value;
    }


Lots of characters, yes, but the author of the code is
intentionally exercising great control, so I feel it is
worth spelling out what is going on. To my eye, the
consistency of always writing the lifetime in the same
way, /f/, helps tie the mentions of it together. Although
&/f/str is less concise than today's syntax &f/str, I
feel that &/f/str alerts the C++-trained reader that
something special is going on, and perhaps even suggests
that f is a modifier of some kind.


---------------
    fn remaining(s: &StringReader) -> uint {
        return s.value.len() - s.count;
    }

Here, the author has chosen to exercise less control.

We default to scoping the lifetimes across the function
declaration.

---------------

It's a thought!

Dean


_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to