docs: README/CHANGELOG/语言参考更新至 v0.6
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# L Language 语言参考手册
|
||||
|
||||
> 版本 v0.5 | 158 测试全部通过 | LLVM 后端编译型语言
|
||||
> 版本 v0.6 | 158 单元 + 29 集成测试全部通过 | LLVM 后端编译型语言
|
||||
|
||||
---
|
||||
|
||||
@@ -54,9 +54,12 @@ l_lang.exe hello.l -o hello.exe
|
||||
|
||||
| 类型 | 关键字 | 范围/说明 | 示例 |
|
||||
|------|--------|----------|------|
|
||||
| 整数 | `i64` | 64位有符号,`-2^63 ~ 2^63-1` | `42`, `-7`, `0` |
|
||||
| 32位整数 | `i32` | 32位有符号,`-2^31 ~ 2^31-1` | `100` |
|
||||
| 64位整数 | `i64` | 64位有符号,`-2^63 ~ 2^63-1` | `42`, `-7`, `0` |
|
||||
| 无符号整数 | `u64` | 64位无符号,`0 ~ 2^64-1` | `999` |
|
||||
| 浮点 | `f64` | 64位双精度 | `3.14`, `-0.5`, `1.0` |
|
||||
| 布尔 | `bool` | `true` 或 `false` | `true`, `false` |
|
||||
| 字符 | `char` | 单字符,ASCII | `'A'`, `'\n'` |
|
||||
| 字符串 | `str` | UTF-8 文本 | `"Hello"`, `"你好"` |
|
||||
| 空类型 | `void` | 无返回值 | 用于函数返回类型 |
|
||||
|
||||
@@ -242,6 +245,67 @@ let result = add(3, 5);
|
||||
greet();
|
||||
```
|
||||
|
||||
### 命名参数
|
||||
|
||||
调用函数时可以标注参数名,命名参数可任意顺序,但必须放在位置参数之后:
|
||||
|
||||
```rust
|
||||
fn draw_rect(x: i64, y: i64, w: i64, h: i64) -> void {
|
||||
// ...
|
||||
}
|
||||
|
||||
draw_rect(0, 0, 100, 200); // 全位置
|
||||
draw_rect(x: 1, y: 2, w: 10, h: 20); // 全命名
|
||||
draw_rect(0, 0, w: 10, h: 20); // 混用
|
||||
draw_rect(w: 10, h: 20, x: 1, y: 2); // 命名任意顺序
|
||||
```
|
||||
|
||||
用 `:` 分隔参数名和值(与类型标注 `name: Type` 视觉统一)。
|
||||
|
||||
### guard 语句
|
||||
|
||||
guard 是提前返回的语法糖,用于提前处理异常条件:
|
||||
|
||||
```rust
|
||||
fn abs(x: i64) -> i64 {
|
||||
guard x >= 0 else { return -x; }
|
||||
return x;
|
||||
}
|
||||
// guard x >= 0 else { ... } 去糖为:
|
||||
// if !(x >= 0) { ... }
|
||||
```
|
||||
|
||||
- `else` 块必须用花括号,通常包含 `return`/`continue` 等跳转
|
||||
- guard 让正常路径的代码保持在左侧,提高可读性
|
||||
|
||||
### 管道 `|>`
|
||||
|
||||
管道将数据从左到右流经函数,LHS 作为 RHS 函数调用的第一个参数(F#/Elixir 风格):
|
||||
|
||||
```rust
|
||||
fn double(x: i64) -> i64 { return x * 2; }
|
||||
fn add(a: i64, b: i64) -> i64 { return a + b; }
|
||||
|
||||
let result = 10 |> double() |> add(5);
|
||||
// 去糖为: add(double(10), 5) → 25
|
||||
```
|
||||
|
||||
- 管道右侧必须是函数调用(带括号)
|
||||
- 管道优先级低于所有算术运算符
|
||||
|
||||
### 字符串插值
|
||||
|
||||
用 `\(expr)` 在字符串中嵌入表达式(Swift 风格,`\` 与 C 转义字符视觉一致):
|
||||
|
||||
```rust
|
||||
let name = "World";
|
||||
let msg = "Hello, \(name)!";
|
||||
print_str(msg); // Hello, World!
|
||||
```
|
||||
|
||||
- 去糖为字符串拼接: `"Hello, " + name + "!"`
|
||||
- 字面量 `\(` 写作 `\\(`,反斜杠写作 `\\`
|
||||
|
||||
---
|
||||
|
||||
## 7. 结构体
|
||||
@@ -563,15 +627,17 @@ l_lang.exe source.l --emit-ir
|
||||
## 快速参考卡片
|
||||
|
||||
```
|
||||
类型: i64 f64 bool str void struct enum T[N]
|
||||
类型: i32 i64 u64 f64 bool char str void struct enum T[N]
|
||||
声明: let x = val var x = val
|
||||
let x: Type = val type Alias = Type
|
||||
控制流: if/else while for i in 0 to N match
|
||||
控制流: if/else while for i in 0 to N match guard
|
||||
函数: fn name(p: T) -> Ret { return expr; }
|
||||
func(name: val) 命名参数 expr |> func() 管道
|
||||
结构体: struct Name { f: Type } Name { f: val }
|
||||
枚举: enum Name { A, B, C } Name::B
|
||||
方法: extend T { fn m(self: T) } obj.m()
|
||||
内建: print_i64 print_f64 print_bool print_str
|
||||
运算符: + - * / % == != < > <= >= && || ! += -= *= /=
|
||||
运算符: + - * / % == != < > <= >= && || ! += -= *= /= |>
|
||||
插值: "Hello, \(name)!"
|
||||
注释: // 行注释 /* 块注释 */
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user