- From: Jim Barnett <1jhbarnett@gmail.com>
- Date: Wed, 29 Oct 2014 16:24:16 -0400
- To: Gavin Kistner <phrogz@me.com>
- CC: www-voice@w3.org, Chris Nuernberger <chrisn@nvidia.com>
- Message-ID: <54514CF0.10009@gmail.com>
Gavin, Glad the explanation helped. Would you like to suggest the wording - I'm not sure exactly where you want the "and"s and I doubt that adding them randomly will improve things much. - Jim On 10/29/2014 4:06 PM, Gavin Kistner wrote: > Ha, thank you. I feel better. I had previously been concentrating on > the exit-set-intersection, which is why I was focused on targetless. > So that didn't hurt my head much. > > However, I had not grasped the concept of promoting a non-preempted > transition to the active descendant atomic state(s). I see it now in > "A transition T is /enabled/ by named event E in atomic state S if a) > T's source state is S or an ancestor of S". > > So, thanks! That helped. > > P.S. I think that the definition I quoted above could use an explicit > "and" or two in the first sentence to clearly differentiate it from a > possibly ambiguous "or" case. > -- > (-, /\ \/ / /\/ > > On Oct 29, 2014, at 09:33 AM, Jim Barnett <1jhbarnett@gmail.com> wrote: > >> Gavin, >> Chear up, we have been collectively confused by this subject for years. >> >> [Q1] Yes, "foo" is consumed by the transition in state A, so the >> outer transition (the one in state innerwrap) is not selected. You >> are correct that clause c is the relevant item here. (But note that >> the whole definition talks about optimal enablement in a specific >> atomic state. That will be relevant in the answer to your next >> question.) >> >> [Q2] The log message will not occur, because foo is consumed by the >> transitions in States A1 and A2. However if there were no transition >> in A2 the situation would be different. In that case, the transition >> in outerwrap would be optimally enabled in atomic state A2 because >> there's no transition to block it. That is, we pick the optimally >> enabled transition in _each_ atomic state _independent_ of the other >> states. (Now go lie down until your head stops spinning because it's >> about to get weirder.) However we must check for potential conflicts >> between the transitions chosen in the atomic states. Two transitions >> conflict if their exit sets intersect. The transition in outerwrap >> is a targetless transition, and therefore has no exit set. Thus it >> does not conflict with the transition in A1, so both of them will get >> taken. (Now go take a stiff drink.) >> >> [Q3] Yes, both states are entered. The two transitions do not >> conflict since their exit sets do not intersect. >> >> - Jim >> >> On 10/29/2014 10:51 AM, Gavin Kistner wrote: >>> I still, disturbingly, struggle to gain intuition on section 3.13 >>> of the spec. Please help me by clarifying: >>> >>> <scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0"> >>> <state id="innerwrap"> >>> <transition event="foo"><log label="Should I >>> run?"/></transition> >>> <state id="A"><transition event="foo" target="B" >>> type="internal"/></state> >>> <state id="B"/> >>> </state> >>> </scxml> >>> >>> My intuition tells me that a "foo" event should be ‘consumed’ by the >>> inner transition and not ‘bubble’ out. That the outer log message >>> should not run. >>> >>> [Q1] Is this correct? >>> >>> It is, I think, confirmed by this text: "Definition: A transition T >>> is optimally enabled by event E in atomic state S if a) T is enabled >>> by E in S and b) no transition that precedes T in document order in >>> T's source state is enabled by E in S and c) no transition is >>> enabled by E in S in any descendant of T's source state." >>> >>> Part (c) prevents the targetless transition above from executing. Yes? >>> >>> Now, what about parallel? >>> >>> <scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0"> >>> <parallel id="outerwrap"> >>> <transition event="foo"><log label="Should I >>> run?"/></transition> >>> <state id="inner1"> >>> <state id="A1"><transition event="foo" target="B1" >>> type="internal"/></state> >>> <state id="B1"/> >>> </state> >>> <state id="inner2"> >>> <state id="A2"><transition event="foo" target="B2" >>> type="internal"/></state> >>> <state id="B2"/> >>> </state> >>> </parallel> >>> </scxml> >>> >>> [Q2] If "foo" occurs, should the log message occur? >>> >>> The same spec above seems to tell me that it should not, as long as >>> the transitions in inner1 or inner2 are present. Even if the >>> transition in inner2 was not present, the fact that any child of the >>> parallel was enabled by it means that the outer targetless >>> transition is preempted per (c). >>> >>> And finally, for good measure: >>> >>> [Q3] If "foo" occurs, should both B1 and B2 be entered? >>> >>> My intuition tells me yes, because that's what parallel is all >>> about, yo. I think this is supported because part (b) of the above >>> quoted definition does not apply. One transition precedes the other >>> in document order, but they are not part of the same hierarchy when >>> we consider the source state of each transition. Correct? >>> >>> Thanks for your help. :) >>> >>
Received on Wednesday, 29 October 2014 20:24:48 UTC