relative
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 accounts for binaries being 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.
Example
Local process
let x: &'static = &;
// unsafe as it's up to the user to ensure the reference is into static memory
let relative = unsafe;
// send `relative` to remote...
Remote process
// receive `relative`
println!;
// prints "[2, 3, 5, 8]"
Note
This currently requires Rust nightly.
License
Licensed under Apache License, Version 2.0, (LICENSE.txt or http://www.apache.org/licenses/LICENSE-2.0).
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 licensed as above, without any additional terms or conditions.