PlexSheep@infosec.pubtoRust@programming.dev•What are you working on this week? (Apr. 21, 2024)
5·
9 months agoThe whole code is here
(It does not compile right now)
I understand why it does not work, but I don’t know how to achieve what I’m looking for.
This is the code snippet from the binary:
let wl = BuiltinWList::default();
let builder: GameBuilder<'_, BuiltinWList> = game::Game::builder(&wl)
.length(cli.length)
.max_steps(cli.max_steps)
.precompute(cli.precompute);
let solver: AnyBuiltinSolver<'_, BuiltinWList> = cli.solver.to_solver(&wl);
let bench = BuiltinBenchmark::build(&wl, solver, builder, cli.threads)?;
trace!("{bench:#?}");
bench.start()?;
loop {
sleep_ms(1000);
println!("{}", bench.report());
if bench.is_finished() {
break;
}
}
Ok(())
}
From the CI
error[E0521]: borrowed data escapes outside of method
--> src/bench/builtin.rs:79:18
|
23 | impl<'wl, WL, SL> Benchmark<'wl, WL, SL> for BuiltinBenchmark<'wl, WL, SL>
| --- lifetime `'wl` defined here
...
75 | fn start(&'wl self, n: usize) -> WResult<()> {
| --------- `self` is a reference that is only valid in the method body
...
79 | let th = std::thread::spawn(move||{
| __________________^
80 | | Self::bench(n, report, solver, builder)
81 | | });
| | ^
| | |
| |__________`self` escapes the method body here
| argument requires that `'wl` must outlive `'static`
error[E0597]: `builder` does not live long enough
--> src/bench/mod.rs:54:32
|
21 | pub trait Benchmark<'wl, WL, SL>: Sized + Debug + Sync
| --- lifetime `'wl` defined here
...
51 | .for_each_with(report.clone(), |outside_data, _i| {
| ------------------ value captured here
...
54 | .play(&mut builder.build().expect("could not create game"))
| ^^^^^^^----------------------------------------
| |
| borrowed value does not live long enough
| argument requires that `builder` is borrowed for `'wl`
...
62 | }
| - `builder` dropped here while still borrowed
I’d call instance methods just methods, it fits more into how the word is commonly used.
The omission is just way to easy not to use.