about the borrowing example
Opened this issue · 2 comments
Hi, I'm new to Rust and trying the sample in this doc
https://learning-rust.github.io/docs/borrowing/
The code
fn main() {
let mut a = vec![1, 2, 3];
let b = &mut a; // &mut borrow of `a` starts here
// some code
b[1] = 123;
println!("{:?}", a); // trying to access `a` as a shared borrow, so giving an error
} // &mut borrow of `a` ends here
It seems to compile and run fine without any error on my machine
ubt :: testbin ‹master› % rustc --version 1 ↵
rustc 1.78.0 (9b00956e5 2024-04-29)
ubt :: testbin ‹master› % cargo run
Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s
Running `target/debug/testbin`
[1, 123, 3]
Is it intended, or something has changed from the language itself.
i'm new in rust too, i compiled this code and received the same result that u. I know that the language is retro-compatibility. In my mind that is just a mistake in documentation. I think that the correct code to get an error is
fn main() {
let mut a = vec![1, 2, 3];
let b = a; // &mut borrow of `a` starts here
// some code
b[1] = 123;
println!("{:?}", a); // trying to access `a` as a shared borrow, so giving an error
}
In this case the ownership of a is moved to b, and you can't access a in the print line
@trichimtrich Thanks for highlighting this. In 2018-2022, Rust ecosystem added more improvements for lifetimes, especially to improve DX; https://users.rust-lang.org/t/multiple-mutable-references-in-scope/20936 but the given code block was written in 2017. I think I need to double check NLLs in the examples of those sections and update them.