From ripley at stats.ox.ac.uk  Fri Dec 10 14:55:01 2004
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Fri Dec 10 14:55:11 2004
Subject: [Rd] Re: [R] Is  k  equivalent to  k:k ?
In-Reply-To: <16825.24334.69465.599617@gargle.gargle.HOWL>
References: <200412100137.iBA1bGMV054978@atlas.otago.ac.nz>
	<16825.24334.69465.599617@gargle.gargle.HOWL>
Message-ID: <Pine.LNX.4.61.0412100847560.17977@gannet.stats>

On Fri, 10 Dec 2004, Martin Maechler wrote:

> I'm diverting to R-devel,  where this is really more
> appropriate.
>
> In the future, we really might want to have a new type,
> some "long integer" or "index" which would be used both in R
> and C's R-API for indexing into large objects where 32-bit
> integers overflow.
> I assume, we will keep the    R "integer" == C "int" == 32-bit int
> forever, but need something with more bits rather sooner than later.
> But in any, case by then, some things might have to change in
> R (and C's R-API) storage type of indexing.

Indeed.  Assuming that seq() will always produce one type to pass to C 
code is dangerous.  Not so long ago someone asked why an R call had 
as.integer around a length, as ?length says the result is integer.
I replied that

1) This was liable to change and
2) Methods for generic functions were not forced to return the same thing 
as the documentation for the default method.

We are compelled to keep R "integer" == C "int" == Fortran "integer" as 
32-bit by backwards compatibility, as that is what all known 64-bit 
platforms do and hence what external libraries (notably libm/libc and 
Fortran support libraries) use.  This limits the length of R vectors to 
2^31-1, and that will start to bite fairly soon.  We do already have 
people using larger objects (as measured in bytes), and for example the 
return type of object.size got changed from int to double to accommodate 
such.  The C code has a type R_len_t that will eventually be used for
index and length computations, at least in C code.  The widespread use of 
Fortran for e.g. matrix computations limits what we can do.

Note that this was until recently only an issue for 64-bit operating 
systems, as the 32-bit OS 4Gb limit on a block of memory bites first 
except for raw vectors.

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


[Rd] Re: [R] Is k equivalent to k:k ?
Prof Brian Ripley