#interrupt #compiler #llvm-ir #api #thread-local

nightly compiler-interrupts

Rust 编译器中断 API

2 个稳定版本

1.0.1 2021年7月31日
1.0.0 2021年7月24日

#1796 in 开发工具

MIT 许可证

18KB
95 代码行

compiler-interrupts

crates.io docs.rs license

compiler-interrupts 提供了编译器中断库的 Rust API。更多信息请查看编译器中断的 主仓库

要求

入门

将以下内容添加到您的 Cargo.toml

[dependencies]
compiler-interrupts = "1.0"

在您的程序中注册编译器中断处理程序。

#![feature(thread_local)]

#[thread_local]
#[allow(non_upper_case_globals)]
static mut prev_ic: i64 = 0;

fn interrupt_handler(ic: i64) {
    let interval;
    unsafe {
        // save the last interval
        interval = ic - prev_ic;

        // update the instruction count
        prev_ic = ic;
    }
    if interval < 0 {
        panic!("IR interval was negative")
    }
    println!(
        "CI @ {}: last interval = {} IR",
        std::thread::current().name().expect("invalid thread name"),
        interval
    );
}

fn main() {
    // register the CI handler for 1000 IR and cycles interval
    unsafe {
        compiler_interrupts::register(1000, 1000, interrupt_handler);
    }

    // do something compute-intensive
    for _ in 0..100 {}

    println!("i can add an unsafe block, right?")
}

如果您已安装 cargo-compiler-interrupts,现在可以运行 cargo build-ci 来启动编译和集成。更多信息请查看 文档

贡献

所有问题报告、功能请求、拉取请求和 GitHub 星星都欢迎并非常感谢。

作者

Quan Tran (@quanshousio)

致谢

许可证

compiler-interrupts 在 MIT 许可证下可用。更多信息请查看 LICENSE 文件。

无运行时依赖