Warning: Some posts on this platform may contain adult material intended for mature audiences only. Viewer discretion is advised. By clicking ‘Continue’, you confirm that you are 18 years or older and consent to viewing explicit content.
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> forBuiltinBenchmark<'wl, WL, SL>
| --- lifetime `'wl` defined here
...
75 | fnstart(&'wlself, n: usize) -> WResult<()> {
| --------- `self` is a reference that is only valid in the method body
...
79 | letth = 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 | pubtraitBenchmark<'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
The 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:
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