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.
Основные цели:
- Байткод-компиляция: поддержка REPL и инкрементальной компиляции
- Самозагрузка (Bootstrap): написание компилятора YaoXiang на самом YaoXiang
- AOT-компиляция: компиляция байткода в нативный машинный код
1. Мотивация
Зачем нужно версионное планирование?
- Управление проектом: разбиение целей на выполнимые этапы
- Ожидания пользователей: информирование пользователей о стадии развития языка
- Распределение ресурсов: определение приоритетов на каждом этапе
- Контроль рисков: своевременное обнаружение проблем и корректировка курса
Основные проектные решения
- Приоритет байткода: сначала интерпретация, затем 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.rs | 2025-01-23 |
| P4.2 | DAG-планировщик | 🔶 Дизайн готов | .claude/plan/flow-scheduler-implementation.md | 2026-01-04 |
| P5 | Стандартная библиотека | ⚠️ Частично | src/std/ | 2025-01-23 |
| P6 | TUI REPL | ✅ Завершён | src/backends/dev/repl/ | 2025-01-24 |
| P7 | Система обобщений (generics) | ✅ Завершён | docs/design/rfc/011-generic-type-system.md | 2025-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: AOT | v1.0+ | Исходный код / байткод | Машинный код | Нативная производительность |
Причины приоритета байткода:
- Поддержка REPL: мгновенная компиляция вводимого кода для интерактивной разработки
- Инкрементальная компиляция: при изменении одной функции перекомпилируется только она
- Платформонезависимость: файлы .yxb запускаются на любой платформе, нужен лишь VM под эту платформу
5. Стратегия зависимостей
Краткосрочно: вызов библиотек Rust с crates.io (паразитирование на Cargo)
Текущие зависимости:
- Конкурентность: parking_lot, crossbeam, rayon
- Структуры данных: indexmap, hashbrown, smallvec
- Сеть: tokio
- Сериализация: serde, ron
Долгосрочно: собственная стандартная библиотека и пакетный менеджер
6. Цепочка инструментов
| Версия | Инструмент | Состояние |
|---|---|---|
| v0.1 | yaoxiang-cli | ✅ Готов |
| v0.1 | TUI REPL | ✅ Готов |
| v0.2 | yaoxiang-debug | 🚧 Проектируется |
| v0.3 | yaoxiang-fmt | 📋 Планируется |
| v0.3 | yaoxiang-lsp (базовый) | 📋 Планируется |
| v0.5 | yaoxiang-clippy | 📋 Планируется |
| v1.0 | Полная цепочка инструментов | 📋 Планируется |
7. Показатели успеха
| Показатель | v0.1 | v0.2 | v0.3 | v0.5 | v1.0 |
|---|---|---|---|---|---|
| Сквозной запуск | ✅ | ✅ | ✅ | ✅ | ✅ |
| Базовая система задач | ✅ | ✅ | ✅ | ✅ | ✅ |
| FlowScheduler | ❌ | 🚧 | ✅ | ✅ | ✅ |
| Поддержка конкурентности | ⚠️ | 🚧 | ✅ Базовая | ✅ Полная | ✅ |
| Стандартная библиотека | Базовая | Базовая | Базовая | Полная | Полная |
| Система обобщений | ⚠️ | ⚠️ | 🚧 | ✅ | ✅ |
| TUI REPL | ✅ | ✅ | ✅ | ✅ | ✅ |
| Самозагрузка | ❌ | ❌ | ❌ | ❌ | ✅ |
| AOT | ❌ | ❌ | ❌ | ❌ | ✅ |
| Покрытие кода | 60% | 70% | 80% | 90% | 95% |
Условные обозначения:
- ✅ Завершено
- 🚧 В процессе
- ⚠️ Частично
- 📋 Запланировано
8. Открытые вопросы
- [ ] Выбор времени между JIT и AOT
- [ ] Дизайн пакетного менеджера
- [ ] Порядок замены модулей при самозагрузке
- [ ] Выбор AOT-бэкенда (LLVM или собственный)
9. Стандарты выпуска версий
Серия v0.x:
- Функционал завершён, но возможны граничные случаи
- API может меняться
- Только для обучения и экспериментов
v1.0:
- Все ключевые функции стабильны
- API заморожен
- Подходит для продакшна
- Полная документация и руководства
