Commit Graph

45 Commits

Author SHA1 Message Date
0264408 9f75ec68ee doc: 更新README,反映VM-only架构
- 移除树遍历解释器相关描述
- 移除 --vm 命令行标志
- 更新架构图和模块表,添加 runtime/ 模块
- 更新关键设计决策

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 10:45:50 +08:00
0264408 fa6ea512b3 refactor: VM-only architecture — remove tree-walking interpreter
Eliminate dual-engine architecture (Interpreter + Vm) in favor of
a single bytecode VM executor.

- Extract shared types (Value, FunctionProto, Closure, UpvalueObj,
  Runtime trait, NativeFn) into new  module
- Consolidate builtin registration in  — single
   used by VM, eliminates 40-line duplicate
- Delete tree-walker: exec.rs, eval.rs, interpreter.rs, env.rs, module.rs
- Change Value::Function(Rc<Function>) → Value::Function(Rc<Closure>)
  eliminating the closures HashMap pointer-key hack
- Fix VM semantic gaps found during migration:
  * Structural equality for Object/Array in is_equal
  * CompoundAssignGlobal opcode (global compound assigns were broken)
  * 9 string methods added to VM get_property
  * ForInInit error on non-iterable values
- Switch run_file/run_repl to VM; remove --vm CLI flag
- Move 327 tests from interpreter/ to vm/ — all pass

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 10:31:32 +08:00
0264408 abe0844816 fix: CompoundAssignUpvalue支持 + const变量赋值检查
- 新增 CompoundAssignUpvalue 字节码,闭包中 x+=5 不再报错
- Local/Upvalue 上的 is_const 编译期检查
- globals 改为 HashMap<String, (Value, bool)> 追踪 const,StoreGlobal 运行时拒绝
- DefineGlobal 指令新增 1 字节 mutable 标志
- 更新 README:双执行模式、for-in、require()、VM 模块说明

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-26 09:42:38 +08:00
elmma 7b9bded5ee chore: 消除所有编译器警告
- 移除unused方法: frame(), get_constant(), emit_i16_placeholder
- 移除LoopContext未使用字段: start_ip, scope_depth
- Vm字段改为私有: frames, open_upvalues
- is_const字段添加#[allow(dead_code)]
- 测试: 327/327 通过 | 0 warnings
2026-06-26 00:09:02 +08:00
elmma 9a193fd7ca feat: VM版require()模块加载支持
- Vm实现Runtime::require: lex→parse→compile→execute
- 模块隔离执行: 独立Vm实例,共享builtins
- Closure传递: 模块导出的函数闭包注册到父Vm
- 循环require支持: 缓存占位符机制

测试: 327/327 通过
验证: use_math.ast (add=42, mul=42, add(mul(2,3),1)=7)
2026-06-25 23:47:33 +08:00
elmma ddee395f52 feat: 传递式upvalue — 3层嵌套闭包支持
- upvalues改为Rc<RefCell<Vec<Upvalue>>>支持跨编译器共享
- resolve_upvalue: 通过grandparent_upvalues级联创建upvalue链
- compile_nested_function: 传递完整enclosing_locals链 + grandparent_upvalues
- Upvalue添加name字段用于传递式查找

测试: 327/327 通过 | Benchmark: 18/18 全部通过
2026-06-25 23:41:36 +08:00
elmma 9c9a17b149 feat: 重构for-in为预计算+隐藏局部变量模式
ForInInit: 改为预计算所有迭代元素为数组
ForInNext: 接收items_slot+idx_slot操作数,从局部变量读取
编译器: for-in迭代器使用隐藏局部变量(items, idx),隔离于value stack
修复: for-in在函数调用嵌套场景下栈对齐问题
修复: break路径在for-in中正确弹出循环变量
修复: ForInNext退出时push Nil以保持栈平衡
修复: 跳转偏移计算(移除emit_loop_jump中错误的-3)

通过: 17/18 benchmark测试 (全部for-in相关测试通过)
已知限制: 3层嵌套闭包(10c)需传递式upvalue支持
2026-06-25 23:32:23 +08:00
elmma 299003a718 feat: VM函数调用、闭包、upvalue捕获支持
- 实现用户定义函数调用 (CallFrame创建、参数传递、返回)
- 实现闭包/upvalue捕获 (编译器解析、VM捕获、LoadUpvalue/StoreUpvalue)
- 修复栈管理: StoreLocal peek语义、局部变量槽位分配
- 修复跳转偏移计算 (移除错误的-3偏置)
- 修复对象字面量编译 (每字段后Pop)
- 修复函数声明栈泄漏 (DefineGlobal后Pop)
- 添加ForInNext值Pop (避免栈累积)
- 添加OpCode::from_u8对非连续值的支持

通过: 算术、循环、条件、数组、对象、字符串、递归、闭包、upvalue
部分通过: for-in迭代器 (基本工作,复杂嵌套场景待修复)
未实现: VM版require()、复合upvalue赋值

测试: 327/327 通过
2026-06-25 23:16:59 +08:00
elmma d854b22006 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加速)
2026-06-25 01:08:49 +08:00
elmma 89952139c5 feat: 添加性能基准测试脚本 — 12类18项覆盖算术/函数/闭包/数组/对象/字符串/算法 2026-06-25 00:46:17 +08:00
elmma bdffe9e3c5 feat: IDE支持 — workspace拆分、LSP服务器、VS Code扩展
**Workspace 拆分**
- aster-core: 纯库,zero-dependency,包含 lexer/parser/ast/interpreter/error/analysis
- aster: REPL 二进制,薄封装 aster-core
- aster-lsp: LSP 语言服务器

**VS Code 扩展 (vscode-ext/)**
- TextMate 语法高亮 (.ast 文件)
- 语言配置 (注释切换、括号配对、自动缩进)
- LSP 客户端 (extension.js)

**LSP 服务端功能**
- Diagnostics: 实时显示 lex/parse 错误红色波浪线
- Completion: 关键字 + 内置函数 + 用户定义符号补全
- Hover: 悬停显示变量/函数信息
- Signature Help: 函数参数提示
- Goto Definition: Ctrl+Click 跳转到声明处
- Find References: 查找所有引用位置
- Rename: F2 重命名符号

**新增 analysis 模块**
- collect_symbols: AST 遍历收集符号
- find_declaration/find_all_references: Token 扫描定位声明和引用
2026-06-25 00:28:13 +08:00
0264408 99c9e9c9bd feat: 新增块注释及测试 2026-06-17 17:26:37 +08:00
0264408 df9ecb4de1 fix: 优化字符串类型在不同场景的打印形式 2026-06-17 16:08:40 +08:00
0264408 e356c208a6 feat: 实现模块引入功能以及测试 2026-06-17 15:57:45 +08:00
0264408 9428e270af refactor: 用 Value::get/set 简化属性访问,消除直接 borrow/borrow_mut 调用
- Value::set 签名改为接受 &str 并返回 RuntimeError,与 evaluator 对齐
- eval_get/eval_set/eval_index_get/eval_index_set 中统一使用 get/set
- 去掉 eval_index_get 和 eval_index_set 中不再使用的 map 绑定

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-17 15:05:59 +08:00
elmma bc74b5ee91 fix: 修改 Value::String 的显示格式,添加引号以增强可读性 2026-06-17 00:33:29 +08:00
elmma f0bba2f2aa feat: 添加数组和字符串的属性与方法支持,包括 length、push、pop、upper、lower、trim、contains、starts_with、ends_with、substring、replace 和 split 2026-06-17 00:23:43 +08:00
0264408 8e49df8062 feat: 添加字符串工具函数(split, trim, substring, replace, contains, upper, lower, starts_with, ends_with)及相关测试用例 2026-06-16 19:44:54 +08:00
0264408 bf705069a5 feat: 添加对数组和对象字面量的尾随逗号支持,更新相关测试用例 2026-06-16 19:40:24 +08:00
0264408 a7bedf6fa1 refactor: 优化代码组织 2026-06-16 19:33:16 +08:00
0264408 e4272943aa refactor: 抽离测试代码 2026-06-16 19:25:01 +08:00
0264408 fdd42fce19 feat: 添加对单引号字符串的支持,更新词法分析器和相关测试用例 2026-06-16 19:16:48 +08:00
0264408 5e431dbba4 feat: 添加对象索引访问和赋值支持,更新相关错误处理和测试用例 2026-06-16 19:14:00 +08:00
0264408 8b20580402 feat: 添加for-in循环支持,更新解析器、解释器和相关测试用例 2026-06-16 19:10:26 +08:00
0264408 75c1d230ad feat: 添加内置函数支持(len, typeof, push, pop),更新相关错误处理和测试用例 2026-06-16 19:03:47 +08:00
0264408 18fa53cf4a feat: 实现字符串与数字的连接操作,增强加法运算符的功能 2026-06-16 18:55:05 +08:00
0264408 db541c315b feat: 添加三元运算符支持,更新解析器和解释器以处理条件表达式 2026-06-16 18:41:42 +08:00
0264408 c2d6c518fc feat: 添加对const关键字的支持,允许定义不可变变量并增强相关错误处理 2026-06-16 17:24:17 +08:00
0264408 284a29a4be fix: 修复字符串转义、对象相等比较、除零处理
- 词法分析器:字符串字面量中支持 \n \t \r " \ 转义序列,未知转义序列报告错误并跳过剩余字符串
- 解释器:对象相等比较新增深度比较(键值对逐一比对)
- 解释器:除法和取模运算在除数为零时返回 RuntimeError,避免产生 inf/NaN

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-16 17:02:30 +08:00
0264408 983a7d8b34 feat: 添加标准测试 2026-06-16 16:56:17 +08:00
0264408 a76cd79be2 feat: 添加CLAUDE.md文件 2026-06-16 16:55:43 +08:00
0264408 c7e4e0dce0 feat: 更新错误处理机制,增强词法分析器和解析器的错误报告功能 2026-06-16 14:24:49 +08:00
0264408 e052226cdb feat: 重构main函数,添加run_file和run_repl函数以支持从文件和REPL读取输入 2026-06-16 10:11:11 +08:00
0264408 d951aa93ff feat: 优化print函数,简化参数输出逻辑 2026-06-16 09:36:41 +08:00
0264408 bd052699f5 feat: 添加取模运算符支持,更新解析器、解释器、词法分析器和相关示例以处理相关语法 2026-06-16 09:36:32 +08:00
0264408 259dcf1af9 feat: 更新赋值运算符示例,添加数组和对象操作的打印输出 2026-06-16 08:58:04 +08:00
0264408 a40c8d1e9e feat: 添加赋值运算符支持,更新解析器、解释器和词法分析器以处理相关语法 2026-06-16 08:55:21 +08:00
0264408 ae3060708d feat: 添加break和continue语句的支持,更新解析器、解释器和词法分析器以处理相关语法 2026-06-10 17:37:12 +08:00
0264408 dd3f18da6f feat: 添加数组字面量和索引访问功能,更新解析器和解释器以支持数组操作 2026-04-28 10:14:13 +08:00
0264408 5dc55c3476 feat: 实现for循环语句的解析和执行逻辑,更新词法分析器以支持for关键字 2026-02-11 09:39:06 +08:00
0264408 0e0077d96b feat: 改进Value对象的显示格式,增加键值对输出 2026-02-11 09:02:52 +08:00
0264408 e9fbb92b15 feat: 更新README 2026-02-10 17:30:44 +08:00
0264408 521c7006d9 feat: 新增对象字面量和属性访问表达式 2026-02-10 17:13:40 +08:00
0264408 5c5ca8600a feat: 新增内置函数input 2026-02-06 11:46:27 +08:00
0264408 f86300f3ce Initialize Aster project with basic structure, including Cargo configuration, lexer, parser, interpreter, and AST definitions. Add a sample script and README documentation. Implement basic error handling and environment management for variable storage. 2026-02-04 16:42:51 +08:00