feat: 字节码VM基础设施 — 编译器、VM执行循环、Runtime trait

Phase 1-3: 基础VM架构
- 新增 Runtime trait: 抽象树遍历解释器和VM的共同接口
- NativeFn 改为接受 &mut dyn Runtime
- 重构所有内置函数使用新签名
- vm/opcode.rs: 33个字节码指令 + 编码/解码辅助函数
- vm/compiler.rs: AST→字节码编译器,支持变量解析、跳转回填、作用域
- vm/vm.rs: 栈式VM执行循环,支持全局变量、原生函数调用
- lib.rs: 新增 run_file_vm() + --vm CLI标志
- 修复: 跳转偏移计算、对象字面量编译

工作特性: 算术、变量、while/for循环、条件、数组、对象、字符串
待完成: 用户定义函数调用、闭包/upvalue捕获、完整require支持

Release模式: 1M算术循环 VM 0.44s vs 树遍历 0.89s (2.0x加速)
This commit is contained in:
2026-06-25 01:08:49 +08:00
parent 89952139c5
commit d854b22006
15 changed files with 2185 additions and 74 deletions
+12 -4
View File
@@ -3,13 +3,21 @@ use std::fs;
fn main() {
let args: Vec<String> = env::args().collect();
let use_vm = args.iter().any(|a| a == "--vm");
let file_args: Vec<&String> = args.iter().filter(|a| *a != "--vm").collect();
match args.len() {
match file_args.len() {
1 => aster_core::run_repl(),
2 => {
let filename = &args[1];
let filename = file_args[1];
match fs::read_to_string(filename) {
Ok(src) => aster_core::run_file(filename, src),
Ok(src) => {
if use_vm {
aster_core::run_file_vm(filename, src)
} else {
aster_core::run_file(filename, src)
}
}
Err(e) => {
eprintln!("Error reading file '{}': {}", filename, e);
std::process::exit(1);
@@ -17,7 +25,7 @@ fn main() {
}
}
_ => {
eprintln!("Usage: aster [script]");
eprintln!("Usage: aster [--vm] [script]");
std::process::exit(1);
}
}