| ▲ | jeltz 2 days ago | |||||||||||||||||||||||||
In Rust variables are not destroyed after the last borrow ends but instead when it goes out of scope. I guess that is why it us called borrow checking. | ||||||||||||||||||||||||||
| ▲ | Panzerschrek 2 days ago | parent [-] | |||||||||||||||||||||||||
> In Rust variables are not destroyed after the last borrow ends but instead when it goes out of scope That's the problem. Once I had a tricky case, where I locked a mutex in a match expression only to read a single field to match from the mutex contents. In one of branches of the match expression I locked this mutex once again and got a deadlock. Rust compiler wasn't smart enough to realize that the temporary variable for the mutex lock object should be destroyed earlier (it's no longer needed). So, I needed manually reading the field I need into a named variable to eliminate this deadlock. A more advanced temporaries lifetime analysis would solve problems like described above, but it means basically duplicating a lot of stuff which is already done in the borrow checker (which runs as an afterpass). | ||||||||||||||||||||||||||
| ||||||||||||||||||||||||||