When I was reading RFC https://github.com/rust-lang/rfcs/blob/master/text/0320-nonzeroing-dynamic-drop.md, then I came across the code segment:
#[deriving(Show)]
struct AnnounceDrop { name: &'static str }
impl Drop for AnnounceDrop {
fn drop(&mut self) { println!("dropping {}", self.name); }
}
fn foo<A>(a: [A, ..3], i: uint) -> A {
a[i]
}
fn main() {
let a = [AnnounceDrop { name: "fst" },
AnnounceDrop { name: "snd" },
AnnounceDrop { name: "thd" }];
let r = foo(a, 1);
println!("foo returned {}", r);
}
where I was interested to see how rustc will handle it, as expected, this code does not compile today:
error[E0508]: cannot move out of type `[A; 3]`, a non-copy array
--> /tmp/test.rs:13:5
|
13 | a[i]
| ^^^^ cannot move out of here
error: aborting due to previous error
Then I realize there must be an RFC that alter the semantics of the compiler, which I think is https://github.com/nox/rust-rfcs/blob/master/text/0533-no-array-elem-moves.md
Here comes a problem, as RFCs grows in numbers, how could a new comer follow the changes of Rust and have a good view of the current state?
I guess adding a section where it states what newer RFCs have fully/partially obsolete what part of this RFC would be a great help to follow the evolution of Rust.