You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无需重构Rust项目,如何用Criterion基准测试copy.rs函数?

解决方案

方案一:转为库+二进制混合结构(推荐)

这种方式让main.rs、基准测试共享同一套核心代码,无需调整现有文件位置:

  1. 在src目录下新建lib.rs文件,内容如下:
pub mod copy;
pub mod helper;

这一步将copy.rs和helper.rs声明为库的公共模块,允许外部代码访问。

  1. 保留copy.rs中的引用路径:
    原来的use crate::helper::somefunc;可以直接使用,此时crate指向我们的库,helper是库中已声明的模块。

  2. 调整main.rs的引用方式:
    如果main.rs需要调用copy或helper的内容,改为:

use copy_experiments::copy;
use copy_experiments::helper;

copy_experiments是你在Cargo.toml中定义的name字段值,也就是当前库的名称。

  1. 基准测试中引用copy模块:
    在copy_bench.rs中直接通过库名引用:
use copy_experiments::copy;

之后就能调用copy.rs中的函数完成基准测试。

方案二:在基准测试中直接声明依赖模块

如果不想新增lib.rs,可以在基准测试文件内直接声明所需模块:

  1. 修改copy_bench.rs顶部代码:
// 先声明helper模块,因为copy依赖它
mod helper;
// 声明copy模块
mod copy;
  1. 调整copy.rs的引用路径:
    把use crate::helper::somefunc;改为:
use super::helper::somefunc;

此时copy是copy_bench的子模块,super指向copy_bench,helper是同级子模块。

  1. 在基准测试中调用函数:
    直接通过copy::your_function()的方式调用copy.rs中的函数即可。

Rust模块系统和C的区别说明

和C的#include文件包含逻辑不同,Rust采用树形模块结构:

  • 单个.rs文件不会自动成为模块,必须在父模块(如lib.rs、main.rs)中用mod声明。
  • crate关键字指向当前项目的根模块:库项目的根是lib.rs,二进制项目的根是main.rs。

内容的提问来源于stack exchange,提问作者Pragmatic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:37:38