docs: CLAUDE.md v0.7 全面更新 — 架构/类型/限制/测试同步

This commit is contained in:
2026-06-07 13:04:59 +08:00
parent c285a145c8
commit 2247fa39f4
+53 -25
View File
@@ -2,7 +2,7 @@
## 项目概述
L Language v0.6 — 用 C17 实现的静态类型编译型编程语言,Rust 风格语法,LLVM 22.x 后端。经典 5 阶段流水线:词法 → 语法 → 语义 → IR → 可执行文件。197 单元测试 + 36 集成程序。
L Language v0.7 — 用 C17 实现的静态类型编译型编程语言,Rust 风格语法,LLVM 22.x 后端。经典 5 阶段流水线:词法 → 语法+去糖)→ 语义 → IR → 可执行文件。197 单元测试 + 37 集成程序。
## 语言设计哲学
@@ -135,23 +135,29 @@ L Language/
│ │ └── lexer.h/c 手写状态机,72 种 Token 类型
│ ├── parser/
│ │ ├── parse_internal.h 共享 Parser struct + 内联辅助
│ │ ├── parser.h/c 语句/声明/程序入口 (564 行)
│ │ ├── expr.c 表达式/类型解析 (484 行, Pratt 主循环)
│ │ ── desugar.h/c 独立去糖 pass (109 行, match/guard/for/if-let/复合赋值)
│ │ ├── parser.h/c 语句/声明/程序入口 (603 行)
│ │ ├── expr.c 表达式/类型解析 (485 行, Pratt 主循环)
│ │ ── desugar.h/c 独立去糖 pass (109 行, 5 种去糖)
│ │ └── (parser.h) 公开接口
│ ├── ast/
│ │ ── ast.h/c 27 种 AST 节点 + 工厂函数
│ │ ── ast.h/c 27 种 AST 节点 + 工厂函数
│ │ ├── visit.h/c Visitor 统一 dispatch 框架
│ │ └── (ast.h) 公开接口
│ ├── sema/
│ │ ├── sema_internal.h 共享声明 + 向前声明
│ │ ├── symbol.h/c 作用域链 (Scope* parent 链表)
│ │ ├── sema.h/c 语义分析入口 + analyze_node (499 行)
│ │ ── typeck.c 表达式类型检查 + 泛型单态化 (629 行)
│ │ ├── sema.h/c 语义分析入口 + analyze_node (500 行)
│ │ ── typeck.c 表达式类型检查 (559 行, Visitor dispatch)
│ │ ├── mono.c 泛型单态化 (97 行, AST 类型替换)
│ │ └── type_table.h/c 数据驱动类型描述表 (14 种)
│ ├── codegen/
│ │ ├── codegen_internal.h 共享 CgCtx + 表操作声明
│ │ ├── codegen.h/c 语句生成 + 模块入口 (453 行)
│ │ ── cg_expr.c LLVM 表达式生成 + 类型映射 (440 行)
│ │ ├── codegen.h/c 语句生成 + 模块入口 (454 行)
│ │ ── cg_expr.c LLVM 表达式生成 (426 行, Visitor dispatch)
│ │ └── target.h/c 目标平台输出 (obj 文件)
│ ├── driver/
│ │ ├── main.c 入口 + 命令行解析 + 流水线串联
│ │ └── error.h/c ErrorInfo / ErrorList 错误报告
│ │ └── error.h/c ErrorInfo / ErrorList (arena 分配)
│ └── util/
│ └── arena.h/c Bump allocator (8MB, 8 字节对齐)
├── test/
@@ -160,7 +166,7 @@ L Language/
│ ├── test_parser.c 语法测试 (54 tests, 20 functions)
│ ├── test_sema.c 语义测试 (74 tests, 24 functions)
│ ├── test_codegen.c 代码生成测试 (28 tests, 10 functions)
│ └── programs/ .l 集成测试 (36 个程序)
│ └── programs/ .l 集成测试 (37 个程序)
├── docs/
│ ├── PRD.md 产品需求文档
│ └── superpowers/plans/ 实现计划
@@ -211,12 +217,21 @@ LLVMModuleRef codegen_module(AstNode* ast, const char* module_name,
## 类型系统
| L 类型 | LLVM 类型 | C 常量创建 |
|--------|-----------|-----------|
| `i64` | `LLVMInt64Type()` | `LLVMConstInt(ty, val, true)` |
| `f64` | `LLVMDoubleType()` | `LLVMConstReal(ty, val)` |
| `bool` | `LLVMInt1Type()` | `LLVMConstInt(ty, val, false)` |
| `void` | `LLVMVoidType()` | |
| L 类型 | LLVM 类型 | 说明 |
|--------|-----------|------|
| `i32` | `LLVMInt32Type()` | 有符号 32-bit |
| `i64` | `LLVMInt64Type()` | 有符号 64-bit (默认整数) |
| `u64` | `LLVMInt64Type()` | 无符号 64-bit |
| `f64` | `LLVMDoubleType()` | 双精度浮点 |
| `bool` | `LLVMInt1Type()` | 布尔 |
| `char` | `LLVMInt8Type()` | 字符 |
| `str` | `i8*` (指针) | 字符串,拼接用 malloc+memcpy |
| `void` | `LLVMVoidType()` | 无返回值 |
| `struct` | `LLVMStructType()` | 结构体,字段 GEP |
| `enum` | `{i64, i64}` | tagged union |
| `array` | `LLVMArrayType()` | 固定大小 `T[N]`GEP 索引 |
类型表统一管理在 `type_table.c`promote/convert/numeric 查表驱动)。
类型推断规则:
- 字面量:`42``i64`, `3.14``f64`, `true``bool`
@@ -270,19 +285,32 @@ done
- **C17 标准**`-Wall -Wextra -g`,零编译警告
- **Arena 分配**Token、AST、符号表全部从 arena 分配,无 malloc/free 散落
- **LLVM 路径**`D:\settings\Language\LLVM`,C API 头文件手动补充(v22.1.7 预编译包缺少部分头文件)
- **链接器**MinGW 环境用 **gcc** 链接(非 clang,避免 MSVC 依赖)
- **链接器**自包含 clang+lld(优先),gcc fallback。CreateProcess 替代 system()
- **Windows**:仅支持 Windows 11 + MinGW-w64
- **错误消息**:中文,格式 `文件名:行号:列号: 描述`
## 已知限制 (v0.5)
## 已知限制 (v0.7)
-泛型 (单态化)
- trait / 接口
- 无模块系统(所有代码单文件)
- 无指针/引用类型
- 借用检查 (远期)
-指针/引用类型(`&T`, `*T`
-借用检查(远期)
- 嵌套数组支持有限
- `match` 仅语句级(非表达式)
- 无闭包 / lambda
- 无多返回值(`(T, U)` 元组)
- 无标准库
- 仅单文件+mod 模块,无包管理器
- Windows 独占(LLVM 22 + MinGW-w64
### 近期已解决 (v0.5→v0.7)
- ✅ 泛型单态化 (`fn id<T>(x: T) -> T`)
- ✅ trait / 接口 (`trait Show` + `extend Trait Struct`)
- ✅ 模块系统 (`mod` + `use` + `pub`)
- ✅ ADT 枚举关联数据 (`enum Option { Some(T), None }`)
-`if let` 模式匹配语法糖
- ✅ 表达式作为值 (`if-expr`, block 最后表达式)
- ✅ 独立 desugar pass (match/guard/for/if-let/复合赋值)
- ✅ TypeTable 数据驱动 + AST Visitor dispatch
- ✅ 全部源文件 <800 行,197 单元 + 37 集成测试
## 版本号升级清单