|
1 | 1 | # CodeNothing 更新日志 |
2 | 2 |
|
| 3 | +## [v0.5.4] - 2025-07-29 |
| 4 | +### 🎯 重大新功能:函数指针数组与Lambda闭包完整实现 (Function Pointer Arrays & Lambda Closures) |
| 5 | + |
| 6 | +#### 🚀 核心特性 |
| 7 | +- **函数指针数组完整支持** |
| 8 | + - 函数指针数组类型声明:`operations : []*fn(int, int) : int;` |
| 9 | + - 函数指针数组初始化:`operations = [add, subtract, multiply, divide];` |
| 10 | + - 数组索引访问:`firstOp : *fn(int, int) : int = operations[0];` |
| 11 | + - 直接调用语法:`result = operations[0](10, 5);` |
| 12 | + - Lambda函数指针数组:`lambdas = [((a, b) => a + b), ((a, b) => a - b)];` |
| 13 | + |
| 14 | +- **Lambda函数闭包支持** |
| 15 | + - 自动闭包变量捕获:Lambda函数自动捕获外部作用域变量 |
| 16 | + - 智能变量分析:递归分析Lambda体中使用的外部变量 |
| 17 | + - 多变量闭包:支持捕获多个外部作用域变量 |
| 18 | + - 作用域优先级:参数变量优先于闭包变量 |
| 19 | + - 闭包环境管理:正确的闭包变量生命周期管理 |
| 20 | + |
| 21 | +- **复合表达式解析** |
| 22 | + - 数组索引后函数调用:`array[index](args)` |
| 23 | + - 函数指针调用表达式:`FunctionPointerCall` |
| 24 | + - 复杂表达式链:支持多层嵌套的复合表达式 |
| 25 | + |
| 26 | +#### 技术实现 |
| 27 | +- **AST扩展**: 新增 `ArrayAccess` 和 `FunctionPointerCall` 表达式类型 |
| 28 | +- **闭包系统**: `closure_env` 字段存储捕获的外部变量 |
| 29 | +- **变量分析**: `analyze_lambda_variables` 方法智能分析变量依赖 |
| 30 | +- **类型检查**: 完整的数组类型和函数指针数组类型匹配 |
| 31 | +- **表达式解析**: 支持复合表达式的递归解析 |
| 32 | + |
| 33 | +#### 示例代码 |
| 34 | +```codenothing |
| 35 | +// 函数指针数组 |
| 36 | +fn add(a : int, b : int) : int { return a + b; }; |
| 37 | +fn subtract(a : int, b : int) : int { return a - b; }; |
| 38 | +
|
| 39 | +operations : []*fn(int, int) : int = [add, subtract]; |
| 40 | +result1 : int = operations[0](10, 5); // 15 |
| 41 | +result2 : int = operations[1](10, 5); // 5 |
| 42 | +
|
| 43 | +// Lambda函数指针数组 |
| 44 | +lambdas : []*fn(int, int) : int = [ |
| 45 | + ((a, b) => a + b), |
| 46 | + ((a, b) => a * b), |
| 47 | + ((a, b) => a * a + b * b) |
| 48 | +]; |
| 49 | +result3 : int = lambdas[2](3, 4); // 25 |
| 50 | +
|
| 51 | +// Lambda闭包 |
| 52 | +multiplier : int = 3; |
| 53 | +base : int = 10; |
| 54 | +
|
| 55 | +// 捕获外部变量的Lambda |
| 56 | +multiply : *fn(int) : int = (x => x * multiplier); |
| 57 | +calculate : *fn(int) : int = (x => x + base + multiplier); |
| 58 | +
|
| 59 | +result4 : int = multiply(5); // 15 |
| 60 | +result5 : int = calculate(7); // 20 |
| 61 | +``` |
| 62 | + |
| 63 | +--- |
| 64 | + |
3 | 65 | ## [v0.5.3] - 2025-07-29 |
4 | 66 | ### 🎯 重大新功能:函数指针和Lambda函数完整实现 (Function Pointers & Lambda Functions) |
5 | 67 |
|
@@ -216,7 +278,7 @@ derefStatus : Status = *statusPtr; |
216 | 278 | #### 已知限制 |
217 | 279 | - ✅ ~~暂不支持指针算术运算(如ptr + 1)~~ **已实现** |
218 | 280 | - ✅ ~~暂不支持多级指针(**int)~~ **已实现** |
219 | | -- ✅ ~~函数指针和Lambda函数~~ **已在v0.5.3完整实现** |
| 281 | +- ✅ ~~函数指针、Lambda函数、函数指针数组和Lambda闭包~~ **已在v0.5.4完整实现** |
220 | 282 | - ✅ ~~`(*ptr).method()` 语法暂不支持~~ **已实现** |
221 | 283 | - 指针递增递减操作符(++ptr, ptr++)计划在v0.5.x实现 |
222 | 284 | - 智能指针(shared_ptr, unique_ptr)计划在v0.6.0实现 |
|
0 commit comments