Skip to content

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-028JIT-компиляторЧерновик
RFC-029Система семантики модулейЧерновик
RFC-031Уровни оптимизацииЧерновик
RFC-033^^Оператор рефлексииЧерновик
RFC-034Инструменты отладкиЧерновик
RFC-035MCP ServerЧерновик
RFC-002Кроссплатформенный IO (libuv)Черновик
RFC-026byx-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-012f-stringПринято
RFC-013Спецификация кодов ошибокПринято
RFC-014Менеджер пакетовПринято
RFC-015Система конфигурацииПринято
RFC-017Поддержка LSPПринято
RFC-018LLVM AOT-компиляторПринято
RFC-024Модель конкурентностиПринято
RFC-026Основные механизмы FFIПринято
RFC-027Утверждения времени компиляцииПринято
RFC-030Механизм assert-утвержденийПринято

Отклонённые предложения

НомерНазваниеСтатус
RFC-003Планирование версийОтклонено
RFC-005CVE-сканированиеОтклонено
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)?
}

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

Исторический архив

Документы из истории проектирования перемещены в директорию docs/old/, включая:

  • Ранние архитектурные проекты
  • Устаревшие предложения
  • Устаревшие планы реализации