> rest of the post is me trying to make sense of the tutorial on borrowing. It has fried my brain and negatively affected my skills in modern Rust, so be wary
I think that tutorial discouraged me from really getting into Rust
I’m no expert in Rust, but have done a couple of very minimal weekend projects. In the time I’ve read up on Rust, I’ve always looked at the borrow mechanism like an extreme/overactive implementation of RAII from C++, that is triggered with every context change.
Would be interested to hear where this analogy breaks down from someone more experienced than me.
Borrowing and RAII are basically separate features, though they do interact.
RAII in Rust is like C++, but simpler: there are no constructors, only destructors. The Drop trait gets called like in C++, except that in Rust, moves are the default, and destructors don't get called on moved-from objects, that is, your destructor only runs once.
References are, at runtime, the same as a pointer in C++, except they cannot be null. We also say that they "borrow" what they refer to, which means that the compiler keeps track of the lifetime of the referent. This ensures that the referent always outlives its reference, so that its reference is always valid. This is a compile-time analysis on the control-flow graph of your program.
I think that tutorial discouraged me from really getting into Rust