2 个稳定版本
1.0.1 | 2021年7月31日 |
---|---|
1.0.0 | 2021年7月24日 |
#1796 in 开发工具
18KB
95 代码行
compiler-interrupts
compiler-interrupts
提供了编译器中断库的 Rust API。更多信息请查看编译器中断的 主仓库。
要求
- 需要 Rust 1.45.0 或更高版本。由于使用了
#[thread_local]
不稳定特性,该包目前需要 nightly Rust。
入门
将以下内容添加到您的 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)
致谢
- 我的导师 Jakob Eriksson,为本项目提供了巨大的支持。
- Nilanjana Basu 为实现编译器中断。
许可证
compiler-interrupts
在 MIT 许可证下可用。更多信息请查看 LICENSE 文件。