W3C home > Mailing lists > Public > www-ql@w3.org > April to June 2003

RE: types of numeric literals and operators

From: Bas de Bakker <bas@x-hive.com>
Date: Mon, 23 Jun 2003 16:34:40 +0200
Message-ID: <41D11F414A26E942912B7E7696DC8E22155AE3@JAKARTA.xhive.archipel>
To: <www-ql@w3.org>

I agree.  In fact, almost two years ago I submitted a public comment

2. "permits lightweight operations wherever possible".  I don't agree.
Due to the type of literals and arithmetic operator results, almost all
integer values will have type xs:integer and have to be treated
internally as "big integers" (unlimited range) as the implementation
cannot be sure of their values.  Even if the user casts all results to
xs:int explicitly, the implementation has to check for overflow on all
arithmetic operations.  Compiling to code that simply uses machine ints
that wrap around on overflow (like Java, most C implementations, etc do)
is not possible.  I suggest giving literals like [0-9]* type xs:int and
defining arithmetic on long, int, short, byte as in Java.

This comment was ignored completely.  Perhaps someone should submit a
comment along these lines as a last-call comment to the F&O draft.  The
phrase about lightweight operations is still there at the start of
section 6.


Bas de Bakker
X-Hive Corporation

> -----Original Message-----
> From: www-ql-request@w3.org [mailto:www-ql-request@w3.org]On Behalf Of
> Xavier C. FRANC
> Sent: Saturday, June 21, 2003 00:28
> To: www-ql@w3.org
> Subject: types of numeric literals and operators
> The draft states (3.1.1) that an integer literal like 1 has
> the type xs:integer, not xs:int, even if it is
> in the value range of int.
> Therefore an expression as simple as 1+1 should be resolved
> by the static type checking as an invocation of:
>     op:add( x as xs:integer, y as xs:integer ) as xs:integer
> Since xs:integer is of arbitrary precision, its
> implementation is likely to be heavy, and this would probably
> lead to an inefficient implementation.
> Moreover, an error should be detected in this apparently
> innocent code (because 1 is of type xs:integer):
>    define function funny( $x as xs:int ) as xs:int { $x + 1 }
> * suggestions:
>    1) specify that an integer literal has a minimal type (derived from
>       integer) that fits with its value (for example 10 would be int,
>       10000000000 would be long)
>    2) provide overloaded numeric operators on usual types implemented
>       by hardware, in order to have naturally optimized 
> implementations.
>       for example:
>       op:add( x as xs:int, y as xs:int ) as xs:int
>       op:add( x as xs:long, y as xs:long ) as xs:long
> -- 
> Xavier C. FRANC
Received on Monday, 23 June 2003 10:34:47 UTC

This archive was generated by hypermail 2.4.0 : Friday, 17 January 2020 22:43:42 UTC