Благодаря комментариям я получил ответ.
Отложенная позиция события
Я использую слово defer queue
на диаграмме конечного автомата, но в UML такого понятия нет2.5.1 (последняя) спецификация.
См. Сайт: https://www.omg.org/spec/UML/About-UML/
файл: formal-17-12-05.pdf
UML 2.5.1 определяетevent pool
.
В 14.2.3.4.4 State history
,
- начальная цитата
Отложенные события
Состояние может указыватьнабор типов событий, которые могут быть отложены в этом состоянии.Это означает, что события Событий этих типов не будут отправляться, пока это состояние остается активным.Вместо этого эти события остаются в пуле событий до тех пор, пока:
- не будет достигнута конфигурация состояния, при которой эти типы событий больше не откладываются, или
- , если явно используется отложенный тип событияв триггере перехода, источником которого является отложенное состояние (т. е. опция переопределения типа).
Событие может быть отложено составным состоянием или вспомогательными состояниями, и в этом случае оно остается отложеннымдо тех пор, пока составное состояние остается в активной конфигурации.
- конечная кавычка
Важным моментом является "Вместо этого эти события остаются в пуле событий до».Слово остаются подразумевает сохранение исходной позиции в пуле событий.
Порядок оценки событий
События в пуле событий имеют порядок.
См. Сайт: https://www.omg.org/spec/PSSM/About-PSSM/
файл: ptc-17-04-04.pdf
9.3.16.2 Deferred 001
, RTC Steps
Step7 указывает, что событие оцениваетсяorder - голова («старая») к хвосту («молодая»).
Заключение
Порядок оценки событий в пуле событий - голова к хвосту.Отложенные события просто остались в своем первоначальном положении.Следовательно, e1
должно быть оценено как s3
на моей диаграмме.
Примечание
Реализация Boost.MSM (версия 1.68.0) неверна.https://wandbox.org/permlink/v5hRtdJXRek8RidW
Я сообщу об этом.