4 ms·
I like the word `unsafe`. It's a nice red flag to newbies that "you almost certainly shouldn't use this" and once you have enough experience to use `unsafe` wel
by dwohnitmok 5y ago
I like the word `unsafe`. It's a nice red flag to newbies that "you almost certainly shouldn't use this" and once you have enough experience to use `unsafe` well you'll know its subtleties well enough.
- likeabbas 5y agoI don't think newbies using it would be a problem. There is an issue with people/companies evaluating Rust and stopping when they see `unsafe` without looking much further into it.
- mynameisash 5y agoI just saw a tweet from Esteban Küber[0] the other day that made me rethink a silly thing I did: "I started learning Rust in 2015. I've been using it since 2016. I've been a compiler team member since 2017. I've been paid to write Rust code since 2018. I have needed to use `unsafe` <5 times. That's what why Rust's safety guarantees matter despite the existence of `unsafe`." For me, I was being a bit lazy with loading some config on program startup that would never change, so I used a `static mut` which requires `unsafe` to access. Turns out I was able to figure out a way to pass my data around with an `Arc<T>`. I think either way would have worked, but I figured I should avoid the unsafe approach anyway. [0] https://twitter.com/ekuber/status/1511762429226590215 https://twitter.com/ekuber/status/1511762429226590215
- oconnor663 5y agoYeah if you don't need mutation after initialization is done, Arc<T> is a good option for sharing. Lazy<T> (https://docs.rs/once_cell/latest/once_cell/sync/struct.Lazy.html https://docs.rs/once_cell/latest/once_cell/sync/struct.Lazy....) is also nice, especially if you want to keep treating it like a global. I believe something like Lazy<T> is eventually going to be included in the standard library.
- jamincan 5y agoIt's already on nightly: https://doc.rust-lang.org/std/lazy/struct.Lazy.html https://doc.rust-lang.org/std/lazy/struct.Lazy.html
- shepmaster 5y agoI’ll be even lazier (heh) and just straight up leak memory for true once-set read-only config values. https://github.com/shepmaster/stack-overflow-relay/blob/273a774678f8a1152239d84b818446e0d9f282d3/src/main.rs#L43 https://github.com/shepmaster/stack-overflow-relay/blob/273a...
- afdbcreid 5y agoDon't ever use `static mut`. It's dangerous[1]. In nightly you now have `SyncUnsafeCell`[2] to avoid it. [1] https://github.com/rust-lang/rust/issues/53639 https://github.com/rust-lang/rust/issues/53639 [2] https://github.com/rust-lang/rust/pull/95438 https://github.com/rust-lang/rust/pull/95438