[M3devel] Resummary of tagged reference proposals

Tony Hosking hosking at cs.purdue.edu
Tue Jun 2 12:51:31 CEST 2009


Union types are anathema to the design of the Modula-3 type system.

On 2 Jun 2009, at 20:31, hendrik at topoi.pooq.com wrote:

> On Tue, Jun 02, 2009 at 10:04:37AM +1000, Tony Hosking wrote:
>> The compiler and run-time support is already in the CVS head.
>>
>> On 1 Jun 2009, at 22:21, Darko wrote:
>>
>>> This is a great little hack. Is it available now or are you still
>>> working on it? I don't know what other people want to use it for but
>>> this is a great way to link memory structures with external data. It
>>> overcomes one of the downsides of GC compared to say C, where you
>>> can use pointer values for other purposes, but it does it safely.
>>>
>>> Also I'd like to add my voice for the minimalist approach where no
>>> language changes are made. I don't think there is a semantically
>>> clean way of incorporating this into the language  and I'm not sure
>>> there is any payoff in doing so.
>
> I think there is a semantically clean way of incorporating it into the
> language, but it's not a trivial change.  It becomes an optimisable
> special case of a more general feature -- for any bunch of types A, B,
> C, ... you introduce a type UNION(A, B, C, ...).  There's nothing you
> can do with a union except build it from an A, B, or C ..., copy it,  
> and
> test its type and extract the contents -- more or less what you can do
> to one of our type-tagged values.  These unions have a fixed size  
> (more
> or less the max of the sizes of A, B, C, ... and an extra type-tag.
> (I don't know if there has to be a restriction on using open arrays
> here; I hole not.)
>
> In the special case of UNION(A, B), where B is a suitable subrange if
> INTEGER and A is a pointer-to-object, the compiler could choose to
> implement this with our low-bit-and-shift hack.
>
> -- hendrik




More information about the M3devel mailing list