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
We currently have a transmute! macro which safely transmutes an AsBytes type into a FromBytes type. We should add macros which do the same for mutable and immutable references.
A candidate implementation of transmute_ref! is in #183. We may also want to ditch it in favor of something based on this approach suggested by @gootorov, but we'd need to first confirm that invalid uses are guaranteed to generate compile-time rather than runtime errors (rust-lang/rust#112090). EDIT: Based on the discussion there, it seems that there is such a guarantee, but we'd need to be careful about how we structure things to make sure that we actually write code that benefits from that guarantee.
Note that rust-lang/rust#112301 will likely make @gootorov's technique a bit annoying for users (although the error messages are way better than the existing technique, and the implementation is way simpler, so IMO it's still worth it on balance).
EDIT: Another issue with this approach is that generic APIs might never fail until they're used by a downstream crate since monomorphization only happens at that point. One potential solution would be to keep the functions #[doc(hidden)] and provide macros to invoke them which also call mem::transmute in order to ensure that they can only be called from type-concrete contexts. This would artificially hamstring the API, but the footgun is big enough that it might be worth it.
Activity
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
Add `transmute_ref!` macro
22 remaining items
Add `transmute_ref!` macro (#183)
Add `transmute_ref!` macro (google#183)
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro
Add `transmute_mut!` macro (#550)
joshlf commentedon Nov 1, 2023
Closed in #183 and #550.