#重构 #关键 #GitHub #async-std #scientist

scientisto

用于谨慎重构关键代码路径的github/scientist库的轻量级Rust实现

7 个版本

0.3.0 2023年5月24日
0.2.0 2023年3月17日
0.1.4 2023年1月30日

#1006 in Rust 模式

每月 28 次下载

MIT 许可证

27KB
524

Scientisto

Crates.io MIT licensed Publish codecov

scientisto 是github/scientist库的轻量级Rust实现,用于谨慎重构关键代码路径。它提供了用于定义所进行的实验和发布工具的 Experiment 结构体。

关于

该库旨在尽可能简单,不引入任何外部依赖,并从 std 库中只使用最少的功能。

使用方法

ExperimentAsyncExperiment 结构体代表控制执行和实验执行代码路径的定义。

实验由在 Experiment 构造期间指定的配置引导,并通过 publish 函数内部发布结果观察。

use scientisto::{Experiment,Observation};
use tracing;

let expected: i32 = 1;
let result = Experiment::new("Test")
    .control(|| expected)
    .experiment(|| expected + 1)
    .publish(|o: &Observation<i32, i32>| {
        tracing::info!("You can do any magic in the publisher")
     })
    .run();

对于 async 代码,可以使用 AsyncExperiment 作为替代。

use scientisto::{AsyncExperiment,Observation};
use tracing::info;

async_std::task::block_on(async {
    AsyncExperiment::new("Test")
        .control(async { 3.0 })
        .experiment(async { 3.0 })
        .publish(|o: &Observation<f32, f32>| {
            assert!(o.is_matching());
            info!("Any logic, including side effects, can be here!")
         })
        .run().await;
})

限制

  • 没有为 controlexperiment 回调提供默认值,它们必须完全指定。

测试

当前代码覆盖率(包括测试)

Code coverage

许可证

MIT

依赖项

~1MB
~16K SLoC