#math #unroll #load

无需 std crunchy

Crunchy 展开器:确定性地展开常数循环

9 个版本

使用旧的 Rust 2015

0.2.2 2019年5月7日
0.2.1 2018年3月19日
0.1.6 2017年8月18日
0.1.4 2017年7月22日

#72开发工具

Download history 507686/week @ 2023-10-18 526483/week @ 2023-10-25 534689/week @ 2023-11-01 538405/week @ 2023-11-08 535950/week @ 2023-11-15 421804/week @ 2023-11-22 448987/week @ 2023-11-29 457874/week @ 2023-12-06 489621/week @ 2023-12-13 326414/week @ 2023-12-20 273779/week @ 2023-12-27 477825/week @ 2024-01-03 486723/week @ 2024-01-10 485408/week @ 2024-01-17 489007/week @ 2024-01-24 435199/week @ 2024-01-31

1,993,896 每月下载量
8,587 个包中(53 个直接使用)

MIT 许可证

11KB
241 代码行

Crunchy

Crunchy 展开器 - 确定性地展开常数循环。用于数字“crunching”。

Rust 优化器将展开不使用循环变量的常数循环,如下所示

for _ in 0..100 {
  println!("Hello!");
}

但是,使用循环变量将导致它不会展开循环。这是不幸的,因为它意味着你不能常数折叠循环变量,如果你最终踩到寄存器上,它将不得不对每个迭代进行加载。这个包确保你的代码被展开和常数折叠。遗憾的是,它只适用于文字,但有一个解决方案

debug_assert_eq!(MY_CONSTANT, 100);
unroll! {
  for i in 0..100 {
    println!("Iteration {}", i);
  }
}

这意味着你的测试将捕获你重新定义常量的情况。

默认最大展开循环次数为 64,但可以使用 cargo 功能轻松增加

  • limit_128
  • limit_256
  • limit_512
  • limit_1024
  • limit_2048

无运行时依赖