3 个版本 (破坏性更新)
0.3.0 | 2021 年 2 月 9 日 |
---|---|
0.2.0 | 2021 年 2 月 2 日 |
0.1.0 | 2020 年 12 月 18 日 |
#1181 在 开发工具
26KB
368 行代码
hotpatch
此包主要用于以极简单的方式从共享对象文件中加载新的函数定义。
主要特性
- 线程安全
- 类型安全
- 适用于任何签名函数
- 命名空间感知
简例
以下展示了此包的使用是多么简单
// 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(())
}
警告
不要对您当前所在的函数或其父函数进行热补丁。
因为 hotpatch
不允许同时生效多个函数定义,这会导致死锁。
虽然可以使用 force
函数实现此功能,但它们是 unsafe
的,因为在多线程环境中,这可能导致同时生效多个函数定义。
文档
更多信息,请参阅 文档。
待办事项
此包距离“完成”还有很长的路要走。以下是待完成的任务。提交问题或 PR 到此部分以提出功能请求!
no_std
和使用功能以提供最广泛的功能- 可能需要回到
lazy_static
- 可能需要回到
- 方法(进行中)
#[patchable] ||()
从闭包生成(这可能甚至不可能?)- 降低编译时间
- 仅包含子依赖项所需的必要功能
- 正确记录夜间功能要求
依赖项
~1.3–1.8MB
~38K SLoC