Take dependency on zerocopy for safe transmutation #63
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Normally, I don't like taking new dependencies if they can be avoided. But,
zerocopy
is no ordinary dependency. First of all, we already depend on it as a transitive dependency ofstd
. Secondly, it supplements rustc's analysis of data structures to automatically reason about which transmutes are safe. That is, changingstd::mem::transmute
tozerocopy::transmute
does not simply sequester the unsafe code. Rather, this macro will result in a compile error unlesszerocopy
can establish that the resultant unsafe code is sound. Jack Wrenn wrote up a nice article on how it works: https://jack.wrenn.fyi/blog/safety-goggles-for-alchemists/This change includes the only call site of
std::mem::transmute
that could be swapped out in one shot. There are other places where zerocopy can relieve the burden of reasoning about safety, but they will require more invasive changes.