Subject: RE: ($possibly-empty, $default)[1] idiom optimisation
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Wed, 24 Mar 2010 10:32:29 -0000
|
I think it's reasonable to assume that a half-decent processor, given an
expression like
(EXP)[1]
will stop evaluating the sequence EXP after the first item has been found.
So with
($possibly-empty, $default)[1]
the value of $default won't be computed unless it's needed.
Of course there might be other optimizations that interfere and cause the
evaluation to be done eagerly: for example in the case of (//equation)[1]
Saxon will actually build an index of all the equations in the document so
that subsequent evaluations of (//equation) are faster.
Regards,
Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay
> -----Original Message-----
> From: Andrew Welch [mailto:andrew.j.welch@xxxxxxxxx]
> Sent: 24 March 2010 10:21
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: ($possibly-empty, $default)[1] idiom optimisation
>
> Hi,
>
> This is often used as a nice way to avoid an if-then-else
> check to display $default if $possibly-empty is empty:
>
> ($possibly-empty, $default)[1]
>
> Out of interest, is it likely to be optimised to avoid
> evaluating $default if the first item is not empty, because
> if $default takes a reasonable amount of work to evaluate
> it's effectively wasted most of the time (if $default is
> rare). If it takes more work to evaluate $default than to
> test whether $possibly-empty is empty each time, then this is
> just a short cut rather than good practice.
>
> It reminds me of advice I heard (for Java) to wrap all log
> statements in an if test to check the log level first to
> avoid the unnecessary creation of the log message. For
> example, constructing a large message for a debug log by
> combining several different things, only for the constructed
> string to be discarded because the log level is info.
> (testing the log level a 1000 times is far better than
> creating and discarding 1000 strings)
>
>
> --
> Andrew Welch
> http://andrewjwelch.com
> Kernow: http://kernowforsaxon.sf.net/
|