one should have the right to expect that for each n the computation is
performed
once, and if a template is called with the same value of 'n' repeatedly, it
does not
spend time on computing doctitle again.
The system doesn't have to re-calculate; it could cache the values so if
it sees the same n again, simply re-use it.
That's clear and obvious. What kinds of expressions and when are 'cached' in
each
of the available processors?
Since such 'caching' changes computation complexity, what features should
expressions
possess to be safely used in this way?
For example, for each node in a sequence, will computing
following-sibling::*[name()=name(following-sibling::*[1])][2]
take twice more time than
following-sibling::*[name()=name(following-sibling::*[1])][1]? Or will it take
almost
the same time? What about 200 and 100 instead of 2 and 1?
Results are different with different processors, with constant time in the best
case,
quadratic time in the worst one.
- Is the same time a feature of the language or a clever optimization?
- Can I rely on constant time for this expression in my stylesheets? What if in
a later
version of the same processor this optimization will be dropped due to other
concerns?
Stylesheets can be long and sophisticated. If it becomes too slow, is it a bug
in the algorithm
or in the processor?
David Tolpin
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list