YaoXiang справочная документация
Этот документ находится в разработке...
В настоящее время YaoXiang находится на этапе экспериментальной проверки, стандартная библиотека и API постепенно дорабатываются.
Языковая спецификация
- Обзор языковой спецификации
- Спецификация синтаксиса - лексическая структура, синтаксические правила, приоритет операторов
- Система типов - базовые типы, составные типы, дженерики, trait
- Система модулей - определение модулей, импорт/экспорт, область видимости
- Модель конкурентности - асинхронное программирование, примитивы конкурентности, модель памяти
- Стандартная библиотека - ядро, библиотека ввода-вывода, математическая библиотека
Текущее состояние
| Модуль | Состояние | Описание |
|---|---|---|
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 }, вся стратегия — в библиотеке).
Пользовательские типы
// 记录类型(结构体)
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 }Встроенные функции
Вывод
print(value) // 打印,无换行
println(value) // 打印,有换行Преобразование
to_string(value) // 转换为字符串
to_int(value) // 转换为整数
to_float(value) // 转换为浮点数Проверка типов
typeof(value) // 返回类型名称
is_type(value, type) // 检查类型Ключевые слова
| Ключевое слово | Описание |
|---|---|
Type | Мета-тип |
spawn | Помечает spawn-функцию |
spawn for | Параллельный цикл |
spawn {} | spawn-блок |
if / else if / else | Ветвление условия |
match | Сопоставление с образцом |
while / for | Циклы |
return | Возврат значения |
ref | Создание ссылки |
mut | Метка изменяемости |
Краткий справочник по синтаксису
Объявление переменных
// 不可变变量(默认)
x: Int = 42
y = 42 // 类型推断
// 可变变量
mut count: Int = 0
count = count + 1Определение функций
// 普通函数
add: (a: Int, b: Int) -> Int = a + b
// 并作函数(自动并发)
fetch: (url: String) -> JSON spawn = HTTP.get(url).json()
// 泛型函数
identity: [T](x: T) -> T = xУправление потоком
// 条件
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)
}Обработка ошибок
// ? 运算符传播错误
data = fetch_file(path)?Приоритет операторов
| Приоритет | Оператор |
|---|---|
| Наивысший | ( ) вызов функции |
. доступ к полю | |
[ ] индексация | |
unary - унарный минус | |
* / % умножение, деление, остаток от деления | |
(Приоритет и ассоциативность операторов зафиксированы в языке; семантика + - * / % == != [] может быть перегружена типами, реализующими соответствующий интерфейс (RFC-011b)) | |
+ - сложение и вычитание | |
== != < > <= >= сравнение | |
and or логические операции | |
| Наименьший | = присваивание |
Примеры использования стандартной библиотеки
// 导入标准库
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Инструменты командной строки
# 运行脚本
yx run hello.yx
# 构建字节码
yx build hello.yx -o hello.42
# 解释执行
yx eval 'println("Hello")'
# 查看帮助
yaoxiang --helpПолный пример
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)))
}Связанные ресурсы
- Учебник - изучение YaoXiang
- Проектная документация - решения по дизайну языка
- GitHub
Руководство по участию
Стандартная библиотека находится в разработке, приветствуется участие!
- Выберите модуль (например,
std.io,std.net) - Реализуйте функции в
src/std/ - Добавьте комментарии документации
- Отправьте PR
