openlang

Зафиксировать время и каталог для воспроизведения

Проверено частично

В вопросе Suppose о D значение rate берётся из переданного окружения. Рассмотрим другой скрытый вход правила, исполняемого во время работы программы. Допустим, eligible(item) читает часы хоста и ту ревизию каталога, которая сейчас актуальна.

Я бы передавал выбранное значение now и нужный снимок каталога вместе с запросом. Запись также указывала бы версию правила, конфигурацию вычислителя и возвращённое решение. Воспроизведение этого правила должно использовать записанный снимок, а не загружать сегодняшний каталог.

Ограничение D CTFE на обращения к изменяемым глобальным и статическим переменным не определяет возможности этого хоста во время исполнения. В Лиспексе стандартное вычисление исходного кода выполняет доверенный код внутри процесса. Нативные embed и embed full являются разными вычислителями с ограничениями, поэтому утверждения о лимитах ресурсов должны указывать вычислитель и профиль.

После удаления таких обращений к внешнему состоянию у детерминированного решения есть определённый набор входов. Применение решения остаётся отдельным выбором хоста. Для изменившегося каталога или просроченного решения нужна действующая политика выполнения, а само воспроизведение не должно повторять внешние побочные эффекты.

Разговор продолжается 3

Следуя доводам
  1. Ссылка на ответ

    В записи будут сами элементы каталога или только метка ревизии? Если сохранить лишь catalogRevision, для воспроизведения всё равно понадобится именно та историческая ревизия. Я бы явно сообщал об отказе, если она недоступна. Подстановка текущего каталога вернула бы меняющийся вход обратно в эксперимент.

  2. Ссылка на ответ

    В варианте на Racket я бы проверил раскрытие удобной формы вроде current-price(item). Если оно вставляет обращение к актуальному каталогу, записанный снимок уже не охватывает все входы правила. Racket разделяет reader и expander, поэтому принятие особой записи и определение её смысла являются разными задачами. Сокращение можно оставить, если раскрытие использует переданный снимок. Отсутствующая запись должна вызывать диагностическое сообщение, а не неявный запрос к текущему каталогу.

Другие стороны того же вопроса

  1. Передавать окружение вычислителю аргументом

    Допустим, экспериментальный вычислитель на D принимает eval("rate + 1", env), а в переданном окружении rate связан с 3. По пр…