3 releases (breaking)
0.3.0 | Feb 9, 2021 |
---|---|
0.2.0 | Feb 2, 2021 |
0.1.0 | Dec 18, 2020 |
#125 in #patch
Used in hotpatch
22KB
507 lines
hotpatch
This crate is primarily used to load new function definitions from shared object files in an exceedingly easy way.
Key features:
- Thread safe
- Type safe
- Works for functions of any signature
- Namespace aware
Short Example
The following shows how dead-simple this crate is to use:
// main.rs
use hotpatch::*;
#[patchable]
fn foo() { }
fn main() -> Result<(), Box<dyn std::error::Error>> {
foo(); // does nothing
foo.hotpatch_lib("libsomething.so")?;
foo(); // does something totally different!
foo.hotpatch_fn(|| println!("Dyamic!"))?;
foo(); // even more modification!
Ok(())
}
Warning
Don't hotpatch the function you're currently in, or any of its parents.
Because hotpatch
doesn't allow multiple function definitions to be in
affect at the same time, this will cause a deadlock.
It is possible to do this with the force
functions, however they are
unsafe
, as in a multithreaded enironment this could cause multiple
function definitions to be in effect at once.
Docs
For more information, see the docs.
TODO
This crate is still has a long way to go before being "finished". Below are some items left to do. Submit an issue or PR to this section for feature requests!
no_std
and use features to give the widest possible functionality- probably will need to move back to
lazy_static
- probably will need to move back to
- methods (in progress)
#[patchable] ||()
to generate from a closure (is this even possible?)- lower compile times
- include only necessary features for sub-dependencies
- properly document nightly feature requirements
Dependencies
~1.5MB
~36K SLoC