A type to wrap &'static
references such that they can be safely sent between
other processes running the same binary.
References are adjusted relative to a base when (de)serialised, which is what enables it to work across binaries that are dynamically loaded at different addresses under multiple invocations.
It being the same binary is checked by serialising the
build_id
alongside the relative pointer, which is
validated at deserialisation.
rust
let x: &'static [u16;4] = &[2,3,5,8];
// unsafe as it's up to the user to ensure the reference is into static memory
let relative = unsafe{Data::from(x)};
// send `relative` to remote...
rust
// receive `relative`
println!("{:?}", relative.to());
// prints "[2, 3, 5, 8]"
This currently requires Rust nightly.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.