Skip to content

标准库规范

本文件定义 YaoXiang 编程语言的标准库规范,包括核心库、IO库和数学库。


第一章:核心库

1.1 基础类型

标准库提供以下基础类型的实现:

类型模块说明
Option(T)std.option可选值类型
Result(T, E)std.result错误处理类型
List(T)std.collection动态数组
Map(K, V)std.collection哈希映射
Stringstd.string字符串类型
Array(T, N)std.array固定大小数组

1.2 Option 类型

Option: (T: Type) -> Type = { some: (T) -> Option(T), none: () -> Option(T) }

变体构造

变体语法说明
Option.someOption.some(value)有值
Option.noneOption.none()无值

常用方法

yaoxiang
// 检查是否有值
is_some: (self: Option(T)) -> Bool
is_none: (self: Option(T)) -> Bool

// 获取值(可能 panic)
unwrap: (self: Option(T)) -> T

// 获取值或默认值
unwrap_or: (self: Option(T), default: T) -> T

// 映射值
map: (R: Type) -> ((self: Option(T), f: (T) -> R) -> Option(R))

1.3 Result 类型

Result: (T: Type, E: Type) -> Type = { ok: (T) -> Result(T, E), err: (E) -> Result(T, E) }

变体构造

变体语法说明
Result.okResult.ok(value)成功值
Result.errResult.err(error)错误值

常用方法

yaoxiang
// 检查是否成功
is_ok: (self: Result(T, E)) -> Bool
is_err: (self: Result(T, E)) -> Bool

// 获取值(可能 panic)
unwrap: (self: Result(T, E)) -> T

// 获取值或默认值
unwrap_or: (self: Result(T, E), default: T) -> T

// 映射成功值
map: (R: Type) -> ((self: Result(T, E), f: (T) -> R) -> Result(R, E))

// 映射错误值
map_err: (F: Type) -> ((self: Result(T, E), f: (E) -> F) -> Result(T, F))

1.4 错误传播

ErrorPropagate ::= Expr '?'

? 运算符自动传播 Result 类型的错误:

// 成功时返回值,失败时向上返回 err
data = fetch_data()?

// 等价于
data = match fetch_data() {
    ok(v) => v
    err(e) => return err(e)
}

1.5 断言(std.assert)

std.assert 模块提供统一的断言机制——运行时 assert 和编译期精化类型 Assert 是同一原语的两面。

yaoxiang
// IsTrue:值到类型的桥接函数
IsTrue: (b: Bool) -> Type = match b {
    true => Void,      // ⊤,程序继续
    false => Never,    // ⊥,发散
}

// Assert:编译期精化类型原语
Assert: (cond: Bool) -> Type = IsTrue(cond)

// assert:运行时断言(Assert 的值引入子)
assert: (cond: Bool, ?msg: String | Error) -> Assert(IsTrue(cond))

// Result 重载
assert: (result: Result) -> Assert(IsTrue(is_ok(result)))

dispatch 分派

条件行为
cond 的所有自由变量编译期已知编译器求值,true → 擦除,false → 编译错误
存在运行时自由变量插入运行时 check,注入流敏感假设集 Γ

assert(false, "msg") 等价于 raise——不需要单独的 throw/raise 关键字。


第二章:IO 库

2.1 标准输入输出

yaoxiang
// 标准输出
print: (msg: String) -> Void
println: (msg: String) -> Void

// 标准输入
read_line: () -> String
read_char: () -> Char

2.2 文件操作

yaoxiang
// 文件类型
File: Type = {
    path: String,
    read: (self: File) -> Result(String, Error),
    write: (self: File, content: String) -> Result(Void, Error),
    append: (self: File, content: String) -> Result(Void, Error),
    close: (self: File) -> Void
}

// 文件操作
open: (path: String) -> Result(File, Error)
create: (path: String) -> Result(File, Error)
delete: (path: String) -> Result(Void, Error)

2.3 目录操作

yaoxiang
// 目录类型
Dir: Type = {
    path: String,
    entries: (self: Dir) -> Result(List(String), Error),
    create: (self: Dir) -> Result(Void, Error),
    delete: (self: Dir) -> Result(Void, Error)
}

// 目录操作
read_dir: (path: String) -> Result(Dir, Error)
create_dir: (path: String) -> Result(Void, Error)
delete_dir: (path: String) -> Result(Void, Error)

第三章:数学库

3.1 基础数学函数

yaoxiang
// 绝对值
abs: (x: Int) -> Int
abs: (x: Float) -> Float

// 最大最小值
max: (a: Int, b: Int) -> Int
min: (a: Int, b: Int) -> Int
max: (a: Float, b: Float) -> Float
min: (a: Float, b: Float) -> Float

// 幂运算
pow: (base: Float, exp: Float) -> Float
sqrt: (x: Float) -> Float

// 对数
log: (x: Float) -> Float
log2: (x: Float) -> Float
log10: (x: Float) -> Float

3.2 三角函数

yaoxiang
// 三角函数
sin: (x: Float) -> Float
cos: (x: Float) -> Float
tan: (x: Float) -> Float

// 反三角函数
asin: (x: Float) -> Float
acos: (x: Float) -> Float
atan: (x: Float) -> Float
atan2: (y: Float, x: Float) -> Float

3.3 常量

yaoxiang
// 数学常量
pi: Float = 3.141592653589793
e: Float = 2.718281828459045

第四章:字符串库

4.1 字符串操作

yaoxiang
// 字符串长度
length: (s: String) -> Int

// 字符串拼接
concat: (a: String, b: String) -> String

// 字符串分割
split: (s: String, delimiter: String) -> List(String)

// 字符串查找
find: (s: String, pattern: String) -> Option(Int)
contains: (s: String, pattern: String) -> Bool

// 字符串替换
replace: (s: String, old: String, new: String) -> String

// 字符串修剪
trim: (s: String) -> String
trim_left: (s: String) -> String
trim_right: (s: String) -> String

4.2 字符串转换

yaoxiang
// 类型转换
to_string: (x: Int) -> String
to_string: (x: Float) -> String
to_string: (x: Bool) -> String

// 解析
parse_int: (s: String) -> Result(Int, Error)
parse_float: (s: String) -> Result(Float, Error)

第五章:集合库

5.1 List 类型

yaoxiang
// List 类型
List: (T: Type) -> Type = {
    data: Array(T),
    length: Int,
    push: (T: Type) -> ((self: List(T), item: T) -> Void),
    pop: (T: Type) -> ((self: List(T)) -> Option(T)),
    get: (T: Type) -> ((self: List(T), index: Int) -> Option(T)),
    set: (T: Type) -> ((self: List(T), index: Int, value: T) -> Void),
    insert: (T: Type) -> ((self: List(T), index: Int, item: T) -> Void),
    remove: (T: Type) -> ((self: List(T), index: Int) -> Option(T)),
    clear: (T: Type) -> ((self: List(T)) -> Void),
    contains: (T: Type) -> ((self: List(T), item: T) -> Bool),
    sort: (T: Type) -> ((self: List(T)) -> List(T)),
    reverse: (T: Type) -> ((self: List(T)) -> List(T)),
    map: (T: Type, R: Type) -> ((self: List(T), f: (T) -> R) -> List(R)),
    filter: (T: Type) -> ((self: List(T), predicate: (T) -> Bool) -> List(T)),
    reduce: (T: Type, R: Type) -> ((self: List(T), initial: R, f: (R, T) -> R) -> R)
}

5.2 Map 类型

yaoxiang
// Map 类型
Map: (K: Type, V: Type) -> Type = {
    data: Array((K, V)),
    length: Int,
    insert: (K: Type, V: Type) -> ((self: Map(K, V), key: K, value: V) -> Void),
    get: (K: Type, V: Type) -> ((self: Map(K, V), key: K) -> Option(V)),
    remove: (K: Type, V: Type) -> ((self: Map(K, V), key: K) -> Option(V)),
    contains_key: (K: Type, V: Type) -> ((self: Map(K, V), key: K) -> Bool),
    keys: (K: Type, V: Type) -> ((self: Map(K, V)) -> List(K)),
    values: (K: Type, V: Type) -> ((self: Map(K, V)) -> List(V)),
    clear: (K: Type, V: Type) -> ((self: Map(K, V)) -> Void)
}

第六章:迭代器库

6.1 Iterator trait

yaoxiang
// Iterator trait
Iterator: (T: Type) -> Type = {
    Item: T,
    next: () -> Option(T),
    has_next: () -> Bool,
    map: (R: Type) -> ((f: (T) -> R) -> Iterator(R)),
    filter: (predicate: (T) -> Bool) -> Iterator(T),
    collect: () -> List(T),
    reduce: (R: Type) -> ((initial: R, f: (R, T) -> R) -> R),
    for_each: (f: (T) -> Void) -> Void
}

6.2 迭代器适配器

yaoxiang
// 范围迭代器
Range: Type = {
    start: Int,
    end: Int,
    step: Int,
    Iterator(Int)
}

// 使用
for i in 0..10 {
    print(i)
}

for i in 0..10 step 2 {
    print(i)
}

附录:标准库模块索引

模块说明
std.assert断言机制——运行时 assert + 编译期 Assert 精化类型
std.optionOption 类型
std.resultResult 类型
std.collectionList、Map 等集合类型
std.string字符串操作
std.array数组操作
std.iterator迭代器

A.2 IO 模块

模块说明
std.io标准输入输出
std.file文件操作
std.dir目录操作

A.3 数学模块

模块说明
std.math数学函数
std.math.trig三角函数
std.math.log对数函数

A.4 工具模块

模块说明
std.random随机数生成
std.time时间日期
std.assert编译期 Assert(C) 与运行时 assert(x > 0) 统一(RFC-030)
std.regex正则表达式