2 个不稳定版本
使用旧的 Rust 2015
0.2.0 | 2017年12月8日 |
---|---|
0.1.0 | 2016年9月24日 |
258 在 #running
3KB
热插拔
一个用于以最小努力进行热插拔运行代码的库,需要 nightly Rust 构建。
请注意,该库目前是一个原型,可能会频繁崩溃。
用法
- 将
hotswap
和hotswap-runtime
依赖项添加到您的Cargo.toml
。 - 在您的
Cargo.toml
中添加与项目名称和路径相同的dylib
构建。 - 添加
#![feature(plugin, const_fn)]
特性门。 - 导入插件
#![plugin(hotswap)]
。 - 使用
#[hotswap]
修饰符注解您想要热插拔的函数。 - 将
#![hotswap_header]
属性添加到程序顶部。 - 在调用任何热插拔函数之前,将
#![hotswap_header]
添加到程序的入口点,例如:
当前限制
- 更改热插拔函数签名 将会 导致段错误。
- 可能可以通过将类型存储为元数据来修复此问题。
- 需要用户代码使用某些非局部特性门。
示例
# Cargo.toml
[package]
name = "hotswapdemo"
version = "0.1.0"
[lib]
# This must be the same as the package name (with hyphens replaced with
# underscores). Anything else will cause an error at runtime.
name = "hotswapdemo"
crate-type = ["dylib"]
path = "src/main.rs"
[dependencies]
hotswap = "*"
hotswap-runtime = "*"
// main.rs
#![feature(plugin, const_fn)]
#![plugin(hotswap)]
#![hotswap_header]
use std::thread::sleep;
use std::time::Duration;
#[hotswap]
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));
}
}
就是这样!
从那里你可以运行二进制文件
> cargo run
Running `target/debug/hotswapdemo`
Foo: 1
Foo: 2
Foo: 3
然后,一旦它开始运行,你可以编辑打印代码,例如。
println!("Bar: {} :)", test);
一旦你在另一个终端(或使用后台在同一终端)重新编译代码,你就会看到变化!
> cargo build --lib
Compiling hotswapdemo v0.1.0 [...]
> fg
Foo: 7
Foo: 8
Bar: 9 :)
Bar: 10 :)
运行中的代码将在不重新启动二进制文件或丢失状态的情况下更新!
另请参阅
依赖项
~1MB
~18K SLoC