3 ms·
I am of the same impression — Rust as a language forces you to come at terms with your own ideas of how code should look. That being said I still have a deep d
by atoav 3y ago
I am of the same impression — Rust as a language forces you to come at terms with your own ideas of how code should look.
That being said I still have a deep dislike of having to read through nested Arc Mutexes or whatever to figure out what the code does in principle before I figure out what is going on in detail with the ownership.
I know there are no perfect solutions and there are trade-offs to be made, but I wish there was a way to have it more readable.
So instead of this:
let s = Arc::new(Mutex::new(Something::new("foo")));
something a bit like this:
let s = Something::new("bar").arc()
.mutex();
- insanitybit 3y agoFWIW Arc implements From<T> so you can do `let foo = blah().into()` and if `foo` is passed to something expecting Arc it'll be an Arc. This probably works for Arc<Mutex<T>> as well so you'd be able to do `.into().into()` but I'm not sure.
- bobbylarrybobby 3y agoIirc you can't chain .into() because the compiler can't be sure whether the first is meant to do the whole conversion and the second is the identity (impl From<T> for T), or if the first does one step and the second the next or if the first is the identity and the second does the whole conversion. (In fact I think the existence of the first and third options alone is enough to preclude chained .into() from working due to the ambiguity.)
- insanitybit 3y agoYou're right.
- mborch 3y agoLooks like you're asking for syntax sugaring for T::new wrapping, e.g. `"bar" |> Something |> Arc |> Mutex`.