[M3devel] subranges 0..-1?

Tony Hosking hosking at cs.purdue.edu
Mon Oct 4 22:39:57 CEST 2010


How does the backend handle empty Pascal records?

On 4 Oct 2010, at 14:30, Jay K wrote:

> 
> So, I'm not supposed to worry about unsafe stuff..including if the backend and debugging information can  handle it? No.
> Unsafe code matters, a lot.
> 
>  - Jay
> 
> ----------------------------------------
>> To: jay.krell at cornell.edu
>> Date: Mon, 4 Oct 2010 11:12:08 -0700
>> From: mika at async.async.caltech.edu
>> CC: m3devel at elegosoft.com
>> Subject: Re: [M3devel] subranges 0..-1?
>> 
>> Jay K writes:
>>> 
>>> It worries me somewhat that we allow zero-sized types.
>>> Including TYPE Foo =3D RECORD END=3B
>>> It is reassuring to me that C and C++ doesn't have these.
>>> I don't want to think about what they mean.
>>> Do they make sense to others?
>> 
>> Yes, they make a lot of sense. Not having them means special-casing
>> any program that generates code. Obviously a correct program that generates
>> code including a zero-sized array will never generate an expression
>> that indexes such an array...
>> 
>>> 
>>> C requires a field. C++ adds a dummy one internally=2C that it can/must try
>>> to optimize away when inheritance is involved but still.
>>> 
>>> 
>>> C++ is interested in the property of pointers not being equal=2C like:
>>> 
>>> TYPE T1 =3D RECORD END=3B
>>> TYPE T2 =3D RECORD a=2Cb:T1 END=3B
>>> 
>>> VAR a:T1=3B
>>> ADR(a.b) # ADR(a.a.)=3B
>>> 
>>> But in Modula-3 they would have the same address.
>>> What does it mean to take the address of something that doesn't exist?
>>> Perhaps it isn't allowed?
>> 
>> This is UNSAFE code, so it means whatever the implementation makes
>> it mean, including (as far as I'm concerned) a compiler crash, if
>> that is the easiest thing you can make it mean. I really wouldn't
>> worry about the UNSAFE parts of Modula-3 that much... expected to be
>> implementation-dependent. Although I admit it would be better to have
>> it do something meaningless in this case. Since T1 is an empty type
>> there's not much you can do with the address anyhow.
>> 
>> Mika
> 		 	   		  




More information about the M3devel mailing list