[M3devel] INTEGER
Tony Hosking
hosking at cs.purdue.edu
Sun Apr 18 04:46:17 CEST 2010
On 17 Apr 2010, at 22:40, Tony Hosking wrote:
>
> On 17 Apr 2010, at 22:35, Mika Nystrom wrote:
>
>> Ok, sorry if I am beating a dead horse here.
>>
>> What is INTEGER on a 64-bit machine?
>
> The language spec doesn't say, but CM3 pretty strongly assumes BITSIZE(INTEGER)=BITSIZE(ADDRESS).
> So, that means 64 bits.
>
>> Modula-3 doesn't specify it to be one or the other does it?
>> But normally, 64 bits?
>>
>> I am asking because I was looking through some stub generator code,
>> and I'm really wondering about the LONGINT. Now there are "longcard"
>> things showing up, which means another set of changes to a lot of code.
>>
>> The rationale for LONGINT is, again?
>
> Yes, LONGINT is to permit longer than "efficient" INTEGER. Mainly for 32 bit machines where we'd like to have a C "long long" equivalent.
>
>> We need it to match 64-bit integers on 32-bit machines? That seems like
>> a very weak rationale indeed, if the same functionality could be provided
>> through some other mechanism (e.g., ARRAY [0..1] OF INTEGER---even with
>> a pragma e.g. <*CLONGLONG*>.. if it is necessary to tell the compiler that
>> a special linkage convention is needed).
>
> There's no special linkage convention. Not sure what you mean here.
>
>> On a 64-bit machine INTEGER and CARDINAL are 64/63 bits (right?), so
>> there is really no need for LONGINT there.
>
> True. The only expectation is BITSIZE(LONGINT) >= BITSIZE(INTEGER).
>
>> And having an array with a LONGINT index seems silly since you can't
>> address more memory than you can fit in an INTEGER anyhow...
>
> We don't allow arrays with LONGINT indexes in the current implementation.
Correction. We do allow arrays with LONGINT subrange indexes, but the restriction is that NUMBER be representable as an INTEGER.
>
>>
>> Mika
>>
>>> ________________________________
>>> From: hosking at cs.purdue.edu
>>> Date: Thu, 15 Apr 2010 12:55:52 -0400
>>> To: jay.krell at cornell.edu
>>> CC: m3devel at elegosoft.com
>>> Subject: Re: [M3devel] Modula-3/C interop in Date/Time?
>>> Excepting that INTEGER is not the same as int on 64-bit platforms.
>>>
>>> Antony Hosking | Associate Professor | Computer Science | Purdue University
>>> 305 N. University Street | West Lafayette | IN 47907 | USA
>>> Office +1 765 494 6001 | Mobile +1 765 427 5484
>>>
>>>
>>>
>>>
>>> On 15 Apr 2010, at 02:45, Jay K wrote:
>>>
>>> Is this legal/correct?
>>>
>>>
>>> Date.i3:
>>> TYPE TimeZone <: REFANY;
>>> VAR Local, UTC: TimeZone; (* granted, will maybe change these to extern *)
>>>
>>>
>>> Date.m3:=1B$B!!=1B(B
>>> REVEAL TimeZone =3D BRANDED "Date.TimeZone" REF INTEGER;
>>> =1B$B!!=1B(B
>>>
>>> DatePosixC.c:
>>> static const int Local =3D 0;
>>> static const int UTC =3D 1;
>>> extern const int const * const Date__Local =3D &Local;
>>> extern const int const * const Date__UTC =3D &UTC;
>>> =1B$B!!=1B(B
>>>
>>> - Jay
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20100417/02effe54/attachment-0002.html>
More information about the M3devel
mailing list