You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
clarfonthey opened this issue
Apr 14, 2017
· 4 comments
Labels
A-lintArea: New lintsE-mediumCall for participation: Medium difficulty level problem and requires some initial experience.T-middleType: Probably requires verifiying types
I've been rather exhaustively adding methods to the standard library that allow "safe" transmutes that we know work, like between [u8] and str (see: rust-lang/rust#41119 and rust-lang/rust#40380). It'd be nice if we had a framework to detect transmutes specifically between these types and suggest other methods instead.
For example, &str -> &u8 is str::as_bytes, and the reverse is str::from_utf8_unchecked. If someone does a raw transmute here, they should be redirected to the standard library functions that do these conversions.
I've been slowly adding methods to do less common conversions, like &mut [u8] -> &mut str. In general it makes sense to have some sort of framework to recognise transmutes and suggest to replace them with more explicit functions, especially as these other methods get stabilised.
If we want to go all-out, we could detect functions that do these conversions and suggest them instead of transmutes.
The text was updated successfully, but these errors were encountered:
mcarton
added
E-medium
Call for participation: Medium difficulty level problem and requires some initial experience.
A-lint
Area: New lints
T-middle
Type: Probably requires verifiying types
labels
Apr 15, 2017
An extension of this with the recent Rust release is using transmute in place of to_le_bytes() and from_le_bytes(). Like the others, clippy warning about these would be good since it'd reduce unsafe usage in the ecosystem.
A-lintArea: New lintsE-mediumCall for participation: Medium difficulty level problem and requires some initial experience.T-middleType: Probably requires verifiying types
I've been rather exhaustively adding methods to the standard library that allow "safe" transmutes that we know work, like between
[u8]
andstr
(see: rust-lang/rust#41119 and rust-lang/rust#40380). It'd be nice if we had a framework to detect transmutes specifically between these types and suggest other methods instead.For example,
&str
->&u8
isstr::as_bytes
, and the reverse isstr::from_utf8_unchecked
. If someone does a raw transmute here, they should be redirected to the standard library functions that do these conversions.I've been slowly adding methods to do less common conversions, like
&mut [u8]
->&mut str
. In general it makes sense to have some sort of framework to recognise transmutes and suggest to replace them with more explicit functions, especially as these other methods get stabilised.If we want to go all-out, we could detect functions that do these conversions and suggest them instead of transmutes.
Current list:
transmute::<&str, &[u8]>
=>str::as_bytes
transmute::<&mut str, &mut [u8]>
=>str::as_mut_bytes
transmute::<&[u8], &str>
=>std::str::from_utf8_unchecked
transmute::<&mut [u8], &mut str>
=>std::str::from_utf8_unchecked_mut
transmute::<&CStr, &[u8]>
=>CStr::to_bytes_with_nul
transmute::<&[u8], &CStr>
=>CStr::from_bytes_with_nul_unchecked
transmute::<f32, u32>
=>f32::to_bits
transmute::<f64, u64>
=>f64::to_bits
transmute::<u32, f32>
=>f32::from_bits
transmute::<u64, f64>
=>f64::from_bits
The text was updated successfully, but these errors were encountered: