RE: A (hopefully comprehensive) versioning proposal

> > I think you *MUST* statically check the pipe bindings in 
> the branch; not
> > doing so may break the dependency graph. The steps in the when- or
> > otherwise- branch may contain dependencies on steps outside 
> p:choose,
> > and not statically checking the branch may result in the 
> p:choose being
> > executed before the steps it actually depends on!
> 
> I don't think so. Only the invalid branch is being ignored. And you
> can't ever run that branch so it can't matter as far as the 
> order goes.
> 
> Consider:
> 
>   <p:choose name="choice">
>     <p:when test="some-condition">
>       <p:fribble>
>         <p:input port="purple">
>           <p:pipe step="ident" port="result"/>
>         </p:input>
>       </p:fribble>
>     </p:when>
>     <p:otherwise>
>       <p:identity>
>         <p:input port="source">
>           <p:inline><doc/></p:inline>
>         </p:input>
>       </p:identity>
>     </p:otherwise>
>   </p:choose>
> 
>   <p:identity name="ident">
>     <p:input port="source">
>       <p:inline><doc/></p:inline>
>     </p:input>
>   </p:identity>
> 
> If you understood the fribble step, then you'd always run 
> "ident" first.

Now that I think about it, you are probably right. I was thinking about
this V1 pipeline:

...
<p:choose>
  <p:when test="false()">
    <p:identity>
      <p:pipe step="ident" port="result">
    </p:identity>
  </p:when>
  <p:otherwise>
    ...
  </p:otherwise>
</p:choose>
...
<p:identity name="ident"/>
...

In this case, even though the p:when branch is never executed, the
p:choose will be executed after the step "ident" because there are pipe
bindings in the p:when branch. But I think you have a point that just
looking for p:pipe bindings in a V2 branch (with unknown steps) may not
be enough, because there may be other (and unknown to a V1 processor)
things than p:pipe that affect the dependency graph. From this
perspective, ignoring the branch is probably more consistent than saying
that V1 processors should check all pipe bindings in the V2 branch, but
ignore other constructs they do not understand.

Regards,
Vojtech

Received on Monday, 19 October 2009 06:19:41 UTC