[M3devel] [Fwd: Re: A nonnative 64-bit language proposal]

Darko darko at darko.org
Fri Jul 20 04:49:08 CEST 2007

On the other side of the ledger, the fact that the following  
overflows is pretty unpleasant:

CONST big = 2^32-1;
BEGIN i := big * big;

On 19/07/2007, at 11:35 PM, Darko wrote:

> I agree with you and I strongly agree with Tony's approach to the  
> implementation where the two integer types are not subtypes.
> The VAL usage would be a bit finicky given how often this would be  
> done in practice, something more concise (like INT and LONG) would  
> be better.
> On 19/07/2007, at 11:20 PM, Rodney M. Bates wrote:
>> In my original 64-bit proposal, I made INTEGER # LONGINT, and also  
>> the two
>> types have no subtype relation (which, I think is what Antony is  
>> saying).
>> It avoids having a lot of things happen implicitly from other  
>> rules in the
>> language.
>> But then I added a separate rule that these two types and their  
>> subranges
>> are mutually assignable, subject to the existing assignability  
>> rules that
>> now apply to a type and its subranges. Namely the RHS value must  
>> be in the
>> range of the of the LHS type, which sometimes has to be checked at  
>> runtime.
>> This allows assignment without explicit conversion, as well as  
>> many other
>> things, for example, VALUE parameter passing, that require  
>> assignability.
>> This is consistent with the existing rules for assignments involving
>> different subranges.
>> For explicit conversions (which are probably needed somewhere anyway,
>> even if not in assignments), VAL(v,LONGINT) and VAL(v,INTEGER) fit
>> the existing language well.  For consistency, it seems good to allow
>> ORD(LongIntArg), which is an alternative conversion in one direction.
>> It may seem unnecessary, but it's not as useless as ORD(IntegerArg),
>> which we already have.  Actually, these extensions of VAL and ORD
>> fall out of the existing definitions, when LONGINT is an ordinal  
>> type.
>> Darko wrote:
>>> I actually favour a implicit conversion, which for this  
>>> particular  case I think would be consistent with existing M3  
>>> behaviour.
>>> On 19/07/2007, at 10:26 PM, Tony Hosking wrote:
>>>> This is a good question.  I would assume that conversion must  
>>>> be  explicit to fit with the M3 philosophy.  It would make sense  
>>>> to  have a conversion operation that performs the appropriate  
>>>> range  check?  Any ideas for a name for the operation.
>>>> On Jul 19, 2007, at 4:23 PM, Darko wrote:
>>>>> Have I missed something or is there no way to assign between   
>>>>> INTEGER and LONGINT? Is there an explicit conversion function  
>>>>> that  I've overlooked? Would assignment be so bad here since  
>>>>> there would  be an implicit range check, much like when you  
>>>>> assign between two  overlapping subranges? In a sense these two  
>>>>> types are integer  subranges of an abstract integer type  
>>>>> containing all integers.
>> -- 
>> -------------------------------------------------------------
>> 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