此版本专注于运行时的稳定性和正确性。我们针对解释器(Interpreter)和 Go IR 转译器(Transpiler)两种执行模式进行了全面的测试套件评估,共执行 1,203 个测试用例,涵盖了全部 11 个标准库模块。测试通过率从 94% (1,140/1,203) 提升至 100% (1,201/1,203),剩余 2 个未通过案例为环境依赖型跳过(MySQL/PostgreSQL 连接配置)。代码库:https://github.com/brettinhere/Codong
修改摘要
-
修复了 8 个源文件中的 58 个缺陷
-
新增 782 行代码,删除 99 行代码
-
引入零回归(Zero Regressions)
详细变更日志
错误传播系统 (Error Propagation System)
-
修复了 ?(传播操作符)在 Go IR 模式下无法正确检测 Map 类型返回值中错误字段的问题。此前,包含结构化错误对象的 HTTP 模块响应无法被 cPropagate 拦截。
-
修复了 try/catch 块中错误字段访问(.code, .message, .retry)在 Go IR 模式下返回空值的问题,原因是 CodongError 结构体字段的类型断言错误。
-
修复了多模块错误传播问题,即嵌套函数调用中产生的数据库错误会被静默丢弃,而无法通过调用栈正常向上传播。
控制流 (Control Flow)
-
修复了 try/catch 块内部的 break 和 continue 语句。Go IR 运行时现在可以正确使用哨兵 panic 值(__codong_break__, __codong_continue__),这些值在 recovery 后会被重新抛出,从而保证了循环控制流的语义。
-
修复了跨行 else if 的解析问题。解析器现在通过在检查 else 关键字前消耗掉中间的换行符,从而正确处理 } \n else if 结构。
HTTP 模块
Redis 模块
-
修复了由于错误的类型断言导致的 pipeline 执行崩溃(panic)。Pipeline 结果现在对 *goredis.IntCmd、*goredis.StringCmd 等多种命令类型使用 type switch 进行处理。
-
修复了 cache singleflight 加载器的错误处理。当加载器函数返回错误时,缓存不再存储失败的结果,并在后续调用中正确地重新触发加载器。
-
修复了滑动窗口频率限制器使用整数除法而非毫秒级时间戳的问题,这曾导致窗口边界计算错误。
-
修复了多实例命名空间隔离。命名 Redis 连接现在会将所有操作正确限制在已注册的实例作用域内,而不再默认指向最后一个连接的实例。
文件系统模块 (File System Module)
数据库模块 (Database Module)
OAuth 模块
解析器 (Parser)
测试矩阵
| 类别 |
测试用例 |
通过 |
失败 |
跳过 |
| 词法 & 解析器 |
180 |
180 |
0 |
0 |
| 解释器核心 |
245 |
245 |
0 |
0 |
| Go IR 转译器 |
248 |
248 |
0 |
0 |
| HTTP 模块 |
42 |
42 |
0 |
0 |
| Web 模块 |
96 |
96 |
0 |
0 |
| 数据库模块 |
78 |
76 |
0 |
2 |
| Redis 模块 |
120 |
120 |
0 |
0 |
| 文件系统 |
48 |
48 |
0 |
0 |
| 图像模块 |
36 |
36 |
0 |
0 |
| OAuth 模块 |
32 |
32 |
0 |
0 |
| 集成测试 |
78 |
78 |
0 |
0 |
| 总计 |
1,203 |
1,201 |
0 |
2 |
跳过原因:MySQL 连接(未配置 MYSQL_URL),PostgreSQL 连接(未配置 PG_URL)
受影响文件
engine/goirgen/generator.go +35 -12
engine/goirgen/runtime.go +669 -55
engine/interpreter/http_module.go +40 -8
engine/interpreter/infra_modules.go +6 -2
engine/interpreter/interpreter.go +81 -14
engine/interpreter/web_module.go +2 -2
engine/parser/parser.go +37 -6
stdlib/codongerror/error.go +11 -0
兼容性
此版本与 v0.1.0 完全向后兼容。语言语法或模块 API 未发生任何变化。所有现有的 .cod 程序将以完全相同的方式执行。
安装
curl -fsSL https://codong.org/install.sh * sh
或从源码构建:
git clone https://github.com/brettinhere/Codong.git
cd Codong && go build -o bin/codong ./cmd/codong