Have you considered making deref the default instead and requiring moves to use 
an explicit "move" keyword?

Basically, from this hypothetical syntax to current one:
- x => &x
- mut x => &mut x
- move x => x

One could even make the & implicit in parameter types in function declarations 
unless the "move" keyword is used, so we would have (new => old syntax):
- fn(self, ...) => fn(&self, ...)
- fn(mut self, ...) => fn(&mut self, ...)
- fn(move self, ...) => fn(self, ...)

Regarding owned pointers, one could introduce this syntax:
let *x = func_that_gives_owned_pointer()

which makes x a variable of type T referring to the contents of the owned box, 
and thus derefed to & when passed to a function as above without having to 
write "*x" in the function call.

One could then add a new "#x" or similar syntax that would get back to the 
owned pointer.

Not sure if all this is a good idea, just throwing it out there. I actually 
think keeping autoref/autoderef is probably better.

                                          
_______________________________________________
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to