X-Git-Url: https://git.ralfj.de/rust-101.git/blobdiff_plain/20c3754739514b710a2e6744c9fd43bcb83c4706..793fb7fe9f77aa176f40e405a8b7c6814c454e46:/src/part04.rs?ds=inline diff --git a/src/part04.rs b/src/part04.rs index f2a6b6c..83eb87d 100644 --- a/src/part04.rs +++ b/src/part04.rs @@ -49,10 +49,10 @@ fn ownership_demo() { //@ vector. Hence, when `vec_min` finishes, the entire vector is deleted. That's of course not what //@ we wanted! Can't we somehow give `vec_min` access to the vector, while retaining ownership of it? //@ -//@ Rust calls this *a reference* the vector, and it considers references as *borrowing* ownership. This -//@ works a bit like borrowing does in the real world: If you borrow a book to your friend, your friend +//@ Rust calls this *a reference* to the vector, and it considers references as *borrowing* ownership. This +//@ works a bit like borrowing does in the real world: If your friend borrows a book from you, your friend //@ can have it and work on it (and you can't!) as long as the book is still borrowed. Your friend could -//@ even borrow the book to someone else. Eventually however, your friend has to give the book back to you, +//@ even lend the book to someone else. Eventually however, your friend has to give the book back to you, //@ at which point you again have full control. //@ //@ Rust distinguishes between two kinds of references. First of all, there's the *shared* reference. @@ -88,7 +88,7 @@ fn shared_ref_demo() { vec_min(&v); println!("The first element is: {}", *first); } -//@ What's going on here? First, `&` is how you borrow ownership to someone - this operator creates a shared reference. +//@ What's going on here? First, `&` is how you lend ownership to someone - this operator creates a shared reference. //@ `shared_ref_demo` creates three shared references to `v`: //@ The reference `first` begins in the 2nd line of the function and lasts all the way to the end. The other two //@ references, created for calling `vec_min`, only last for the duration of that respective call. @@ -126,7 +126,7 @@ fn mutable_ref_demo() { //@ than one mutable reference - we only ever borrow `v` once at a time. However, we can *not* create a shared reference that spans a call to `vec_inc`. Just try //@ enabling the commented-out lines, and watch Rust complain. This is because `vec_inc` could mutate //@ the vector structurally (i.e., it could add or remove elements), and hence the reference `first` -//@ could become invalid. In other words, Rust keeps us safe from bugs like the one in the C++ snipped above. +//@ could become invalid. In other words, Rust keeps us safe from bugs like the one in the C++ snippet above. //@ //@ Above, I said that having a mutable reference excludes aliasing. But if you look at the code above carefully, //@ you may say: "Wait! Don't the `v` in `mutable_ref_demo` and the `v` in `vec_inc` alias?" And you are right, @@ -143,4 +143,4 @@ fn mutable_ref_demo() { // As it turns out, combined with the abstraction facilities of Rust, this is a very powerful mechanism // to tackle many problems beyond basic memory safety. You will see some examples for this soon. -//@ [index](main.html) | [previous](part03.html) | [raw source](https://www.ralfj.de/git/rust-101.git/blob_plain/HEAD:/workspace/src/part04.rs) | [next](part05.html) +//@ [index](main.html) | [previous](part03.html) | [raw source](workspace/src/part04.rs) | [next](part05.html)