The standard library has the stable functions
core::ptr::read_volatile (also in
std) and the equivalent methods for
*mut T and
*const T (the latter for reads only, of course). However there is no equivalent to do a volatile read or write of an entire slice (though you could certainly do so in a loop). Although the methods (but not the functions in
core::ptr) are implemented where
T: ?Sized, they can't actually be used on slices since that would involve directly passing or returning a slice (rather than a reference or pointer to a slice).
There are however, unstable intrinsics which are meant for volatile reads and writes of slices:
volatile_set_memory, etc. There was a pre-RFC proposed by Dan Cross to stabilize these (with functions in the
ptr module) back in 2019, but it appears that the neither he nor anyone else took any further action.
I would like to add these proposed functions to
core::ptr (and by extension
std::ptr) as suggested in Dan Cross' pre-RFC and possibly also implement equivalent methods for
*mut T and
*const T, for example,
(*mut T)::copy_to_nonoverlapping_volatile, etc. What are people's thoughts on this?