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:
+12
-4
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user