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)) не являются встроенными примитивами — это конструкторы обобщённых (generic) типов, которые рассматриваются так же, как пользовательские дженерики, и обрабатываются через единый механизм инстанцирования дженериков. Синтаксис литералов ([...] / {...}) остаётся в ядре, конкретный тип определяется контекстной аннотацией. 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-функцию
spawn forПараллельный цикл
spawn {}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