• 0 Posts
  • 3 Comments
Joined 9 months ago
cake
Cake day: April 9th, 2024

help-circle

  • 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:

        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’m still working on a benchmark for my wordle solver. The thing itself works, but I want it to print statuses while benching.

    I cannot do it. I’ve spent hours on this, even tried to make the bench async and run it in a separate Tokio task. I cannot share my bench strict over a thread, and cloning is impossible too, because of something.

    Sometimes, the lifetime and ownership stuff of rust really gets annoying. C would’ve just done the stuff and be done with it. (Maybe)