5 ms·
People say Rust’s borrowing rules are only useful for multi-threaded environments. This is one of those issues that they are supposed to solve.
by heavenlyblue 7y ago
People say Rust’s borrowing rules are only useful for multi-threaded environments. This is one of those issues that they are supposed to solve.
- fortran77 7y ago"People" say that? Really? Now you build up straw men so you can slip "Rust" into every discussion.
- steveklabnik 7y agoAn example from less than a day ago: https://news.ycombinator.com/item?id=22466354 https://news.ycombinator.com/item?id=22466354
- tedunangst 7y agoI'm not super confident I understand the bug, but it looks like sequential access to the reference. If I'm not mistaken, a mutable borrow in rust would end up with the same bug.
- steveklabnik 7y agoI have not dug into the details enough to say if this is a bug Rust would prevent or not, I am only responding to the claim that people do not sometimes suggest that Rust's complexity only matters in the multi-threaded case.
- tedunangst 7y agoGotcha.
- m-n 7y agoIf I understand correctly, each `authzPB` collected in the iteration stores references to fields of an `authzModel`. Before the patch, these were identical, referring to the fields of the loop variable v. Each iteration of the loop, v is set, and all those stored references pointed to the new value. Rust does give a compilation error for that.
- tedunangst 7y agoThat makes sense.
- fortran77 7y agoI think you're right, too.
- webappguy 7y agoDo you take issue with Rust?
- deleted 7y ago[deleted]
- deleted 7y ago[deleted]
- Thaxll 7y agoI'm not sure I understand, it's a business logic bug, would have happen in any language.
- SolarNet 7y agoExcept that the reference in question would have caused a lifetime error in rust which would have required the developrs to explictly acknowledge the choice they were making, likely by changing a bunch of types. Yes you could still do it in rust, but any reviwer of the code would say "why in the world are you doing it this way" because it would be forced into a complex cross call monstrosity.
- chc 7y agoHow do you figure this is a business logic bug? It looks like a pretty clear-cut implementation bug to me. Rust would 100% have caught this bug, and in fact I'm pretty sure it would have caught the bug at least two different ways: 1. The reference outlives the original value. 2. You can't have multiple mutable references at the same time.
- cesarb 7y ago> 2. You can't have multiple mutable references at the same time. If I understood the issue correctly, only one of the references would be a mutable one, so the way Rust could have caught the bug would instead be the related rule: "you can't have an immutable reference and a mutable reference at the same time".