В качестве простого примера: при разработке оценщика я мог бы захотеть выполнить предварительную оценку, чтобы увидеть, является ли текущая информации о зависимостях достаточно или нет. В этом случае я буду вызывать функцию eval так, как если бы она была пробной, т. е. меня интересует только ее возвращаемое значение bool, которое указывает на успех/неуспех. Самое главное, поскольку это всего лишь предварительная попытка, я хотел бы сохранить все в неизменном виде на протяжении всего выполнения, другими словами, никакие данные, такие как зависимость/счетчик/memoi/и т. д., не различаются до и после проверки.Теперь, если функция проверки достаточно проста, я, конечно, могу создать новую функцию, имитирующую старую, за исключением того, что каждая операция записи вместо этого выполняется в глубокой копии и т. д.
Однако, если функция имеет некоторые тысячи строк кода с переплетенной логикой. Писать новый уже нецелесообразно. Я могу полагаться только на систему регрессии, которая поможет выявить как можно больше проблем и принять на себя потенциальный риск.
Поэтому мне интересно
- Есть ли какой-либо четко определенный способ добиться этого?
- Можно ли использовать fork для реализации этого в Linux? то есть родительский процесс просто ничего не делает, а ждет дочерний процесс, дочерний выполняет функцию проверки и передает целевое значение родителю по каналу. Если моя память не так сильно заржавела, fork использует схему копирования при записи, поэтому она напоминает процесс, описанный выше, и я ожидаю, что накладные расходы будут относительно небольшими. Есть ли опасность при этом?
Как попытка сделать это вопрос более конкретный, я хотел бы применить некоторые ограничения к функции проверки:
- Гарантируется, что такая функция каким-либо образом не взаимодействует с внешним процессом, т. е. нет сетевого сокета, нет RPC. Чтобы еще больше упростить, давайте предположим, что локального IPC не существует.
- Эта функция не содержит ничего индетерминированного, т. е. не нужно беспокоиться о прикосновении к std::mt19937, curandstate и т. д.
- Есть ли что-нибудь еще, чтобы прояснить этот вопрос? пожалуйста, научите.
Подробнее здесь: https://stackoverflow.com/questions/792 ... d-to-the-s