Re: [Bug 10848] [XQuery11] Statically detecting errors in try/catch and conditional expressions

On 07/12/2010 22:22, bugzilla@jessica.w3.org wrote:
> http://www.w3.org/Bugs/Public/show_bug.cgi?id=10848
>
> --- Comment #4 from Jonathan Robie<jonathan.robie@redhat.com>  2010-12-07 22:22:22 UTC ---
> The f2f minutes from Lyon indicate this bug was closed:
>
> http://lists.w3.org/Archives/Member/w3c-xsl-query/2010Nov/0006.html
>
> However, it is not closed, and I am not certain how it was resolved. Can
> someone please record their interpretation of the minutes here, so it's clear
> what the intended resolution was?
>
Rightly or wrongly, the bug was closed with the decisions recorded in 
the minutes, quoted below:

DECISION: change "an expression" to "Query Body" in XQuery 2.3.1:
      "Independently of whether the Static Typing Feature is in effect, 
if an
      implementation can determine during the static analysis phase that the
      evaluation of the QueryBody would necessarily raise a type error or a
      dynamic error, the implementation may (but is not required to)
report that
      error during the static analysis phase. However, the fn:error()
function
      must not be evaluated during the static analysis phase."
      Close http://www.w3.org/Bugs/Public/show_bug.cgi?id=10848
      This does not close
      http://www.w3.org/Bugs/Public/show_bug.cgi?id=11171

This text was further refined by the following decision:

DECISION: Change text in 2.3.1:
    Independently of whether the Static Typing Feature is in effect, if
an implementation can determine during the static analysis phase that an
expression, if evaluated, would necessarily raise a type error or a
dynamic error, the implementation may (but is not required to) report
that error during the static analysis phase.
    - to -
    Independently of whether the Static Typing Feature is in effect, if
an implementation can determine during the static analysis phase that a
query body, if evaluated, would necessarily raise a dynamic error or an
expression, if evaluated, would necessarily raise a type error, the
implementation may (but is not required to) report that error during the
static analysis phase.

DECISION: Remove the sentence "However, the fn:error() function must not
be evaluated during the static analysis phase." from 2.1.3, and add a
note to illustrate the differences introduced by the first sentence.

The change from "Query Body" to "expression" was considered sufficient 
to ensure that dynamic errors could only be reported early if they would 
necessarily occur while evaluating the query body (that is, the 
query-as-a-whole), as distinct from doing early evaluation of some 
subexpression within a function that might never be evaluated in real life.

I'm sure someone pointed out that this textual change needed adaptation 
for XPath, where "Query Body" needs replacing by "top-level expression" 
or somesuch, but that ramification was apparently missed by the 
minute-taker.

Personally, I remain of the view that we should avoid temporal words 
like "during" that suggest the static analysis and dynamic evaluation 
phases cannot overlap in time. I would prefer a model where the static 
analysis task only does static analysis, and the dynamic evaluation task 
only does dynamic evaluation, but where dynamic evaluation is allowed to 
start before static analysis finishes - that is, there is a functional 
dependency between them, but no temporal dependency. I think that 
approach would greatly simplify the exposition, as well as better 
reflecting the architecture of implementations that do just-in-time 
compilation.

Michael Kay
Saxonica

Received on Wednesday, 8 December 2010 14:52:59 UTC