Rémi (cc'ing Philipp and rust-dev list)-
We track bugs, work-items, and (some) feature requests here:
https://github.com/mozilla/rust/issues
Cheers,
-Felix
On 25/06/2013 12:18, Rémi Fontan wrote:
good to know. should I be reporting the bug to some sort of
bug-report-system?
Rémi
On Mon, Jun 24, 2013 at 11:48 PM, Philipp Brüschweiler
<[email protected] <mailto:[email protected]>> wrote:
Hi Rémi,
Yes, this looks like a compiler bug to me.
Cheers,
Philipp
On Mon, Jun 24, 2013 at 1:07 PM, Rémi Fontan <[email protected]
<mailto:[email protected]>> wrote:
I have another example that puzzles me.
struct Vec { x:float, y:float, z:float }
impl Vec {
pub fn getRef<'a>(&'a mut self, i:uint) -> &'a mut float {
// if(i==0) { &mut self.x }
// else if(i==1) { &mut self.x }
// else {&mut self.x }
match(i) {
0 => &mut self.x,
1 => &mut self.y,
_ => &mut self.z
}
}
}
when compiling with match I get following errors :
rustc test.rs <http://test.rs> -o test-test --test
test.rs:122:17: 122:28 error: cannot infer an appropriate
lifetime due to conflicting requirements
test.rs:122 <http://test.rs:122> _ => &mut self.z
^~~~~~~~~~~
test.rs:121:17: 121:28 note: first, the lifetime must be
contained by the expression at 121:17...
test.rs:121 <http://test.rs:121> 1 => &mut self.y,
^~~~~~~~~~~
test.rs:121:17: 121:28 note: ...due to the following expression
test.rs:121 <http://test.rs:121> 1 => &mut self.y,
^~~~~~~~~~~
test.rs:120:17: 120:28 note: but, the lifetime must also be
contained by the expression at 120:17...
test.rs:120 <http://test.rs:120> 0 => &mut self.x,
^~~~~~~~~~~
test.rs:120:17: 120:28 note: ...due to the following expression
test.rs:120 <http://test.rs:120> 0 => &mut self.x,
^~~~~~~~~~~
error: aborting due to previous error
make: *** [test-test] Error 101
but it compiles correctly with the if version. I don't
understand why it's not behaving the same way. Actually I
don't understand why the compiler is not capable of finding
out about the life cycle on its own for this particular
example. Could the life cycle of the return type of getRef be
inferred from the lifecycle of the intersection of {self.x,
self.y, self.z} ?
cheers,
Rémi
On Mon, Jun 24, 2013 at 2:32 AM, Philipp Brüschweiler
<[email protected] <mailto:[email protected]>> wrote:
Hi Rémi,
Yes, the documentation of Rust is not very good at the
moment. The concept and syntax of lifetimes is explained
in this and the following chapter:
http://static.rust-lang.org/doc/tutorial-borrowed-ptr.html#returning-borrowed-pointers
The only single quotes are only used to declare literal
characters, e.g. 'c', and lifetime variables.
Cheers,
Philipp
On Sun, Jun 23, 2013 at 12:03 PM, Rémi Fontan
<[email protected] <mailto:[email protected]>> wrote:
thanks, it works.
however it is not yet very clear to me how lifetime
works in rust. is there a bit of doc that explain
about the concept of lifetime and the syntax?
is using a quote before the lifetime variable
necessary? I realised that the first time I read the
rust tutorial I saw a lot of variables with a quote in
front of their name, I simply ignore that details and
went ahead. Were there all lifetime variables?
cheers,
Rémi
On Sat, Jun 22, 2013 at 8:47 PM, Philipp Brüschweiler
<[email protected] <mailto:[email protected]>> wrote:
Hi Rémi,
The problem in your code was that you have to
return a &mut reference. Here's a version of your
code that works:
```
struct Mat {
data:[float, ..16]
}
impl Mat {
pub fn new() -> Mat {
Mat { data: [0.0, ..16] }
}
pub fn Get<'a>(&'a mut self, r:int, c:int) ->
&'a mut float {
&mut self.data[r+c*4]
}
}
fn main() {
let mut a = Mat::new();
*a.Get(0, 0) = 5.0;
println(fmt!("%?", a));
}
```
Note that besides taking an &mut reference, we
have to tell the compiler that the lifetime of
that reference is the same as of the original
object, which is done by anotating both references
with the same lifetime variable ('a in this code).
Cheers,
Philipp
On Sat, Jun 22, 2013 at 10:35 AM, Rémi Fontan
<[email protected] <mailto:[email protected]>>
wrote:
Hi,
is there a way to write something as follow in
rust?
class matrix {
...
float& Get(int r, int c) { return
this.data[r + c*4]; }
}
matrix m;
m.Get(0, 1) = 42.;
in trust, my struct matrix would have a method
called Get, but what would it return?
struct Mat {
data:[float, ..16]
}
impl Mat {
pub fn Get(&mut self, r:int, c:int) ->
&mut float {
&self.data[r+c*4]
}
}
I get error messages about lifetime or about
mutability
est.rs:107:8: 107:24 error: mismatched types:
expected `&mut float` but found `&float`
(values differ in mutability)
test.rs:107 <http://test.rs:107> &self.data[r*4+c]
^~~~~~~~~~~~~~~~
cheers,
Remi
--
Rémi Fontan : [email protected]
<mailto:[email protected]>
mobile: +64 21 855 351
<tel:%2B64%2021%20855%20351>
93 Otaki Street, Miramar 6022
Wellington, New Zealand
_______________________________________________
Rust-dev mailing list
[email protected] <mailto:[email protected]>
https://mail.mozilla.org/listinfo/rust-dev
--
Rémi Fontan : [email protected]
<mailto:[email protected]>
mobile: +64 21 855 351 <tel:%2B64%2021%20855%20351>
93 Otaki Street, Miramar 6022
Wellington, New Zealand
--
Rémi Fontan : [email protected] <mailto:[email protected]>
mobile: +64 21 855 351 <tel:%2B64%2021%20855%20351>
93 Otaki Street, Miramar 6022
Wellington, New Zealand
--
Rémi Fontan : [email protected] <mailto:[email protected]>
mobile: +64 21 855 351
93 Otaki Street, Miramar 6022
Wellington, New Zealand
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev
--
irc: pnkfelix on irc.mozilla.org
email: {fklock, pnkfelix}@mozilla.com
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev