Files
l-language/docs/analysis/architecture-analysis-report-2026-06-05-1708.md
T
Serendipity 5a0bf60698 docs: CHANGELOG v0.4/v0.5 + README/CLAUDE 版本刷新
- CHANGELOG: 新增 v0.4.0 (struct+RAII) 和 v0.5.0 (alias+enum+array+impl+match)
- README: 版本0.5.0, 测试145, 完整功能列表+运算符表
- CLAUDE: v0.5 已知限制更新
2026-06-05 18:42:24 +08:00

6.7 KiB
Raw Blame History

L Language 架构分析报告 — 无代码变更 (快照复查)

日期: 2026-06-05 17:08 | 自动生成 | 无源代码变更 上次代码基线: a15cd9d (2026-06-05 15:09 报告, v0.5) 当前 HEAD: a15cd9d feat: match 表达式 (P1 #8 收官)

结论: 自上次架构分析报告以来无新提交。以下为当前架构快照及健全性复查。


代码变更检查

git log a15cd9d..HEAD → (空)

a15cd9d 仍是 HEAD。与上次报告 (2026-06-05 15:09) 完全一致。零文件变更,零行差异。


1. 当前架构快照 (v0.5)

1.1 编译流水线

源码(.l) → Lexer(词法) → Parser(语法) → Sema(语义) → Codegen(LLVM IR) → Target(obj) → GCC 链接(.exe)
            50 Token      25 AST 节点      类型标注     LLVMModuleRef       .o 文件

1.2 模块清单与行数

模块 文件 行数 职责
include/ l_lang.h 57 TypeKind (10), SourceLoc, 公共类型
lexer/ lexer.c + token.c (+ .h) 163 + 54 手写状态机, 50 Token 类型
ast/ ast.c + ast.h 245 + 159 25 种 AST 节点, 工厂函数
parser/ parser.c + parser.h 825 + 13 递归下降 + Pratt, parse_type_expr 统一
sema/ sema.c + symbol.c (+ .h) 809 + 155 类型推断, alias 展开, impl mangle
codegen/ codegen.c + target.c (+ .h) 824 + 35 LLVM IR 生成, GEP, enum/array/match
driver/ main.c + error.c (+ .h) 160 + 49 流水线串联, 错误报告
util/ arena.c + arena.h 45 + 17 Bump allocator (8MB)
实现总计 ~3,336 行
test/ test_*.c × 4 944 30 单元测试函数
test/ programs/*.l × 23 23 集成测试程序
测试总计 ~944 行

1.3 核心类型系统

枚举 成员数 位置
TypeKind 10 (+2 vs v0.4) include/l_lang.h:9, TYPE_ENUM + TYPE_ARRAY
TokenKind 50 (+11 vs v0.4) src/lexer/token.h
AstNodeKind 25 (+7 vs v0.4) src/ast/ast.h
SymbolKind 5 (+1 vs v0.4) src/sema/symbol.h:7, SYM_ENUM

TypeKind 成员: TYPE_I64, TYPE_F64, TYPE_BOOL, TYPE_STR, TYPE_VOID, TYPE_STRUCT, TYPE_ENUM, TYPE_ARRAY, TYPE_UNKNOWN, TYPE_ERROR

SymbolKind 成员: SYM_VARIABLE, SYM_PARAMETER, SYM_FUNCTION, SYM_STRUCT, SYM_ENUM

1.4 关键架构决策

决策 说明
impl 改名 mangle sema 阶段将 impl S { fn f } 转为 S$f, 追加 self 参数; codegen 零修改
match 脱糖为 let+if-else parser 阶段直接生成 AST_BLOCK + AST_LET_STMT + AST_IF_STMT 链; sema/codegen 完全复用
parse_type_expr 统一入口 所有类型标注解析通过同一函数, 天然支持 [T; N] 嵌套
SourceLoc 聚合 { int line; int col; } 替代所有松散参数对
cleanup_list 动态扩容 arena realloc, 消除固定 64 槽溢出风险

2. 功能完成度总览

2.1 P0 (v0.1-v0.4) — 100%

  • 词法/语法/语义三阶段解析
  • i64/f64/bool/void/str 类型
  • 算术/比较/逻辑运算
  • if/else/while/return 控制流
  • 函数定义+调用+递归
  • let/let mut 变量+赋值
  • 字符串拼接 str+str
  • 复合赋值 += -= *= /=
  • for + range (去糖为 let mut + while + assign)
  • struct 声明/初始化/字段访问/嵌套
  • RAII 自动内存管理 (cleanup_list)
  • 3 内置函数: print_i64, print_f64, print_str

2.2 P1 (v0.5) — 100%

# 功能 Rust 启发 实现方式
P1-5 struct 参数/返回值 值语义 parse_type_expr 扩展 + codegen struct type
P1-6 数组+索引 [T; N], arr[i] parse_type_expr 嵌套 + GEP
P1-7 枚举 enum i64 常量映射 + SYM_ENUM
P1-8 match 表达式 模式匹配 (简化) parser 脱糖为 let+if-else
P1-9 struct 方法 impl impl block sema mangle + 普通函数调用
P1-10 类型别名 type alias alias 展开链 (sema Pass 0)

3. 测试覆盖

测试文件 测试函数 行数 覆盖范围
test_lexer.c 3 53 token 识别, 关键字, 操作符, 注释
test_parser.c 5 68 算术, let, if, while, 函数
test_sema.c 21 391 类型检查, let mut, str, struct, enum, array, method, type alias
test_codegen.c 9 432 struct, enum, array, method call, LLVMVerifyModule
合计 38 (+11 vs v0.4) 944
集成 .l 程序 23 算术→if→for→struct→enum→array→method→match

4. Rust 对标缺失清单 (现状)

已完成

特性 状态
默认不可变 (let vs let mut)
复合赋值
for + range
struct 具名域
impl 方法
enum + match (简化)
类型别名
数组固定大小
RAII 自动释放

缺失 (P2 — 中期)

# 功能 预计工时 优先级
11 表达式作为值 (expression-oriented) 23 天
12 模块系统 mod + use 35 天
13 泛型 (单态化) 57 天
14 枚举关联数据 (代数数据类型) 2 天
15 trait / 接口 57 天

缺失 (P3 — 长期)

# 功能 预计工时
16 所有权 / 借用检查 24 周
17 自举 (L 编译 L) 46 周
18 标准库 (prelude) 46 周

5. 技术债务 (不变)

# 问题 严重度 状态
1 analyze_expr 膨胀 (350+ 行) 未修复
2 parser.c 单文件 825 行 未修复
3 codegen.c 单文件 824 行 未修复
4 match 脱糖在 parser, 非独立 pass 未修复
5 数组 struct 元素类型 [Point; N] 未实现 未修复
6 match/sema 无独立单元测试 未修复
7 TypeKind 耦合 (加新类型需改 7+ 文件) 未修复
8 AST Visitor 缺失 (加节点需改 4 个 switch) 未修复
9 CHANGELOG 未更新 v0.4/v0.5 未修复
10 LLVM 22 无 mem2reg C API 平台限制

6. 推荐开发路线图 (重述)

v0.6 优先 (23 天)

  1. parser 独立 desugar pass (for/match/compound assign)
  2. 数组 struct 元素类型 [Point; N]
  3. match/sema 单元测试
  4. CHANGELOG 更新

v0.7 优先

  1. 表达式作为值 (expression-oriented)
  2. 枚举关联数据 (代数数据类型)
  3. AST Visitor 宏驱动

本报告由 Codex 自动生成于 2026-06-05 17:08。自上次代码基线 a15cd9d (v0.5) 以来无新提交 — 代码库处于稳定状态。P1 路线图全线完成, 下一迭代应聚焦 parser 重构、数组 struct 元素类型、match/sema 测试、表达式作为值。