docs.rs failed to build hotswap-0.4.2
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build:
hotswap-0.6.0
hotswap
A library for hotswapping running code with minimal effort, requires a nightly rust build.
Beware that the library is a prototype for now, and it may crash frequently.
Usage
- Add the
hotswap
andhotswap-runtime
dependencies to yourCargo.toml
. - Add a
dylib
build with the same project name and path to yourCargo.toml
. - Add the
#![feature(plugin, const_fn)]
feature gates. - Import the plugin
#![plugin(hotswap)]
. - Annotate the functions you want to hotswap with the
#[hotswap]
modifier. - Add
#![hotswap_header]
attribute to the top of your program. - Add
unsafe { hotswap_start!() }
to the entry point of your program, before you call any hotswapped functions.
Current Limitations
- Changing hotswapped function signatures WILL result in a segfault.
- Maybe this can be fixed by storing the types as metadata.
- Requires user code to use some non-local feature gates.
Example
# Cargo.toml
[]
= "hotswapdemo"
= "0.1.0"
[]
# This must be the same as the package name (with hyphens replaced with
# underscores). Anything else will cause an error at runtime.
= "hotswapdemo"
= ["dylib"]
= "src/main.rs"
[]
= "*"
= "*"
// main.rs
use sleep;
use Duration;
That's it!
From there you can run the binary
> cargo run
Running `target/debug/hotswapdemo`
Foo: 1
Foo: 2
Foo: 3
Then, once it is running, you can edit the printing code, e.g.
println!;
Once you recompile the code on another terminal (or on the same one using background), you'll see the changes!
> cargo build --lib
Compiling hotswapdemo v0.1.0 [...]
> fg
Foo: 7
Foo: 8
Bar: 9 :)
Bar: 10 :)
The running code will update without restarting the binary or losing state!