К README · Указатель документации
Зачем это нужно
Здесь правило написано один раз и в той форме, которую читает человек из предметной области, а не только программист (фрагмент [examples/utilities/discount.fts](../../examples/utilities/discount.fts)):
категория «Продажи»
объект Покупка
сумма является деньгами
«постоянный клиент» является признаком
утилита «Рассчитать скидку»
принимает Покупка
возвращает деньги
начинает с 0
правило «Большая покупка»
если сумма не меньше 10000
то добавить 10 процентов от поля сумма
правило «Постоянный клиент»
если «постоянный клиент» равен да
то добавить 5 процентов от поля сумма
свойство «Скидка ограничена»
результат не больше 20 процентов от поля сумма
пример «Большая покупка»
дано сумма равна 20000
дано «постоянный клиент» равен нет
ожидается результат равен 2000
Ни фигурных скобок, ни стрелок, ни двоеточий: поверхность отступная и силлогистическая, а читаемые имена берутся в кавычки-ёлочки. Скобочный диалект из наследия тоже принимается — ради совместимости.
Из этого единственного исходника получаются реализация, тесты и проверки — сразу на восьми языках. свойство выше не комментарий: оно превращается в постусловие напечатанного кода. Печать examples/utilities/discount.fts в Python даёт, дословно:
# постусловие «Скидка ограничена»
if not rt.post(ctx, rt.lte(ctx, _t3, rt.percent(ctx, rt.number(20.0), rt.field_get(ctx, vhod, "сумма"))), "Скидка ограничена", "Рассчитать скидку"):
raise rt.fail("FTS_UTILITY_PROPERTY", "нарушено свойство «Скидка ограничена» утилиты «Рассчитать скидку»")
FTS_UTILITY_PROPERTY — собственный диагностический код ядра FTS, и формулировка сообщения тоже его. Служба на Python, служба на Go и бинарник на C, порождённые из этой модели, откажут одному и тому же входу одними и теми же словами. Вот что «единый источник правды» обязан означать, чтобы чего-то стоить.