Re: Comments on the File Module

On 09/12/2013 21:42, Christian Grün wrote:
>>>> let $a := file:append-text('foo.txt', ' cat')
>>>> let $b := file:append-text('foo.txt', 'fish')
>> I'm not sure what you mean by function order - and I think that's my point.  XQuery doesn't define an order of evaluation.
> Pardon my broken English. By function order, I meant to say that '
> cat' must be appended to the file 'foo.txt' before 'fish'.

I didn't mean to suggest it was your English (which is superb), I was 
just making the point that function order isn't something that has been 
defined.  When reading a program, the programmer is conditioned to 
perceive an order based on the usual left-to-right, top-to-bottom order 
of languages such as C (or even ML), but anyone who's looked at the 
execution plan that comes out of an XQuery processor knows that the 
order may not be preserved.

>
> I guess we are talking about a similar thing: On the one hand, the
> current version of XQuery provides no means to enforce evaluation
> order. On the other hand, varioous XQuery processors are available
> that provide an implementation of the File Module, or other
> side-effecting modules, and that assume that code (may it be
> ·nondeterministic· or ·side-effecting·) is evaluated in the order in
> which it's specified in the query (as part of a FLWOR expression, as
> multiple expressions separated by commas, or any other way). How can
> we resolve this discrepancy?

The stalled XQuery Scripting Extensions proposed an order of evaluation, 
so that's one approach;
the monadic approach of Haskell is my personal favourite; then there's 
the "programmer beware" approach of hoping that the processor doesn't 
reorder expressions.

The foolhardy programmer might write

|<xsl:attribute
*name* = "{ (file:append( ...), 'foo') }"
   namespace? = "{ (file:append ( ...), 'urn:something') }
   select? = "{ (file:append (...), 'red') }"
   on-empty? = "{ (file:append (...), 'empty') }"  />|

Either it has to be clear that all bets are off, or an order of 
evaluation has to be defined.

Cheers,
     Tim

Received on Tuesday, 10 December 2013 09:43:19 UTC