[M3devel] The role INTEGER and subranges in Modula-3
Rodney M. Bates
rodney_bates at lcwb.coop
Sun May 31 22:14:09 CEST 2015
On 05/30/2015 11:33 AM, Elmar Stellnberger wrote:
> Am 30.05.15 um 17:13 schrieb Rodney M. Bates:
>> There are no implicit type conversions. Instead, this need is met by
>> the concept of assignability. If the abstract value is in a
>> variable's range, it can be assigned to the variable. Size changes,
>> if needed, are the code generator's problem.
> So what does the code generator do if there is an overflow not checked
> by the predefined value range (i.e. BITS 8 FOR INTEGER instead of
> BITS 8 for [0..255])
BITS 8 FOR INTEGER will not compile. It is statically illegal, because
the asked-for bit size is not enough to hold the value range of the type INTEGER.
(Unless the compiler is configured with FIRST(INTEGER) = -128 and
LAST(INTEGER) = 127, as might be done for an 8-bit microprocessor.)
>> All this drastically simplifies the language, while also allowing the ...
> Yes, I understand your decision.
>> likely to be commonly needed, LONGINT would have no place. But native
>> sized arithmetic is always the most efficient. In today's world,
>> there are two very common classes of use cases: 1) 32-bit arithmetic is wide enough, 2) 32-bit is not wide enough, but 64-bit is. In both
>> cases, on machines of either native arithmetic size, we want the best
>> efficiency. LONGINT is for case 2, and when you further need to be
>> able to run on either size of machine. INTEGER is for otherwise.
> Well, that was exactly my argument for a language specified type
> size of INTEGER, because things do not get faster if you use 64bit
> integers instead of 32bit integers. CPU arithmetics perhaps but the
> real bottleneck of today is the memory hierarchy - and using 64bit
> integers doubles our memory need at least for scalars.
>>
>> Whether you believe in LONGINT or not, there is certainly no
>> justification for more base integer types than two: one the native
>> size of the machine and one bigger.
> Yes, we really don`t need them as anything becomes 64bit or the native
> word size respectively on the stack (that is why Ctypes.int works).
> Memory latency should be a minor issue as long as our parameters and
> parts of the activation records fit into the cache.
>
>
>
>
--
Rodney Bates
rodney.m.bates at acm.org
More information about the M3devel
mailing list