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.
hotswap
and hotswap-runtime
dependencies to your Cargo.toml
.dylib
build with the same project name and path to your Cargo.toml
.#![feature(plugin, const_fn, drop_types_in_const)]
feature gates.#![plugin(hotswap)]
.#[hotswap]
modifier.#![hotswap_header]
attribute to the top of your program.unsafe { hotswap_start!() }
to the entry point of your program, before you call any hotswapped functions.```toml
[package] name = "hotswapdemo" version = "0.1.0"
[lib] name = "hotswapdemo" crate-type = ["dylib"] path = "src/main.rs"
[dependencies] hotswap = "" hotswap-runtime = "" ```
```rust // main.rs
use std::thread::sleep; use std::time::Duration;
fn test(test: i32) -> () { println!("Foo: {}", test); }
fn main() { unsafe{ hotswap_start!() }
let mut i = 1;
loop {
test(i);
i += 1;
sleep(Duration::from_millis(2000));
}
}
```
And that is it!
From there you can ```
cargo run Running
target/debug/hotswapdemo
Foo: 1 Foo: 2 Foo: 3 ```
once it is running, you can edit the printing code, e.g.
rust
println!("Bar: {} :)", test);
and once you recompile the code on another terminal (or on the same one using background)
```
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!