Skip to content

Дизайн-документ YaoXiang ​

Дао рождает единое, единое рождает двойственное, двойственное рождает тройственное, тройственное рождает все сущее.

Данный каталог содержит дизайн-решения, предложения и обсуждения языка программирования YaoXiang.

Основные дизайн-концепции ​

КонцепцияОписание
Всё есть типЗначения, функции, модули — всё это типы; типы — полноправные граждане первого класса
Естественный синтаксисЧитаемость как у Python, близость к естественному языку
Модель ownershipАбстракции с нулевой стоимостью, без GC, высокая производительность
Модель spawnСинхронный синтаксис, асинхронная сущность, автоматический параллелизм
AI-дружественностьСтрогая структурированность, чёткий AST

Структура дизайн-документов ​

design/
├── index.md              # Данный индекс
├── deprecated/           # Устарело (заменено новым дизайном)
│   └── *.md
├── rejected/             # Отклонено
│   └── *.md
├── rfc/
│   ├── draft/            # Черновики (работа в процессе)
│   ├── review/           # На рассмотрении (открытое обсуждение)
│   ├── accepted/         # Принято (дизайн одобрен)
│   ├── deprecated/       # Устарело (заменено)
│   └── rejected/         # Отклонено (не одобрено)
└── discussion/           # Зона дизайн-обсуждений (открытое обсуждение)
    └── *.md

Принятые дизайн-предложения ​

ДокументСтатусОписание
RFC-010 Унифицированный синтаксис типов✅ ПринятоУнификация синтаксиса определения типов
RFC-011 Система generics✅ ПринятоДизайн системы generics
RFC-009 Модель ownership✅ ПринятоДизайн системы ownership и заимствования
RFC-024 Модель concurrency✅ ПринятоСемантика spawn-примитивов
RFC-027 Compile-time утверждения✅ ПринятоCompile-time предикаты и статическая верификация

Смотрите каталог 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Унифицированное выражение spawnНа рассмотрении

Принятые предложения ​

НомерНазваниеСтатус
RFC-004Каррированное многопозиционное связываниеПринято
RFC-006Оптимизация сайта документацииПринято
RFC-007Унификация синтаксиса функцийПринято
RFC-008Модель runtime concurrencyПринято
RFC-009Модель ownershipПринято
RFC-009aАнализ времени жизни токеновПринято
RFC-010Унифицированный синтаксис типовПринято
RFC-011Система genericsПринято
RFC-012f-stringПринято
RFC-013Спецификация кодов ошибокПринято
RFC-014Менеджер пакетовПринято
RFC-015Система конфигурацииПринято
RFC-017Поддержка LSPПринято
RFC-018AOT-компилятор на LLVMПринято
RFC-024Модель concurrencyПринято
RFC-026Базовый механизм FFIПринято
RFC-027Compile-time утвержденияПринято
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 = {...}
  • Конструктор — это тип: устранение разрыва между «типом» и «значением»
  • Поддержка generics: мономорфизация на этапе компиляции, нулевые накладные расходы в runtime

2. Модель spawn ​

yaoxiang
// Модель spawn: по умолчанию последовательное выполнение, spawn вводит параллелизм потоков данных

// Последовательное выполнение по умолчанию
compute: (Int) -> Int = (n) => {
    a = heavy_calc(1)
    b = heavy_calc(2)  // Последовательно, ожидает завершения a
    c = heavy_calc(3)  // Последовательно, ожидает завершения b
    a + b + c
}

// spawn-блок вводит параллелизм потоков данных
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/, включая:

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