RE: [xsl] ($possibly-empty, $default)[1] idiom optimisation

Subject: RE: [xsl] ($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: [xsl] ($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/

Current Thread