Skip to content

runner 教程

常见单步 benchmark 使用不可变描述,并在产生任何测量 effect 前编译:

moonbit
let baseline = @runner.Implementation::stateless(
  "baseline", "1", input => @model.OperationResult::completed(add(input), ()),
)
let candidate = @runner.Implementation::stateless(
  "candidate", "1", input => @model.OperationResult::completed(add_fast(input), ()),
)
let plan = @runner.single_step("vector_add", scales)
  .with_immutable_input(generate, fingerprint)
  .compare([baseline, candidate])
  .against_equal(reference, (expected, actual) => expected == actual)
  .compile()
  .unwrap()
let protocol = @runner.ProtocolPreset::Development.validated()
let context = @runner.RunContext::new(environment, sink, seed, protocol)
let summary = @runner.run(plan, context)

有状态或多步 case 使用显式 fixture、implementation、oracle 与 sink 组合器。 先保留原始 observation,再计算 summary。

JS 与 native 必须使用独立 run;两者的 elapsed 值不是同一可比较总体。