docs: CLAUDE.md 语言设计哲学 + 多语言特性分析
- 去糖优先: 复杂语法在parser层降级 - 博采众长: Elixir/Swift/Python/Go/Kotlin/Zig 候选特性 - P0-P3 优先级矩阵: 管道/guard/插值/命名参数优先
This commit is contained in:
@@ -4,6 +4,66 @@
|
|||||||
|
|
||||||
L Language v0.5 — 用 C17 实现的静态类型编译型编程语言,Rust 风格语法,LLVM 22.x 后端。经典 5 阶段流水线:词法 → 语法 → 语义 → IR → 可执行文件。145 单元测试 + 23 集成程序。
|
L Language v0.5 — 用 C17 实现的静态类型编译型编程语言,Rust 风格语法,LLVM 22.x 后端。经典 5 阶段流水线:词法 → 语法 → 语义 → IR → 可执行文件。145 单元测试 + 23 集成程序。
|
||||||
|
|
||||||
|
## 语言设计哲学
|
||||||
|
|
||||||
|
L 借鉴 Rust 语法骨架(let/mut/struct/impl/match),但有自己的设计理念:
|
||||||
|
|
||||||
|
1. **去糖优先** — 复杂语法在 parser 层去糖为简单原语,零 sema/codegen 改动。已验证: for/match/复合赋值。
|
||||||
|
2. **博采众长** — 从多语言吸收优秀特性,而非单一模仿 Rust:
|
||||||
|
- **Elixir/F#** → 管道运算符 `|>`
|
||||||
|
- **Go** → defer、多返回值
|
||||||
|
- **Swift** → guard、字符串插值、命名参数
|
||||||
|
- **Kotlin** → 扩展函数、when 表达式
|
||||||
|
- **Python** → 列表推导式、装饰器
|
||||||
|
- **Zig** → comptime 常量折叠
|
||||||
|
3. **渐进演进** — 先加语法糖(parser 层),后加强类型(sema/codegen 层)
|
||||||
|
|
||||||
|
### 候选特性优先级
|
||||||
|
|
||||||
|
| 优先级 | 特性 | 来源 | 实现层 | 预计行数 | 独特性 |
|
||||||
|
|--------|------|------|--------|---------|--------|
|
||||||
|
| **P0** | 管道 `\|>` | Elixir/F# | parser | ~30 | 极高 |
|
||||||
|
| **P0** | guard 语句 | Swift | parser | ~15 | 高 |
|
||||||
|
| **P0** | 字符串插值 | Swift/Python | lexer+parser | ~60 | 高 |
|
||||||
|
| **P0** | 命名参数 | Swift/Kotlin | parser | ~50 | 高 |
|
||||||
|
| P1 | 列表推导式 | Python | parser | ~50 | 高 |
|
||||||
|
| P1 | 装饰器 `@` | Python | parser | ~40 | 高 |
|
||||||
|
| P1 | defer | Go/Zig | parser+codegen | ~60 | 中 |
|
||||||
|
| P1 | 扩展函数 | Kotlin | parser+sema | ~80 | 高 |
|
||||||
|
| P1 | when 表达式 | Kotlin | parser | ~30 | 中 |
|
||||||
|
| P2 | 多返回值 | Go | 全流水线 | ~200 | 中 |
|
||||||
|
| P2 | 空安全 `?.` / `??` | Kotlin | sema+codegen | ~150 | 中 |
|
||||||
|
| P2 | comptime 求值 | Zig | sema+codegen | ~200 | 极高 |
|
||||||
|
| P3 | 隐式接口 | Go | sema+codegen | ~300 | 中 |
|
||||||
|
| P3 | in/out 参数 | Carbon/Cpp2 | sema+codegen | ~150 | 高 |
|
||||||
|
|
||||||
|
### P0 特性设计
|
||||||
|
|
||||||
|
**管道 `|>`** — 数据流从左到右:
|
||||||
|
```rust
|
||||||
|
let result = 10 |> double() |> add(5);
|
||||||
|
// 脱糖为: add(double(10), 5)
|
||||||
|
```
|
||||||
|
|
||||||
|
**guard** — 提前返回的语法糖:
|
||||||
|
```rust
|
||||||
|
guard x >= 0 else { return -1; }
|
||||||
|
// 脱糖为: if !(x >= 0) { return -1; }
|
||||||
|
```
|
||||||
|
|
||||||
|
**字符串插值**:
|
||||||
|
```rust
|
||||||
|
let msg = "Hello, {name}! Age: {age}";
|
||||||
|
// 脱糖为: "Hello, " + name + "! Age: " + age
|
||||||
|
```
|
||||||
|
|
||||||
|
**命名参数** — 调用点可选标注:
|
||||||
|
```rust
|
||||||
|
fn drawRect(width: i64, height: i64) { ... }
|
||||||
|
drawRect(width: 10, height: 20); // 命名
|
||||||
|
drawRect(10, 20); // 位置
|
||||||
|
```
|
||||||
|
|
||||||
## 构建命令
|
## 构建命令
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
|
|||||||
Reference in New Issue
Block a user