Skip to content
This repository was archived by the owner on Aug 18, 2025. It is now read-only.

Commit 9278bd6

Browse files
committed
feat(core): 移除硬编码内置函数,完善循环控制和数组支持
- 移除编译器和 VM 中对 println 函数的特殊处理逻辑 - 实现 while 和 for 循环的完整支持 - 修复数组类型推断和函数参数类型规范问题 - 优化栈管理系统,修复函数调用栈和内存管理 - 完善测试验证,增加库导入和数组功能测试 - 提升架构一致性,严格遵循无内置函数的设计原则
1 parent 0d02226 commit 9278bd6

File tree

1 file changed

+177
-0
lines changed

1 file changed

+177
-0
lines changed

chagelog0.9.4.md

Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,180 @@
152152
- O(1)复杂度的函数查找实现
153153
- 避免字符串匹配的性能损耗
154154

155+
---
156+
157+
## [v0.9.4 Pre3] - 2025-08-16
158+
159+
### 核心设计原则回归
160+
161+
#### 移除硬编码内置函数
162+
- **设计原则**:CodeNothing的设计宗旨是"没有内置函数,内置函数以Library实现"
163+
- 移除编译器中硬编码的`println`函数特殊处理逻辑
164+
- 移除VM中的`Print`字节码指令处理
165+
- 移除语句编译中对内置函数的特殊判断逻辑
166+
167+
#### 统一库函数调用机制
168+
- 所有函数调用(包括`println`)必须通过`using lib <library>`导入
169+
- 强制使用`using lib <io>; using ns std;`来启用`println`功能
170+
- 确保VM和解释器都遵循相同的库导入规则
171+
172+
### VM字节码系统修复
173+
174+
#### 编译器模块修复 (`src/vm/compiler.rs`)
175+
- 移除`Expression::FunctionCall`中对`println`的特殊处理分支
176+
- 移除`Statement::FunctionCallStatement`中的内置函数检测逻辑
177+
- 统一所有函数调用通过库系统或命名空间系统处理
178+
- 改进错误信息,提示用户导入相应库
179+
180+
#### VM执行引擎修复 (`src/vm/vm.rs`)
181+
- 移除`ByteCode::Print`指令的执行逻辑
182+
- 所有输出功能通过`CallLibrary`指令调用`std::println`
183+
- 确保栈管理的一致性,移除特殊的栈处理逻辑
184+
185+
#### 字节码指令集扩展 (`src/vm/bytecode.rs`)
186+
- `Print`指令标记为未使用(保留向后兼容性)
187+
- 新增循环控制指令:`Jump``JumpIfFalse``JumpIfTrue`
188+
- 所有输出操作统一使用`CallLibrary`指令
189+
- 完善控制流指令集,支持复杂程序结构
190+
191+
### 控制流语句完整实现
192+
193+
#### While循环支持
194+
- 实现VM中`while`循环的完整编译和执行
195+
- 添加`compile_while_loop`方法处理循环体编译
196+
- 支持嵌套while循环和复杂条件表达式
197+
- 正确处理循环中的变量作用域
198+
199+
#### For循环支持
200+
- 实现传统for循环:`for (init; condition; increment)`
201+
- 实现范围for循环:`for (item in collection)`
202+
- 添加循环控制语句:`break``continue`
203+
- 支持多层嵌套for循环结构
204+
205+
#### 循环字节码指令
206+
- 新增字节码指令:
207+
- `Jump(u32)` - 无条件跳转
208+
- `JumpIfFalse(u32)` - 条件跳转
209+
- `JumpIfTrue(u32)` - 条件跳转(保留)
210+
- 实现循环的高效字节码生成
211+
- 优化跳转指令的地址计算
212+
213+
### 数组类型系统完善
214+
215+
#### 类型推断修复
216+
- 修复VM编译器中对`auto`类型的数组推断
217+
- 正确处理`[]int`数组类型语法(而非`[int]`
218+
- 修复类型检查器中数组索引访问的类型验证
219+
220+
#### 函数参数类型规范
221+
- 修复函数参数中`auto`类型导致的类型检查错误
222+
- 要求数组参数使用明确类型声明:`arr : []int`
223+
- 提高类型安全性和代码可读性
224+
225+
### 栈管理系统优化
226+
227+
#### 函数调用栈修复
228+
- 修复`Print`指令移除后的栈平衡问题
229+
- 统一函数调用语句的栈清理逻辑
230+
- 确保所有函数调用后正确执行`Pop`指令
231+
232+
#### 内存管理改进
233+
- 优化VM栈空间使用
234+
- 修复潜在的栈溢出风险
235+
- 提高内存使用效率
236+
237+
### 测试验证完善
238+
239+
#### 库导入测试
240+
- 创建`test_vm_with_library.cn`验证正确的库导入语法
241+
- 测试`using lib <io>; using ns std;`的完整流程
242+
- 验证`println`通过库系统的正确调用
243+
244+
#### 数组功能测试
245+
- 测试数组创建、访问、修改的完整流程
246+
- 验证数组类型推断的正确性
247+
- 确保VM和解释器的数组处理一致性
248+
249+
#### 循环控制测试
250+
- While循环的条件判断和循环体执行
251+
- For循环的初始化、条件检查、递增操作
252+
- 嵌套循环的正确执行和变量作用域
253+
- Break和continue语句的跳转逻辑
254+
255+
#### 综合功能测试
256+
- 基础变量和表达式计算
257+
- 条件语句和循环控制
258+
- 数组操作和函数调用
259+
- 命名空间函数的正确执行
260+
- 复杂控制流的组合使用
261+
262+
### 架构一致性提升
263+
264+
#### 设计原则遵循
265+
- **严格遵循**"没有内置函数"的核心设计原则
266+
- 所有功能通过库系统提供,保持语言的纯净性
267+
- 编译器和VM不包含任何硬编码的函数实现
268+
269+
#### 库系统完整性
270+
- VM完全依赖库系统提供基础功能
271+
- 库加载机制在编译时和运行时的一致性
272+
- 支持动态库函数发现和映射
273+
274+
#### 错误处理改进
275+
- 提供清晰的库导入错误提示
276+
- 指导用户正确使用`using lib <library>`语法
277+
- 改进类型错误的诊断信息
278+
279+
### 修复的关键问题
280+
281+
#### 设计原则违背
282+
- **问题**:编译器硬编码了`println`函数处理
283+
- **修复**:移除所有硬编码逻辑,强制通过库导入
284+
285+
#### 栈管理不一致
286+
- **问题**`Print`指令的栈处理与其他指令不一致
287+
- **修复**:统一所有函数调用的栈管理逻辑
288+
289+
#### 类型系统缺陷
290+
- **问题**:数组类型推断和语法解析存在问题
291+
- **修复**:完善类型检查器和解析器的数组处理
292+
293+
#### 控制流支持不完整
294+
- **问题**:VM缺乏对while和for循环的完整支持
295+
- **修复**:实现完整的循环编译和执行机制
296+
297+
#### 测试覆盖不足
298+
- **问题**:缺乏对库导入机制和循环控制的完整测试
299+
- **修复**:创建专门的库导入和循环控制测试用例
300+
301+
### 技术实现亮点
302+
303+
#### 纯净的语言设计
304+
- 实现了真正的"无内置函数"语言架构
305+
- 所有功能模块化,通过库系统组织
306+
- 为未来的标准库扩展奠定基础
307+
308+
#### 统一的执行模型
309+
- VM和解释器使用相同的库调用接口
310+
- 消除了执行模式间的功能差异
311+
- 提供一致的开发体验
312+
313+
#### 高效的字节码执行
314+
- 简化的指令集提高执行效率
315+
- 优化的栈管理减少内存开销
316+
- 支持复杂的嵌套函数调用
317+
- 高效的循环跳转指令实现
318+
- 优化的条件分支执行路径
319+
320+
### 向前兼容性
321+
322+
#### 字节码兼容性
323+
- 保留`Print`指令定义,避免破坏现有字节码
324+
- 新的字节码生成不再使用废弃指令
325+
- 平滑的版本迁移路径
326+
327+
#### API稳定性
328+
- 库接口保持向后兼容
329+
- 编译器API的稳定性保证
330+
- 为生态系统发展提供稳定基础
331+

0 commit comments

Comments
 (0)