Документация YaoXiang
Этот документ находится в разработке...
YaoXiang в настоящее время находится в этапе экспериментальной проверки, стандартная библиотека и API постепенно совершенствуются.
Спецификация языка
- Обзор спецификации языка
- Синтаксическая спецификация - Лексическая структура, синтаксические правила, приоритет операторов
- Типовая система - Базовые типы, составные типы, generics, trait
- Модульная система - Определение модулей, импорт/экспорт, область видимости
- Модель параллелизма - Асинхронное программирование, примитивы параллелизма, модель памяти
- Стандартная библиотека - Базовая библиотека, библиотека ввода/вывода, математическая библиотека
Текущее состояние
| Модуль | Состояние | Описание |
|---|---|---|
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())
}Связанные ресурсы
- Учебник - Изучение YaoXiang
- Документы проектирования - Проектные решения языка
- GitHub
Руководство по участию
Стандартная библиотека в разработке, приглашаем к сотрудничеству!
- Выберите модуль (например
std.io,std.net) - Реализуйте функции в
src/std/ - Добавьте документационные комментарии
- Отправьте PR
