this post was submitted on 16 Sep 2024
1 points (100.0% liked)

Rust

7631 readers
90 users here now

Welcome to the Rust community! This is a place to discuss about the Rust programming language.

Wormhole

!performance@programming.dev

Credits

  • The icon is a modified version of the official rust logo (changing the colors to a gradient and black background)

founded 2 years ago
MODERATORS
top 8 comments
sorted by: hot top controversial new old
[–] r00ty@kbin.life 0 points 1 year ago (1 children)

I started playing with rust last week (just converting a couple of C# projects so far), and I'm going to say that once you understand that mutexes/rwlocks are wrappers around the actual data, it (to me at least) feels better.

Don't get me wrong, it's an absolute headache for anyone that's acquired intermediate or better skill in one of the Cx languages. The paradigm shift is still hitting me hard. But this was one of the differences I actually think is an improvement in probably most use cases.

[–] 5C5C5C@programming.dev 1 points 1 year ago (2 children)

It's a massive win, and I would question the credibility of any systems programmer that doesn't recognize that as soon as they understand the wrapper arrangement. I would have to assume that such people are going around making egregious errors in how they're using mutexes in their C-like code, and are the reason Rust is such an important language to roll out everywhere.

The only time I've ever needed a Mutex<()> so far with Rust is when I had to interop with a C library which itself was not thread safe (unprotected use of global variables), so I needed to lock the placeholder mutex each time I called one of the C functions.

[–] SorteKanin@feddit.dk 1 points 1 year ago

The only time I’ve ever needed a Mutex<()> so far with Rust is when I had to interop with a C library which itself was not thread safe (unprotected use of global variables), so I needed to lock the placeholder mutex each time I called one of the C functions.

Actually I think in this case you're still better off using a Mutex with "data" inside. I've done this before. The idea is that you make a unit struct MyCFuncs or whatever and then you only call the C functions from methods of that unit struct. Then you can only access those methods once you lock the Mutex and get the instance of the unit struct. It feel elegant to me.

[–] sugar_in_your_tea@sh.itjust.works 0 points 1 year ago (1 children)

Exactly. If there's only one thing I could bring from Rust into another language, it would be Mutexes. It's so nice to guarantee safe access to data.

[–] nous@programming.dev 1 points 1 year ago* (last edited 1 year ago) (1 children)

Rust mutexes would be nice. But I think for me that one thing for me would be its enums.

[–] 5C5C5C@programming.dev 1 points 1 year ago

But only if pattern matching were included, otherwise they would be as unpleasant as C++'s std::variant.

[–] lolcatnip@reddthat.com 0 points 1 year ago (1 children)

Looks like the author missed my main complaint about Rust mutexes, which is that the lock method returns a Result. There should be a try_unlock method for when someone actually wants to handle the rather obscure failure case, and the name lock should be used for a method that panics on failure but returns a value that doesn't need to be unwrapped first. I see the current arrangement as being about as sensible as having array subscripting return a Result to handle the case of a failed bounds check.

[–] SorteKanin@feddit.dk 1 points 1 year ago

Just use the Mutex from the parking_lot crate.