Skip to content

RFC-003: Версионное планирование ​

Дата отклонения: 2026-06-01

⚠️ Причина отклонения ​

Данный RFC не соответствует спецификациям RFC и был отклонён.

Анализ проблем ​

ПроблемаОписание
Неверный тип документаRFC — это документ о решениях вида «почему именно так», а данный текст — документ управления проектом вида «где мы сейчас и куда идём»
Отсутствие проектных решенийНет анализа компромиссов при техническом выборе, нет сравнения альтернатив, нет обоснования дизайна
Избыточное планированиеЗапланировано 9 версий (v0.1–v1.0), но завершено лишь 1,5; всё после v0.3 — предположения
Высокая стоимость сопровожденияТаблица показателей успеха содержит 50 состояний, её сложно поддерживать
Путаница с номерами версийВерсия v0.8 пропущена без объяснения

Корректный тип документа ​

Данный документ следует вести как дорожную карту проекта (Roadmap), а не как RFC. Дорожная карта фиксирует факты и краткосрочные планы, а RFC — проектные решения.


Ниже приведено исходное содержание, сохранённое для справки.

Аннотация ​

План выпуска версий YaoXiang, дорожная карта от v0.1 до v1.0.

Основные цели:

  1. Байткод-компиляция: поддержка REPL и инкрементальной компиляции
  2. Самозагрузка (Bootstrap): написание компилятора YaoXiang на самом YaoXiang
  3. AOT-компиляция: компиляция байткода в нативный машинный код

1. Мотивация ​

Зачем нужно версионное планирование? ​

  1. Управление проектом: разбиение целей на выполнимые этапы
  2. Ожидания пользователей: информирование пользователей о стадии развития языка
  3. Распределение ресурсов: определение приоритетов на каждом этапе
  4. Контроль рисков: своевременное обнаружение проблем и корректировка курса

Основные проектные решения ​

  • Приоритет байткода: сначала интерпретация, затем AOT
  • Инкрементальная поставка: каждая версия содержит пригодный к использованию функционал
  • Обратная совместимость: до v1.0 API может меняться, но об этом будет объявлено заранее
  • Проверка самозагрузкой: выразительность языка подтверждается через самозагрузку
  • Многоуровневая производительность: сначала заставить работать, затем оптимизировать

2. Состояние компонентов (Phase) ​

PhaseМодульСостояниеРасположениеПоследнее обновление
P1Лексический анализатор✅ Завершёнsrc/frontend/lexer/2025-01-23
P2Проверщик типов✅ Завершёнsrc/frontend/typecheck/2025-01-23
P3Генератор байткода✅ Завершёнsrc/middle/codegen/2025-01-25
P4Виртуальная машина✅ Завершёнsrc/middle/2025-01-25
P4.1Система задач✅ Завершёнsrc/backends/runtime/task.rs2025-01-23
P4.2DAG-планировщик🔶 Дизайн готов.claude/plan/flow-scheduler-implementation.md2026-01-04
P5Стандартная библиотека⚠️ Частичноsrc/std/2025-01-23
P6TUI REPL✅ Завершёнsrc/backends/dev/repl/2025-01-24
P7Система обобщений (generics)✅ Завершёнdocs/design/rfc/011-generic-type-system.md2025-01-25

Основные достижения:

  • ✅ Полностью реализован фронтенд компилятора (P1–P2)
  • ✅ Генерация байткода и виртуальная машина завершены (P3–P4)
  • ✅ Базовая система задач завершена (P4.1)
  • ✅ TUI REPL завершён в разработке (P6)
  • ✅ Дизайн системы обобщений завершён (P7)

Следующие приоритеты: реализация планировщика FlowScheduler → доработка стандартной библиотеки (P5) → выпуск v0.1

3. Дорожная карта версий ​

v0.1: Запускаемый этап ✅ ​

Состояние: в основном завершено (2025-01-25)

Выполнено:

  • ✅ Лексический, синтаксический анализ и проверка типов — полностью
  • ✅ Генерация байткода пригодна к использованию
  • ✅ Виртуальная машина может интерпретировать базовые программы
  • ✅ Базовая функция print
  • ✅ TUI REPL завершён
  • ✅ Базовая система задач (Task/Scheduler)
$ yaoxiang run hello.yx
Hello, YaoXiang!

Технические особенности:

  • Завершена разработка трёхуровневой архитектуры среды исполнения
  • Полная реализация системы задач
  • Современный интерфейс TUI REPL
  • Единый синтаксис типов + дизайн системы обобщений

Не включено: полный DAG-планировщик (базовый планировщик уже реализован)

v0.2: Планировщик FlowScheduler 🚧 ​

Цель: реализовать полноценный планировщик с учётом зависимостей

  • ✅ Проектная документация завершена
  • 🔶 Реализация в процессе
  • [ ] Узлы и граф DAG
  • [ ] Алгоритм work-stealing
  • [ ] Механизм IO-планирования на libuv
  • [ ] Стратегия ленивых вычислений
  • [ ] Поддержка синтаксиса spawn

Технические акценты:

  • Реализация архитектуры FlowScheduler
  • IO-планирование промышленного уровня (libuv)
  • Абстракции с нулевой стоимостью

v0.3: Предварительный обзор конкурентности 📋 ​

Цель: поддержка базовой конкурентности

  • DAG-граф зависимостей задач
  • Базовый планировщик
  • spawn-параллелизм

v0.4: Система обобщений 📋 ​

Цель: полные возможности обобщений

  • [ ] RFC-011 Фаза 1: базовые обобщения
  • [ ] RFC-011 Фаза 2: ограничения типов
  • [ ] RFC-011 Фаза 3: ассоциированные типы
  • [ ] RFC-011 Фаза 4: Const-обобщения
  • [ ] RFC-011 Фаза 5: условные типы

Технические акценты:

  • Устранение мёртвого кода
  • Абстракции с нулевой стоимостью
  • Перегрузка функций + оптимизации встраивания

v0.5: Доработка стандартной библиотеки 📋 ​

Цель: повышение удобства использования

  • Модули IO, словарей, сети
  • Цепочка инструментов (fmt, базовый LSP)
  • Оптимизация производительности

v0.6: Система обработки ошибок 📋 ​

Цель: полная обработка ошибок

  • [ ] Реализация RFC-001
  • [ ] Система типов Result
  • [ ] Визуализация графа ошибок
  • [ ] Распространение ошибок через DAG

v0.7: Стабильная версия 📋 ​

Цель: стабилизация API

  • Полная документация
  • Доработка цепочки инструментов
  • Исправление граничных случаев

v0.9: Начало самозагрузки 📋 ​

Цель: переписать ключевые модули на YaoXiang

  • Постепенная замена: Lexer → Parser → TypeChecker → Codegen
  • Перекрёстная проверка: результаты двух компиляторов совпадают

v1.0: Готовность к продакшну 📋 ​

Цель: стабильный релиз

  • Полная самозагрузка
  • AOT-компиляция (бэкенд на LLVM)
  • Готовность к продакшну

4. Трёхуровневая архитектура стратегии компиляции ​

УровеньВерсияВходВыходОписание
L1: Байткодv0.1+Исходный код (.yx)Байткод (.yxb)Интерпретация в VM
L2: Самозагрузкаv0.9+Исходный код на YaoXiangБайткодКомпиляция самой себя
L3: AOTv1.0+Исходный код / байткодМашинный кодНативная производительность

Причины приоритета байткода:

  1. Поддержка REPL: мгновенная компиляция вводимого кода для интерактивной разработки
  2. Инкрементальная компиляция: при изменении одной функции перекомпилируется только она
  3. Платформонезависимость: файлы .yxb запускаются на любой платформе, нужен лишь VM под эту платформу

5. Стратегия зависимостей ​

Краткосрочно: вызов библиотек Rust с crates.io (паразитирование на Cargo)

Текущие зависимости:

  • Конкурентность: parking_lot, crossbeam, rayon
  • Структуры данных: indexmap, hashbrown, smallvec
  • Сеть: tokio
  • Сериализация: serde, ron

Долгосрочно: собственная стандартная библиотека и пакетный менеджер

6. Цепочка инструментов ​

ВерсияИнструментСостояние
v0.1yaoxiang-cli✅ Готов
v0.1TUI REPL✅ Готов
v0.2yaoxiang-debug🚧 Проектируется
v0.3yaoxiang-fmt📋 Планируется
v0.3yaoxiang-lsp (базовый)📋 Планируется
v0.5yaoxiang-clippy📋 Планируется
v1.0Полная цепочка инструментов📋 Планируется

7. Показатели успеха ​

Показательv0.1v0.2v0.3v0.5v1.0
Сквозной запуск✅✅✅✅✅
Базовая система задач✅✅✅✅✅
FlowScheduler❌🚧✅✅✅
Поддержка конкурентности⚠️🚧✅ Базовая✅ Полная✅
Стандартная библиотекаБазоваяБазоваяБазоваяПолнаяПолная
Система обобщений⚠️⚠️🚧✅✅
TUI REPL✅✅✅✅✅
Самозагрузка❌❌❌❌✅
AOT❌❌❌❌✅
Покрытие кода60%70%80%90%95%

Условные обозначения:

  • ✅ Завершено
  • 🚧 В процессе
  • ⚠️ Частично
  • 📋 Запланировано

8. Открытые вопросы ​

  • [ ] Выбор времени между JIT и AOT
  • [ ] Дизайн пакетного менеджера
  • [ ] Порядок замены модулей при самозагрузке
  • [ ] Выбор AOT-бэкенда (LLVM или собственный)

9. Стандарты выпуска версий ​

Серия v0.x:

  • Функционал завершён, но возможны граничные случаи
  • API может меняться
  • Только для обучения и экспериментов

v1.0:

  • Все ключевые функции стабильны
  • API заморожен
  • Подходит для продакшна
  • Полная документация и руководства

Ссылки ​