3 个版本 (重大变更)

0.3.0 2021年2月9日
0.2.0 2021年2月2日
0.1.0 2020年12月18日

#125 in #patch


用于 hotpatch

GPL-3.0 许可证

22KB
507 代码行

hotpatch

crates.io docs.rs

该软件包主要用于以极其简单的方式从共享对象文件中加载新的函数定义。

主要特性

  • 线程安全
  • 类型安全
  • 适用于任何签名的函数
  • 命名空间感知

简例

以下展示了如何简单易用此软件包

// 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] ||() 从闭包生成(这可能甚至不可能?)
  • 降低编译时间
    • 仅包含子依赖项所需的必要功能
  • 正确记录nightly功能要求

依赖项

~1.5MB
~36K SLoC