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. Управление проектом: разбиение целей на выполнимые вехи
  2. Ожидания пользователей: информирование пользователей об этапах развития языка
  3. Распределение ресурсов: определение приоритетов на каждом этапе
  4. Контроль рисков: своевременное выявление проблем и корректировка направления

Ключевые проектные решения

  • Приоритет байт-кода: сначала реализуем интерпретацию, затем 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.rs2025-01-23
P4.2Планировщик DAG🔶 Проектирование завершено.claude/plan/flow-scheduler-implementation.md2026-01-04
P5Стандартная библиотека⚠️ Частично выполненоsrc/std/2025-01-23
P6TUI REPL✅ Выполненоsrc/backends/dev/repl/2025-01-24
P7Система дженериков✅ Выполненоdocs/design/rfc/011-generic-type-system.md2025-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: AOTv1.0+Исходный код/байт-кодМашинный кодНативная производительность

Обоснование приоритета байт-кода:

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

五、Стратегия зависимостей

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

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

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

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

六、Инструментарий

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

七、Показатели успеха

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

Легенда:

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

八、Открытые вопросы

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

九、Критерии выпуска версий

Серия v0.x:

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

v1.0:

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

Ссылки