Развитие Gela

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