Развитие Gela
- Четыре компоненты
- Gela Asis, найбольший приоритет
- Вычисления статических выражений. Для скалярных типов, что можно было - сделал. Нужно сделать для строк. Там найбольшая трудность - определение границ строк.
- Готово. Объявления приватных операций.
Видимо нужно определить структуру - набор свойств типа, сделать ее наполнение и отслеживать изменение свойств. Реагировать на изменения введением определений приватных операций.
- Пакет Asis.Text. Сделать кеш исходных текстов, проиндексированных по номеру строки. Сделать логику вычленения комментариев
- Нормализованные Discriminant_Associations и Record_Component_Associations. Если с дискриминантами вроде все понятяно, их перечень известен, нужно просто упорядочить, то с компонентами записи сложнее, тк их набор зависит от значения дискриминантов.
- Функция Is_Dispatching_Call. Пока не разбирался с надклассовыми типами ('Class)
- Пакет Asis.Compilation_Units.Relations. Нужное и вроде не особо сложное дело, определить два отношения над множеством модулей (Semantic_Dependence_Order, Elaboration_Order)
- Пакет Asis.Compilation_Units.Times (низкий приоритет). Не понятно как считать время компиляции и время последнего изменения модулей
- Это все, что удалось вспомнить. На самом деле недоделок больше. Нужно брать тексты программ на Аде и пытаться открывать их модули ASIS-ом. Думаю стоит собирать коллекцию таких текстов, на которых наш ASIS не ломается. На нем можно потом пускать тесты, отслеживать регрессии.
- Собственно сами тесты ASIS. Кроме простого открытия контекста можно придумать еще разные тесты. Три уже есть в TenDRA, хорошо бы придумать еще. (Еще есть Quality For Asis, но его просили никому не давать и вообще делать вид что его нет, надо писать свой аналог с нуля, хотябы тест на структурную эквивалентность, тем более, что старый для Ада 2005 не будет работать).
Средства отладки.(New: Похоже придумать удалось, [2594], надо задокументировать, развивать и использовать). Внутренние структуры данных могут быть довольно сложными. Например, таблицы имен, множества интерпретаций и т.д. Хорошо бы иметь средства их посмотреть/протоколировать. Какой-то ключик --debug. Я пробовал реализовать какое-то подобие java log, но то, что вышло мне не понравилось и я удалил его из кода. Если удасться придумать какой-то изящьный механизм, желательно с минимальными накладными расходами в выключенном состоянии.
- Прекомпиляцию модулей: запись в бинарный файл образа памяти для чтения, когда в следующий раз этот модуль понадобиться. Нужно для повышения быстробействия.
- Генератор кода
- Ada -> TenDRA. Примерно сделаны скалярные типы. Дальше можно делать массивы и тд. и тп. Непаханное поле. Есть мысль все тут переделать, использовать синтаксическую трансляцию, для этого нужно синтезировать синтаксис и придумать тулзы, формат описания и пр.
- Можно доделывать саму TenDRA, но это нужно писать на Си. Там есть несколько глюков, например, не работают рекурсивные макросы. Сами инсталеры довольно старые, не оптимальные. Попытка их переделать зависла в воздухе. Еще хотелось бы поддержку Zero Cost Exceptions.
- Можно попробовать сделать генератор с использованием какого-то другого проекта (не TenDRA). Низкий приоритет.
- Можно сделать инсталеры на Аде
- Проверка правил Ады. Берем ARM и реализуем каждый пункт из Legality Rules и прочего. Низкий приоритет, т.к. работа большая, но и без чекера можно найти хорошее пременения для проекта.
- Ada Run Time. Тоже непаханное поле. Сейчас есть спецификации пустышки. Их когда-то нужно будет реализовать. Низкий приоритет.
- Переход на Ада-2005
- Поддержка разных кодировок в лексическом анализаторе. Думаю стоит переписать его вручную (сейчас он на alex). Тогда его можно будет использовать и в других местах, например в IDE для раскраски ключевых слов, фолдинга. (В процессе...)
- Готово.
Сам переход вижу постепенным, шаг за шагом. Вводим новую конструкцию в синтаксис, добавляем ее в ASIS, корректируем построитьель дерева, пишем тест на нее. Затем берем следующую конструкцию. (Это готово, надо тестить и исправлять ошибки)
- Спецификации предопределенных модулей. (Вадим сделал, ждем лексер Unicode, потом закомитим).
- Использование проекта в его настоящем виде
- Интеграция с IDE. Главная работа доделать быстрое удаление модуля из ASIS, чтобы можно было затем перечитать его новую версию. (Еще нужно проверить/улучшить работу восстановления после ошибок). Если перечитка заработает, сразу можно наклепать массу полезного, например, переход от имени к определению, переименование и пр. То, что ASIS не до конца рабочий тут не страшно, просто эти функции будут не всегда работать. Зато можно будет сразу видеть глюки ASIS-а и их исправлять :)
Download in other formats: