Skip to content

YaoXiang 参考文档 ​

本文档正在建设中...

YaoXiang 目前处于 实验验证阶段,标准库和 API 正在逐步完善。

语言规范 ​

当前状态 ​

模块状态描述
std.io🔨 施工中输入输出
std.string🔨 施工中字符串操作
std.list🔨 施工中列表操作
std.dict✅ 已实现字典操作
std.range✅ 已实现区间与迭代器(#302)
std.math🔨 施工中数学函数
std.net📋 计划中网络操作
std.concurrent📋 计划中并发原语

内置类型 ​

原始类型 ​

类型描述示例
Void空值/无返回值()
Bool布尔值true, false
Int整数42, -10
Float浮点数3.14, -0.5
Char字符'a', '中'
String字符串"hello"

复合类型 ​

类型描述示例
Tuple(T1, T2, ...)异类元素元组(1, "hello")
(Args) -> Ret函数类型(Int) -> Int

#299:容器类型(List(T) / Vec(T) / Array(T, N) / Dict(K, V)) 不是内置原语——它们是泛型类型构造器,与用户自定义泛型同一待遇, 经由统一的泛型实例化路径处理。字面量语法([...] / {...})保留在核心, 落点由上下文注解决定。Set 已除名(#300),详见 语言规范。

三个容器概念按长度信息归属区分:Array(T, N) 长度在类型中(定长)、 Vec(T) 长度是运行时值(原始缓冲原语)、List(T) 是标准库类型 ({ data: Vec(T), length: Int },策略全在库)。

用户定义类型 ​

yaoxiang
// 记录类型(结构体)
Point: Type = { x: Float, y: Float }

// 枚举类型
Result: (T: Type, E: Type) -> Type = { ok: (T) -> Result(T, E), err: (E) -> Result(T, E) }

// 接口类型(所有字段为函数)
Callable: Type = { call: (String) -> Void }

内置函数 ​

输出 ​

yaoxiang
print(value)           // 打印,无换行
println(value)         // 打印,有换行

转换 ​

yaoxiang
to_string(value)       // 转换为字符串
to_int(value)          // 转换为整数
to_float(value)        // 转换为浮点数

类型检查 ​

yaoxiang
typeof(value)         // 返回类型名称
is_type(value, type)  // 检查类型

关键字 ​

关键字描述
Type元类型
spawn标记并作函数
spawn for并行循环
spawn {}并作块
if / else if / else条件分支
match模式匹配
while / for循环
return返回值
ref创建引用
mut可变标记

语法速查 ​

变量声明 ​

yaoxiang
// 不可变变量(默认)
x: Int = 42
y = 42                 // 类型推断

// 可变变量
mut count: Int = 0
count = count + 1

函数定义 ​

yaoxiang
// 普通函数
add: (a: Int, b: Int) -> Int = a + b

// 并作函数(自动并发)
fetch: (url: String) -> JSON spawn = HTTP.get(url).json()

// 泛型函数
identity: [T](x: T) -> T = x

控制流 ​

yaoxiang
// 条件
if x > 0 {
    print("positive")
} else if x < 0 {
    print("negative")
} else {
    print("zero")
}

// 模式匹配
match result {
    ok(value) => print("success: " + value),
    err(error) => print("error: " + error),
}

// 循环
for i in 0..10 {
    print(i)
}

错误处理 ​

yaoxiang
// ? 运算符传播错误
data = fetch_file(path)?

运算符优先级 ​

优先级运算符
最高( ) 函数调用
. 字段访问
[ ] 索引
unary - 一元负号
* / % 乘除取模
(运算符的优先级与结合性是语言固定的;+ - * / % == != [] 的语义可由实现对应接口(RFC-011b)的类型重载)
+ - 加减
== != < > <= >= 比较
and or 逻辑运算
最低= 赋值

标准库使用示例 ​

yaoxiang
// 导入标准库
use std.io.{print, println}

// 列表操作
use std.list.{list_push, list_pop, list_len}

// 数学函数
use std.math.{sqrt, sin, cos, PI}

// 使用
println("Hello, YaoXiang!")
result = sqrt(16.0)  // 4.0

命令行工具 ​

bash
# 运行脚本
yx run hello.yx

# 构建字节码
yx build hello.yx -o hello.42

# 解释执行
yx eval 'println("Hello")'

# 查看帮助
yaoxiang --help

完整示例 ​

yaoxiang
use std.convert
use std.io

// 计算斐波那契数列
fib: (n: Int) -> Int = if n <= 1 {
    n
} else {
    fib(n - 1) + fib(n - 2)
}

// 主函数
main: () -> Void = {
    io.println("Fibonacci(10) = " + convert.to_string(fib(10)))
}

相关资源 ​

贡献指南 ​

标准库正在建设中,欢迎贡献!

  1. 选择一个模块(如 std.io, std.net)
  2. 在 src/std/ 中实现函数
  3. 添加文档注释
  4. 提交 PR