207 lines
12 KiB
Markdown
207 lines
12 KiB
Markdown
# План развития проекта (Roadmap)
|
||
|
||
Настоящий документ определяет направления развития программного изделия (ПИ) «Ъ» (компонент «Токенизатор») в рамках Проекта «Твердь».
|
||
|
||
---
|
||
|
||
### 1. Текущая стадия разработки
|
||
|
||
Проект находится на стадии разработки базовой архитектуры и структуры токенизатора. Реализованы:
|
||
|
||
* Структура проекта и модульная организация кода
|
||
* Определения типов токенов и грамматики языка
|
||
* Заглушки основных компонентов для последующей реализации
|
||
* Формальное описание грамматики языка Ъ+ в форме EBNF
|
||
|
||
---
|
||
|
||
### 2. Краткосрочные цели (Этап 1: Лексический анализ)
|
||
|
||
#### 2.1. Разработка фронтенд-части
|
||
|
||
**Срок:** Текущий этап разработки
|
||
|
||
**Задачи:**
|
||
|
||
- [ ] Реализация модуля синтаксического разбора UTF-8 в режиме `no_std`
|
||
- Полная реализация функции `decode_utf8` в модуле `utf8.rs`
|
||
- Реализация итератора `Utf8Chars` для последовательного декодирования
|
||
- Тестирование на различных UTF-8 последовательностях (включая кириллицу)
|
||
|
||
- [ ] Реализация обработки комментариев
|
||
- Полная реализация модуля `comment.rs` с поддержкой рекурсивной вложенности
|
||
- Обработка парных ограничителей `<[` и `]>`
|
||
- Тестирование вложенных комментариев различных уровней
|
||
|
||
- [ ] Реализация детерминированного конечного автомата (ДКА)
|
||
- Полная реализация переходов между состояниями в модуле `dfa.rs`
|
||
- Обработка всех операторов и конструкций языка
|
||
- Поддержка различения операторов записи (`<<`) и сдвига (`<<<`)
|
||
|
||
- [ ] Реализация основного токенизатора
|
||
- Полная реализация модуля `tokenizer.rs`
|
||
- Последовательная обработка входного потока данных
|
||
- Корректное отслеживание позиций токенов (строка, столбец)
|
||
|
||
- [ ] Реализация обработки литералов
|
||
- Поддержка десятичных, шестнадцатеричных и двоичных литералов
|
||
- Обработка типизированных литералов с кириллическими суффиксами (`б8`, `ц8`, `бр`, `цр`, `в32` и т.д.)
|
||
- Поддержка разделителя разрядов (`_`) в числовых литералах
|
||
- Обработка вещественных литералов
|
||
|
||
- [ ] Разработка тестов
|
||
- Интеграционные тесты для полного цикла токенизации
|
||
- Тесты для кириллических идентификаторов
|
||
- Тесты для латинских идентификаторов
|
||
- Тесты для всех операторов языка
|
||
- Тесты для вложенных комментариев
|
||
- Тесты для отслеживания позиций
|
||
|
||
**Критерии завершения:**
|
||
|
||
* Токенизатор успешно обрабатывает все конструкции языка Ъ+ согласно грамматике
|
||
* Все тесты проходят успешно
|
||
* Код соответствует требованиям `no_std` и безопасности
|
||
* Документация актуальна и полна
|
||
|
||
---
|
||
|
||
### 3. Среднесрочные цели (Этап 2: Промежуточное представление)
|
||
|
||
#### 3.1. Промежуточное представление и типизация
|
||
|
||
**Срок:** Следующий этап после завершения токенизатора
|
||
|
||
**Задачи:**
|
||
|
||
- [ ] Проектирование структур данных абстрактного синтаксического дерева (AST)
|
||
- Определение узлов для всех конструкций языка
|
||
- Поддержка префиксов идентификаторов (`@`, `:`, `?`)
|
||
- Представление блоков, условий, циклов, функций
|
||
|
||
- [ ] Реализация синтаксического анализатора (парсера)
|
||
- Парсинг на основе EBNF грамматики
|
||
- Построение AST из потока токенов
|
||
- Обработка ошибок парсинга с указанием позиций
|
||
|
||
- [ ] Реализация механизмов статического вывода типов
|
||
- Вывод типов для констант и литералов
|
||
- Проверка типов для выражений
|
||
- Валидация типизированных литералов
|
||
|
||
- [ ] Разработка системы ошибок
|
||
- Расширение модуля `error.rs` для синтаксических ошибок
|
||
- Детальные сообщения об ошибках с позициями
|
||
- Классификация ошибок по типам
|
||
|
||
**Критерии завершения:**
|
||
|
||
* Парсер успешно строит AST для всех корректных программ
|
||
* Вывод типов работает для всех допустимых конструкций
|
||
* Ошибки парсинга четко идентифицируются и документируются
|
||
|
||
---
|
||
|
||
### 4. Долгосрочные цели (Этап 3: Генерация кода)
|
||
|
||
#### 4.1. Генерация целевого кода
|
||
|
||
**Срок:** После завершения парсера и типизации
|
||
|
||
**Задачи:**
|
||
|
||
- [ ] Реализация модуля генерации LLVM IR
|
||
- Генерация промежуточного представления для высокопроизводительных систем
|
||
- Поддержка архитектур x86 и ARM
|
||
- Оптимизации для конвейерного программирования (`|>`)
|
||
|
||
- [ ] Разработка бэкенда для архитектуры «Эльбрус»
|
||
- Интеграция с компилятором LCC
|
||
- Использование промежуточного представления
|
||
- Поддержка предикатного исполнения (оператор `?`)
|
||
|
||
- [ ] Обеспечение отладочной информации
|
||
- Генерация отладочных символов в формате DWARF
|
||
- Сквозная передача позиций из исходного кода в машинный код
|
||
- Поддержка отладки для обоих бэкендов
|
||
|
||
- [ ] Оптимизации компилятора
|
||
- Оптимизация конвейерных операций
|
||
- Оптимизация предикатного исполнения для «Эльбрус»
|
||
- Статическая оптимизация выражений
|
||
|
||
**Критерии завершения:**
|
||
|
||
* Компилятор генерирует корректный код для обеих целевых архитектур
|
||
* Отладочная информация корректно передается через весь процесс компиляции
|
||
* Производительность сгенерированного кода соответствует требованиям
|
||
|
||
---
|
||
|
||
### 5. Дополнительные направления развития
|
||
|
||
#### 5.1. Расширение функциональности
|
||
|
||
* Поддержка дополнительных оптимизаций для конвейерного программирования
|
||
* Расширенные возможности статического анализа
|
||
* Интеграция с инструментами статического анализа безопасности
|
||
|
||
#### 5.2. Улучшение инструментария
|
||
|
||
* Разработка инструментов для разработчиков (форматировщик кода, линтер)
|
||
* Интеграция с системами непрерывной интеграции (CI/CD)
|
||
* Автоматизация тестирования и верификации
|
||
|
||
#### 5.3. Документация и обучение
|
||
|
||
* Расширенная документация для разработчиков
|
||
* Руководства по использованию языка Ъ+
|
||
* Примеры и учебные материалы
|
||
|
||
---
|
||
|
||
### 6. Приоритеты и ограничения
|
||
|
||
#### 6.1. Критические требования
|
||
|
||
* **Безопасность:** Все изменения должны сохранять соответствие требованиям безопасной разработки
|
||
* **Детерминизм:** Обеспечение детерминированного поведения на всех этапах компиляции
|
||
* **Сертификация:** Поддержание возможности сертификации на отсутствие НДВ
|
||
|
||
#### 6.2. Технические ограничения
|
||
|
||
* Использование только `no_std` окружения
|
||
* Запрет на внешние динамические библиотеки
|
||
* Поддержка архитектур «Эльбрус» и x86
|
||
|
||
#### 6.3. Приоритеты разработки
|
||
|
||
1. **Высокий приоритет:** Завершение токенизатора и базового парсера
|
||
2. **Средний приоритет:** Реализация типизации и базовой генерации кода
|
||
3. **Низкий приоритет:** Оптимизации и дополнительные инструменты
|
||
|
||
---
|
||
|
||
### 7. Метрики успеха
|
||
|
||
#### 7.1. Технические метрики
|
||
|
||
* Покрытие тестами: не менее 90% для критичных модулей
|
||
* Отсутствие предупреждений статического анализатора
|
||
* Соответствие требованиям `no_std` для всех модулей
|
||
|
||
#### 7.2. Качественные метрики
|
||
|
||
* Полное соответствие грамматике языка Ъ+
|
||
* Корректная обработка всех допустимых конструкций
|
||
* Четкие и информативные сообщения об ошибках
|
||
|
||
---
|
||
|
||
### Примечания
|
||
|
||
* План развития может корректироваться в зависимости от требований проекта и выявленных в процессе разработки особенностей.
|
||
* Все изменения в плане должны быть согласованы и задокументированы.
|
||
* Приоритеты могут пересматриваться в зависимости от критичности задач и требований безопасности.
|
||
|