YaoXiang 设计文档
道生一,一生二,二生三,三生万物。
本目录包含 YaoXiang 编程语言的设计决策、提案和讨论。
核心设计理念
| 理念 | 描述 |
|---|---|
| Всё является типом | Значения, функции, модули — всё типы; типы — объекты первого класса |
| Естественный синтаксис | Читаемость как у Python, близость к естественному языку |
| Модель владения | Нулевая стоимость абстракции, без GC, высокая производительность |
| Модель спавна | Синхронный синтаксис, асинхронная суть, автоматический параллелизм |
| Дружественность к AI | Строгая структурированность, чёткий AST |
Структура документации по дизайну
design/
├── index.md # Данный индекс
├── deprecated/ # Устаревшие (заменены новым дизайном)
│ └── *.md
├── rejected/ # Отклонённые
│ └── *.md
├── rfc/
│ ├── draft/ # Черновики (в работе)
│ ├── review/ # На рассмотрении (открыто для обсуждения)
│ ├── accepted/ # Принятые (дизайн одобрен)
│ ├── deprecated/ # Устаревшие (заменены)
│ └── rejected/ | Отклонённые (не одобрены)
└── discussion/ # Обсуждение дизайна (открыто для обсуждения)
└── *.mdПринятые проектные предложения
| Документ | Статус | Описание |
|---|---|---|
| RFC-010 Унифицированный синтаксис типов | ✅ Принято | Унификация синтаксиса типов |
| RFC-011 Обобщённая система типов | ✅ Принято | Дизайн обобщённой системы типов |
| RFC-009 Модель владения | ✅ Принято | Дизайн владения и заимствования |
| RFC-024 Модель конкурентности | ✅ Принято | Семантика спавна конкурентных примитивов |
| RFC-027 Вычисления на этапе компиляции | ✅ Принято | Предикаты компиляции и статическая проверка |
Смотрите директорию
rfc/accepted/для полного списка (всего 16) иrfc/index.mdдля актуального статуса.
RFC-предложения
RFC (Request for Comments) — это процесс подачи предложений по новым функциям и значительным изменениям.
Активные предложения
| Номер | Название | Статус |
|---|---|---|
| RFC-019 | Типизированный гомоиконизм | Черновик |
| RFC-028 | JIT-компилятор | Черновик |
| RFC-029 | Система семантики модулей | Черновик |
| RFC-031 | Уровни оптимизации | Черновик |
| RFC-033 | ^^Оператор рефлексии | Черновик |
| RFC-034 | Инструменты отладки | Черновик |
| RFC-035 | MCP Server | Черновик |
| RFC-002 | Кроссплатформенный IO (libuv) | Черновик |
| RFC-026b | yx-bindgen | Черновик |
| RFC-011a | Реализация интерфейсов и динамическая диспетчеризация | На рассмотрении |
| RFC-014a | Протокол Registry | На рассмотрении |
| RFC-014b | Система сборки | На рассмотрении |
| RFC-014c | Рабочие пространства | На рассмотрении |
| RFC-026a | Расширяемый FFI | На рассмотрении |
| RFC-032 | Унифицированное выражение спавна | На рассмотрении |
Принятые предложения
| Номер | Название | Статус |
|---|---|---|
| RFC-004 | Каррирование многопозиционных привязок | Принято |
| RFC-006 | Оптимизация документационного сайта | Принято |
| RFC-007 | Унификация синтаксиса функций | Принято |
| RFC-008 | Модель конкурентности времени выполнения | Принято |
| RFC-009 | Модель владения | Принято |
| RFC-009a | Анализ времени жизни токенов | Принято |
| RFC-010 | Унифицированный синтаксис типов | Принято |
| RFC-011 | Обобщённая система | Принято |
| RFC-012 | f-string | Принято |
| RFC-013 | Спецификация кодов ошибок | Принято |
| RFC-014 | Менеджер пакетов | Принято |
| RFC-015 | Система конфигурации | Принято |
| RFC-017 | Поддержка LSP | Принято |
| RFC-018 | LLVM AOT-компилятор | Принято |
| RFC-024 | Модель конкурентности | Принято |
| RFC-026 | Основные механизмы FFI | Принято |
| RFC-027 | Утверждения времени компиляции | Принято |
| RFC-030 | Механизм assert-утверждений | Принято |
Отклонённые предложения
| Номер | Название | Статус |
|---|---|---|
| RFC-003 | Планирование версий | Отклонено |
| RFC-005 | CVE-сканирование | Отклонено |
| RFC-016 | Поддержка квантового натива | Отклонено |
| RFC-025 | Расширение примитивных типов | Отклонено |
Шаблон RFC
Перед подачей нового предложения обратитесь к:
Участие в обсуждении дизайна
Жизненный цикл RFC
У RFC-предложения 5 статусов:
| Статус | Значение |
|---|---|
| Черновик | Работа в процессе |
| На рассмотрении | Открыто для обсуждения |
| Принято | Дизайн одобрен |
| Устарело | Было принято, заменено новым дизайном |
| Отклонено | Не одобрено |
Полный жизненный цикл:
Черновик → На рассмотрении → Принято → Устарело (заменено)
↓
Отклонено (не одобрено)Процесс подачи предложений
1. Составление черновика (по шаблону RFC)
→ Помещается в rfc/draft/
2. Подача на рассмотрение
→ Перемещается в rfc/review/, открыто обсуждение сообщества
3. Рассмотрение основной командой
→ Принятие → Перемещается в rfc/accepted/
→ Отклонение → Перемещается в rfc/rejected/
4. Последующее сопровождение
→ Замена → Перемещается в rfc/deprecated/Принципы проектирования
- Чёткие границы: Каждое проектное решение должно иметь чёткую область применения
- Практичность прежде всего: Решайте реальные проблемы, а не воображаемые угрозы
- Обратная совместимость поведения для пользователей: Never break userspace
Примеры кода
yaoxiang
// Определение типа
Point: Type = { x: Float, y: Float }
Result: (T: Type, E: Type) -> Type = { ok: (T) -> Result(T, E), err: (E) -> Result(T, E) }
// Определение функции
add: (a: Int, b: Int) -> Int = a + b
// Главная функция
main: () -> Void = {
print("Hello, YaoXiang!")
}Ключевые проектные решения
1. Система типов
- Унифицированный синтаксис типов: Убраны
enum,struct,union, унифицировано черезName: Type = {...} - Конструкторы являются типами: Устранён разрыв между «типами» и «значениями»
- Поддержка обобщений: Мономорфизация на этапе компиляции, нулевые накладные расходы во время выполнения
2. Модель спавна
yaoxiang
// Модель спавна: последовательное выполнение по умолчанию, спавн вводит потоковый параллелизм данных
// Последовательное выполнение по умолчанию
compute: (Int) -> Int = (n) => {
a = heavy_calc(1)
b = heavy_calc(2) // Последовательно, ожидание a
c = heavy_calc(3) // Последовательно, ожидание b
a + b + c
}
// Спавн-блок вводит потоковый параллелизм данных
process: () -> Void = () => {
spawn {
users = fetch_users() // Параллельно
posts = fetch_posts() // Параллельно
}
// Синхронная блокировка вызывающего до получения результатов
render(users, posts)
}3. Обработка ошибок
yaoxiang
Result: (T: Type, E: Type) -> Type = { ok: (T) -> Result(T, E), err: (E) -> Result(T, E) }
process: () -> Result(Data, Error) = {
data = fetch_data()? // Оператор ? прозрачно распространяет
transformed = transform(data)?
save(transformed)?
}Связанные ресурсы
- Учебник — Изучение YaoXiang
- Справочная документация — API и стандартная библиотека
- Спецификация языка — Полная спецификация языка
- GitHub Discussions
- Руководство по вкладу
Исторический архив
Документы из истории проектирования перемещены в директорию docs/old/, включая:
- Ранние архитектурные проекты
- Устаревшие предложения
- Устаревшие планы реализации
