[M3devel] LONGINT
Tony Hosking
hosking at cs.purdue.edu
Wed Aug 8 00:07:08 CEST 2007
I allow LONGINT indexed arrays, so long as the element offset can be
computed as an integer. The size restriction on arrays remains.
NUMBER always returns a CARDINAL. Thus, NUMBER(LONGINT) gives a
range violation, just as NUMBER(INTEGER) currently does. However,
NUMBER([10L .. 20L]) = NUMBER([10..20]) = 11.
On Jul 19, 2007, at 6:02 PM, Darko wrote:
> I think in 64 bit land you get a variety of combinations and
> possibly the most common is a 32 bit address space with 64 bit
> integers, since applications seldom need to operate in the larger
> address space. But I would think it you wouldn't allocate an object
> bigger than 2^32 bytes anyway, and unsafe pointer arithmetic would
> be more likely.
>
> The only situation where I can think of where this is an issue is
> using a long integer index in an array of integer proportions, you
> could handle this using arithmetic, also illustrates where you'd
> need an implicit conversion:
>
> CONST
> start = 2^63-500;
> end = 2^63-200;
> VAR
> a: ARRAY[0..start-end+1] OF CHAR;
> BEGIN
> FOR i := start TO end DO a[INT(i-start)] := 'x' END;
>
>
> Or you could rule that all arrays are of INTEGER size, but may have
> a LONGINT index. Open arrays would always be integers. This would
> probably be messy to implement and NUMBER would have a different
> base to FIRST and LAST. That doesn't sound very good.
>
>
>
> On 19/07/2007, at 11:33 PM, Rodney M. Bates wrote:
>
>>
>>
>> Randy Coleburn wrote:
>>> Tony:
>>> I'd like to better understand the implications of your change as
>>> I do use LONGINT as an index in some applications.
>>
>> Do you have arrays that need 64-bit subscripts on a 32-bit machine?
>>
>> Allow me the common assumption that both integers and addresses have
>> the native word size on most machines. In this case, most arrays
>> that
>> need 64-bit subscripts would exceed the virtual address space of the
>> machine. Exceptions would require elements of size at most a byte,
>> and overall sizes in excess of half the virtual address space. Even
>> PACKED ARRAY [..] OF BITS 1 FOR BOOLEAN would need to use 1/8 the
>> virtual space before 32-bit subscripts ran out. All this seems
>> pretty
>> unlikely.
>>
>> I would favor keeping INTEGER as the type of open array subscripts
>> and not allowing LONGINT to be a fixed array subscript type. It
>> saves a whole lot of language complexity, and doesn't disallow much.
>>
>> If it really mattered, you could still use unsafe techniques for
>> such memory-hogging arrays. This might be a reason to extend unsafe
>> arithmetic on ADDRESS to accept LONGINT second operands. This is
>> actually consistent with the rest of the operator generalizations.
>>>
>>
>> --
>> -------------------------------------------------------------
>> Rodney M. Bates, retired assistant professor
>> Dept. of Computer Science, Wichita State University
>> Wichita, KS 67260-0083
>> 316-978-3922
>> rodney.bates at wichita.edu
More information about the M3devel
mailing list