feat(cli): run --repeat N 支持单进程内多次 eval 复用 Kernel
OxideJS 架构优势: 一个 Kernel + VmPool 跑 N 次 eval, arena 每轮 O(1) reset, 内存稳定不增长 (cherry picked from commit 05d0c25aba419fa31e22b8bc325cc4b08de6c403)
This commit is contained in:
@@ -42,6 +42,8 @@ enum Commands {
|
||||
},
|
||||
Run {
|
||||
file: String,
|
||||
#[arg(long, default_value = "1")]
|
||||
repeat: u64,
|
||||
},
|
||||
Compile {
|
||||
#[arg(short = 'e')]
|
||||
@@ -78,10 +80,19 @@ fn main() -> ExitCode {
|
||||
let pool = make_pool(&kernel);
|
||||
eval(&code, &kernel, &pool)
|
||||
}
|
||||
Some(Commands::Run { file }) => {
|
||||
Some(Commands::Run { file, repeat }) => {
|
||||
let kernel = make_kernel(cli.verbose, cli.quiet);
|
||||
let pool = make_pool(&kernel);
|
||||
run(&file, &kernel, &pool)
|
||||
for n in 0..repeat {
|
||||
let code = run(&file, &kernel, &pool);
|
||||
if code != ExitCode::SUCCESS && code != ExitCode::FAILURE {
|
||||
return code;
|
||||
}
|
||||
if n + 1 < repeat {
|
||||
eprintln!("[oxide] iteration {}/{} done", n + 1, repeat);
|
||||
}
|
||||
}
|
||||
ExitCode::SUCCESS
|
||||
}
|
||||
Some(Commands::Compile { expr, file }) => compile(expr, file),
|
||||
Some(Commands::Bench {
|
||||
|
||||
Reference in New Issue
Block a user