12 KiB
План развития проекта (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. Приоритеты разработки
- Высокий приоритет: Завершение токенизатора и базового парсера
- Средний приоритет: Реализация типизации и базовой генерации кода
- Низкий приоритет: Оптимизации и дополнительные инструменты
7. Метрики успеха
7.1. Технические метрики
- Покрытие тестами: не менее 90% для критичных модулей
- Отсутствие предупреждений статического анализатора
- Соответствие требованиям
no_stdдля всех модулей
7.2. Качественные метрики
- Полное соответствие грамматике языка Ъ+
- Корректная обработка всех допустимых конструкций
- Четкие и информативные сообщения об ошибках
Примечания
- План развития может корректироваться в зависимости от требований проекта и выявленных в процессе разработки особенностей.
- Все изменения в плане должны быть согласованы и задокументированы.
- Приоритеты могут пересматриваться в зависимости от критичности задач и требований безопасности.