Thanks Eric. I thought it might change it (based on the presentation he gave). The blog post still requires (another) reread :-).
On Tue, Feb 4, 2014 at 11:43 PM, John Grosen <[email protected]> wrote: > Niko's DST changes may involve allowing bounds in type definitions, which > includes structs. You can read more > here<http://smallcultfollowing.com/babysteps/blog/2014/01/05/dst-take-5/> > . > > Okay, I guess it was part of DST, then. That proposal had a lot of content > in it! > > -- > John Grosen > > On Tuesday, February 4, 2014 at 1:41 PM, Eric Reed wrote: > > Niko's DST changes may involve allowing bounds in type definitions, which > includes structs. You can read more > here<http://smallcultfollowing.com/babysteps/blog/2014/01/05/dst-take-5/> > . > > > On Tue, Feb 4, 2014 at 1:31 PM, Marc Bowes <[email protected]> wrote: > > I see, thanks. Just to be clear, is this correct then? > > ``` > trait MyTrait { > fn be_traity(&self); > } > > struct MyImpl { > my_field: u32 > } > > impl MyTrait for MyImpl { > fn be_traity(&self) {} > } > > struct MyStruct<'a, T> { > my_field: &'a T > } > > impl<'a, T: MyTrait> MyStruct<'a, T> { > fn new(my_field: &'a T) -> MyStruct<'a, T> { > MyStruct { > my_field: my_field > } > } > } > > fn main() { > let my_field = MyImpl { my_field: 0 }; > let my_struct = MyStruct::new(&my_field); > } > ``` > > The main differences being: > > 1) The struct definition for MyStruct no longer gives any clue as to what > my_field might be (this seems weird to me) > 2) The impl now includes 'T: MyTrait' and returns the templated MyStruct > > How (if at all) will Niko's DST changes impact this? More broadly, what > else might impact this in the (short/medium-term) future? #1 bothers me a > bit (right now :-)). > > Thanks! > > > On Tue, Feb 4, 2014 at 11:21 PM, John Grosen <[email protected]> wrote: > > The problem here is that you are using a trait object in the struct > definition rather than a generic; at the moment, struct generics cannot > have trait bounds, though, so the code for the struct would be simply: > > ``` > struct MyStruct<'a, T> { > my_field: &'a T > } > ``` > > Then the `impl` code should be exactly as you have now. > > -- > John Grosen > > On Tuesday, February 4, 2014 at 1:16 PM, Marc Bowes wrote: > > Hello, > > I'm trying to implement a struct where one of the fields is a reference > and therefore has bounded lifetime. The reason I would like it to be a > reference is to encourage sharing of the value in question as setup of said > value might be expensive. In my specific example, the value is a session > manager and opening said session is expensive. > > I have come up with the following > > ``` > trait MyTrait { > fn be_traity(&self); > } > > struct MyImpl { > my_field: u32 > } > > impl MyTrait for MyImpl { > fn be_traity(&self) {} > } > > struct MyStruct<'a> { > my_field: &'a MyTrait > } > > impl<'a> MyStruct<'a> { > fn new<T: MyTrait>(my_field: &'a T) -> MyStruct { > MyStruct { > my_field: my_field > } > } > } > > fn main() { > let my_field = MyImpl { my_field: 0 }; > let my_struct = MyStruct::new(&my_field); > } > ``` > > This fails to compile: > > rust-lifetimes-with-references.rs:20:23: 20:31 error: value may contain > references; add `'static` bound > rust-lifetimes-with-references.rs:20 my_field: my_field > ^~~~~~~~ > > This confuses me because "may contain references" is exactly what I want? > I want to assign it as a ref.. If I slap on a & in the assignment (for no > good reason other than being confused): > > MyStruct { > my_field: &my_field > } > > Then I get: > > rust-lifetimes-with-references.rs:20:23: 20:32 error: failed to find an > implementation of trait MyTrait for &'a T > rust-lifetimes-with-references.rs:20 my_field: &my_field > > --- > > I'm clearly doing something stupid but cannot find a reference example.. > _______________________________________________ > Rust-dev mailing list > [email protected] > https://mail.mozilla.org/listinfo/rust-dev > > > > > _______________________________________________ > Rust-dev mailing list > [email protected] > https://mail.mozilla.org/listinfo/rust-dev > > > >
_______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
