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-компиляция: компиляция байт-кода в машинный код для целевой платформы
一、Мотивация
Зачем нужно планирование версий?
- Управление проектом: разбиение целей на выполнимые вехи
- Ожидания пользователей: информирование пользователей об этапах развития языка
- Распределение ресурсов: определение приоритетов на каждом этапе
- Контроль рисков: своевременное выявление проблем и корректировка направления
Ключевые проектные решения
- Приоритет байт-кода: сначала реализуем интерпретацию, затем AOT
- Поэтапная поставка: каждая версия содержит работающий функционал
- Обратная совместимость: до v1.0 API может изменяться, но с предварительным уведомлением
- Валидация через самокомпиляцию: доказательство выразительности языка через самокомпиляцию
- Послойная оптимизация производительности: сначала запустить, затем оптимизировать
二、Состояние компонентов (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 | Система дженериков | ✅ Выполнено | 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
三、Дорожная карта версий
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)
- Zero-cost abstraction
v0.3: Предпросмотр параллелизма 📋
Цель: Поддержка базового параллелизма
- Граф зависимостей задач DAG
- Базовый планировщик
- Параллелизм spawn
v0.4: Система дженериков 📋
Цель: Полноценные дженерики
- [ ] RFC-011 Фаза 1: Базовые дженерики
- [ ] RFC-011 Фаза 2: Ограничения типов
- [ ] RFC-011 Фаза 3: Ассоциированные типы
- [ ] RFC-011 Фаза 4: Const-дженерики
- [ ] RFC-011 Фаза 5: Условные типы
Технические приоритеты:
- Устранение мёртвого кода
- Zero-cost abstraction
- Перегрузка функций + inline-оптимизация
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-бэкенд)
- Пригодность для производства
四、Трёхуровневая стратегия компиляции
| Уровень | Версия | Вход | Выход | Описание |
|---|---|---|---|---|
| L1: Байт-код | v0.1+ | Исходный код (.yx) | Байт-код (.yxb) | Интерпретация VM |
| L2: Самокомпиляция | v0.9+ | Исходный код YaoXiang | Байт-код | Компилирует сам себя |
| L3: AOT | v1.0+ | Исходный код/байт-код | Машинный код | Нативная производительность |
Обоснование приоритета байт-кода:
- Поддержка REPL: компиляция вводимого кода на лету, интерактивная разработка
- Инкрементальная компиляция: изменение одной функции требует перекомпиляции только этой части
- Кроссплатформенность: файлы .yxb работают на разных платформах, нужен только VM для целевой платформы
五、Стратегия зависимостей
Краткосрочная перспектива: Вызов библиотек Rust с crates.io (Cargo как основа)
Текущие зависимости:
- Параллелизм: parking_lot, crossbeam, rayon
- Структуры данных: indexmap, hashbrown, smallvec
- Сетевые: tokio
- Сериализация: serde, ron
Долгосрочная перспектива: Собственная стандартная библиотека и менеджер пакетов
六、Инструментарий
| Версия | Инструмент | Состояние |
|---|---|---|
| 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 | Полный инструментарий | 📋 Запланировано |
七、Показатели успеха
| Показатель | v0.1 | v0.2 | v0.3 | v0.5 | v1.0 |
|---|---|---|---|---|---|
| Сквозной запуск | ✅ | ✅ | ✅ | ✅ | ✅ |
| Базовая система задач | ✅ | ✅ | ✅ | ✅ | ✅ |
| FlowScheduler | ❌ | 🚧 | ✅ | ✅ | ✅ |
| Поддержка параллелизма | ⚠️ | 🚧 | ✅ базовый | ✅ полный | ✅ |
| Стандартная библиотека | базовая | базовая | базовая | развитая | полная |
| Система дженериков | ⚠️ | ⚠️ | 🚧 | ✅ | ✅ |
| TUI REPL | ✅ | ✅ | ✅ | ✅ | ✅ |
| Самокомпиляция | ❌ | ❌ | ❌ | ❌ | ✅ |
| AOT | ❌ | ❌ | ❌ | ❌ | ✅ |
| Покрытие кода | 60% | 70% | 80% | 90% | 95% |
Легенда:
- ✅ Выполнено
- 🚧 В процессе
- ⚠️ Частично выполнено
- 📋 Запланировано
八、Открытые вопросы
- [ ] Выбор момента для JIT vs AOT
- [ ] Проектирование менеджера пакетов
- [ ] Порядок замены модулей при самокомпиляции
- [ ] Выбор AOT-бэкенда (LLVM vs собственная разработка)
九、Критерии выпуска версий
Серия v0.x:
- Функционал полный, но возможны проблемы с пограничными случаями
- API может изменяться
- Только для обучения и экспериментов
v1.0:
- Все ключевые функции стабильны
- API заморожен
- Подходит для производственного использования
- Полная документация и учебные материалы
