Project

General

Profile

Трассировка обхода сценарного КА » History » Version 5

Sergey Groshev, 06/28/2010 11:54 AM

1 1 Sergey Groshev
h1. Трассировка обхода сценарного КА
2
3 5 Sergey Groshev
h2. Что есть на данный момент (конец июня 2010)
4 4 Sergey Groshev
5 1 Sergey Groshev
* Реализована трассировка для старых UTT.
6
* Состояния, начало и конец переходов, запуск и завершение сценариев трассирует обходчик.
7 2 Sergey Groshev
* Значения итерационных переменных трассируются сгенерированным кодом по мере их вычисления. При этом в трассе возможны незавершённые переходы, у которых оттрассированы не все описанные в коде сценарного метода итерационные переменные (вообще говоря, они не являются переходами).
8
* Ранее вызовы дуг всегда выполняли next + call; затем для нужд проекта спрямителя были реализованы вызовы call, а для нужд проекта netfsm - вызовы next. Старые обходчики (dfsm, ndfsm) используют только вызовы старого образца.
9 1 Sergey Groshev
* stable переменные хранятся в одной структуре с итерационными, то есть, вообще говоря, привязаны не к состоянию, а, например, к сохранённой в обходчике дуге.
10
11
h2. Что нужно
12 4 Sergey Groshev
13 1 Sergey Groshev
* Реализовать трассировку обхода сценарного КА средствами Aspectrace (в аспекте "fsm") совместно с или вместо старой трассировки.
14
* Реализовать библиотечный метод, получающий указатели на @ScenarioFunctionDesc@ и структуру данных, содержащую значения итерационных переменных, и осуществляющий трассировку (UTT & Aspectrace) всех значений итерационных переменных. При этом в структуре @ScenarioFunctionDesc@ должно добавиться поле, содержащее ссылку на соответствующий @StructTypeDesc@.
15 3 Sergey Groshev
* Вся трассировка должна выполняться кодом обходчика. Для устранения из трасс незавершённых переходов следует отказаться в обходчике от вызовов старого образца, а делать всегда отдельно next и отдельно call. При вызове next обычная трассировка не производится (но может производиться какая-то другая). При вызове call трассируется сообщение @transition_start@, затем трассируются значения итерационных переменных, затем выполняется собственно вызов, затем трассируется сообщение @transition_end@.
16 1 Sergey Groshev
* _Пересмотреть концепцию и реализацию @stable@ переменных._
17 5 Sergey Groshev
* _Возможно также, понадобятся некоторые языковые механизмы, аналогичные call-блоку, позволяющие выделять код, не являющийся выражениеем iterate, который также должен выполняться только при вызове next._