В SICP 3.4.2 существует проблема порядка событий в разных процессах.
Предположим, у нас есть два процесса: один с тремя упорядоченными событиями (a, b, c) и один с тремя упорядоченными событиями (x, y, z).Если два процесса выполняются одновременно, без ограничений на то, как их выполнение чередуется, то существует 20 различных возможных упорядочений для событий, которые соответствуют отдельным упорядочениям для двух процессов.
Программисты, разрабатывающие эту систему, должны были бы рассмотреть влияние каждого из этих 20 порядков и проверить, является ли каждое поведение приемлемым.Такой подход быстро становится громоздким по мере увеличения числа процессов и событий.
Существует ли какой-либо инструмент / наилучшая практика, которая помогает программисту следить за тем, чтобы все логически различные случаи охватывались?
Было бы неплохо, если бы программист мог определить набор событий и ограничений между ними, и инструмент вернул бы весь действительный порядок событий (распознавая и группируя аналогичные, например, циклические шаблоны).
Учитывая список возможныхПотоки событий программист сможет добавлять / удалять / изменять ограничения.
Для меня важна проблема, потому что большая часть ошибок, которые у меня возникают, связана с некоторым состоянием гонки или с некоторыми не обработанными случаями.
Я действительно не хочу использовать определенный язык с какой-то продвинутой системой типов, я бы предпочел иметь независимое от технологии / языка решение, которое действует как своего рода помощник - для разработки и документирования системы: с ее событиями,ограничения (и состояния).
Это был бы Святой Граальмне.
Я искал решение по следующим темам: формальные методы, формальная проверка, пролог (из-за исчерпывающего поиска и логики), параллелизм, зависимые типы, программирование на основе событий, многие виды тестирования,проектирование по контракту, цикломатическая сложность;но никто из них не дал мне ответа.Кроме того, углубление в теорию типов кажется излишним.