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 {
|
Run {
|
||||||
file: String,
|
file: String,
|
||||||
|
#[arg(long, default_value = "1")]
|
||||||
|
repeat: u64,
|
||||||
},
|
},
|
||||||
Compile {
|
Compile {
|
||||||
#[arg(short = 'e')]
|
#[arg(short = 'e')]
|
||||||
@@ -78,10 +80,19 @@ fn main() -> ExitCode {
|
|||||||
let pool = make_pool(&kernel);
|
let pool = make_pool(&kernel);
|
||||||
eval(&code, &kernel, &pool)
|
eval(&code, &kernel, &pool)
|
||||||
}
|
}
|
||||||
Some(Commands::Run { file }) => {
|
Some(Commands::Run { file, repeat }) => {
|
||||||
let kernel = make_kernel(cli.verbose, cli.quiet);
|
let kernel = make_kernel(cli.verbose, cli.quiet);
|
||||||
let pool = make_pool(&kernel);
|
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::Compile { expr, file }) => compile(expr, file),
|
||||||
Some(Commands::Bench {
|
Some(Commands::Bench {
|
||||||
|
|||||||
Reference in New Issue
Block a user