Skip to content

Latest commit

 

History

History
49 lines (32 loc) · 4.45 KB

.tbd.rst

File metadata and controls

49 lines (32 loc) · 4.45 KB
  • Отработка приёмов спецификации

    • Определённость значения переменной
      • Добавление понятия
      • Внесение соответствующих изменений в спецификацию
        • Например, что после if определено только то, что определено после любой из ветвей
      • Добавление свойства, что переменную можно использовать в выражении только когда она определена
    • Функция
      • Добавление спецификации на функцию определённой сигнатуры
      • Добавление свойства, что у функции телом должен быть statement, имеющий типов возвращаемого значения тип возвращаемого значения функции
      • Добавление свойства, что все переменные, соответствующие параметрам функции, определены для statement'а, являющегося телом функции
    • Jump
      • Определение того, как адресовать прыжок -- надо понять, как именно
      • Добавление statement'а для jump'а
      • Изменение спецификации с тем, чтобы появилась возможность описания соответствующих свойств --- надо понять, как именно
      • Добавление свойства, что jump может осуществляться в пределах функции
    • Try/catch
      • Изменение спецификации, чтобы можно было отражать соответствующие свойства -- надо понять, как именно
      • Добавление типов statement'ов, соответствующим try-блокам и catch-блокам
      • Добавление свойства, что jump может осуществляться только в пределах try-блока и catch-блока
    • Не нужно ли вместо statement'а последовательной композиции statement'ов иметь отдельную сущность "последовательность statement'ов", то есть "линейный блок"?
  • Превращение рекурсивных Gen'ов в Чёрч-кодированные, комбинирующиеся рекурсивными схемами. В частности, этим можно достигать хитрые комбинации, когда на определённой глубине корректных Gen'ов используются специальные, генерирующие некорректные значения.

  • Попытка разделения спецификации того, что есть в языке, от спецификации того, что нужно для пользовательских свойств.

    Например, в тип можно добавлять какое-нибудь пользовательское свойство, например, наличие конструкции if (или, например, наличие паттерна для срабатывания оптимизатора).

    Хочется, чтобы эти спецификации можно было бы добавлять рядом с "основной" спецификацией языка, которая не меняется для добавления новых свойств. Соответственно, генераторы будут специфичны для комбинации "основной" спецификации языка и набора пользовательских свойств.

  • Параметром генератора может быть "тестовый набор, удовлетворяющий заданному критерию". Соответственно, по построению, генератор таких структур данных "тестовый набор" будет генерировать целиковые тестовые наборы, удовлетворяющие критерию.