0264408
deab894864
doc: 修正README中upvalue捕获层数限制的表述
...
实际机制是增量逐层建立,通过enclosing_locals合并链
理论上不限深度;仅一次性链创建受限于3层穿透
Co-Authored-By: Claude <noreply@anthropic.com >
2026-06-26 10:49:41 +08:00
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