Skip to content

Документация YaoXiang

Этот документ находится в разработке...

YaoXiang в настоящее время находится в этапе экспериментальной проверки, стандартная библиотека и API постепенно совершенствуются.

Спецификация языка

Текущее состояние

МодульСостояниеОписание
std.io🔨 В работеВвод-вывод
std.string🔨 В работеСтроковые операции
std.list🔨 В работеОперации со списками
std.dict📋 ЗапланированоОперации со словарями
std.math🔨 В работеМатематические функции
std.net📋 ЗапланированоСетевые операции
std.concurrent📋 ЗапланированоПримитивы параллелизма

Встроенные типы

Примитивные типы

ТипОписаниеПример
VoidПустое значение/нет возвращаемого значения()
BoolЛогическое значениеtrue, false
IntЦелое число42, -10
FloatЧисло с плавающей точкой3.14, -0.5
CharСимвол'a', '中'
StringСтрока"hello"

Составные типы

ТипОписаниеПример
List(T)Список однотипных элементов[1, 2, 3]
Tuple(T1, T2, ...)Кортеж разнотипных элементов(1, "hello")
Dict(K, V)Отображение ключ-значение{"a": 1}
(Args) -> RetТип функции(Int) -> Int

Пользовательские типы

yaoxiang
// Тип записи (структура)
Point: Type = { x: Float, y: Float }

// Перечисление (enum)
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 - Унарный минус
* / % Умножение/деление/остаток
+ - Сложение/вычитание
== != < > <= >= Сравнение
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
# Запуск скрипта
yaoxiang run hello.yx

# Компиляция в байткод
yaoxiang build hello.yx -o hello.42

# Интерпретируемое выполнение
yaoxiang eval 'println("Hello")'

# Просмотр справки
yaoxiang --help

Полный пример

yaoxiang
// Вычисление чисел Фибоначчи
fib: (n: Int) -> Int = if n <= 1 {
    n
} else {
    fib(n - 1) + fib(n - 2)
}

// Главная функция
main: () -> Void = {
    print("Fibonacci(10) = " + fib(10).to_string())
}

Связанные ресурсы

Руководство по участию

Стандартная библиотека в разработке, приглашаем к сотрудничеству!

  1. Выберите модуль (например std.io, std.net)
  2. Реализуйте функции в src/std/
  3. Добавьте документационные комментарии
  4. Отправьте PR