Re: anonymous record types in variants

From: Pierre Weis (Pierre.Weis@inria.fr)
Date: Mon Feb 22 1999 - 18:56:21 MET


From: Pierre Weis <Pierre.Weis@inria.fr>
Message-Id: <199902221756.SAA09662@pauillac.inria.fr>
Subject: Re: anonymous record types in variants
To: maf@microsoft.com (Manuel Fahndrich)
Date: Mon, 22 Feb 1999 18:56:21 +0100 (MET)
In-Reply-To: <25983782061AD111B0800000F86310FE1026CB26@RED-MSG-42> from "Manuel Fahndrich" at Feb 22, 99 08:37:35 am

> I don't agree with Anton. The reason I want variants with anonymous record
> arguments is to name the fields explicitly. I don't want to incur a runtime
> cost of an extra indirection. The compilation of named fields vs. tuples
> would be the same. That's why a construction like
>
> > match x with A r -> ... r.x ... r.y ...
>
> would not be desirable, since it requires the record r to be stored as a
> separate block from the A r value. If you restrict record access for these
> anonymous records as Xavier pointed out
>
> > match x with A{lbl1 = x; lbl2 = y} -> ...
>
>
> then you can implement them as efficiently as a variant with a tuple
> argument.
>
> -Manuel

An even better scheme would be to allow access to the fields with the
dot notation, considering that a value of type

type t = A of {labl1 : int; labl2 : bool}

is in fact a tuple with named field tagged with A (the treatment is
completely similar to constructors with tuple arguments, and as the
value A (..., ...) cannot be pattern matched to extract the tuple,
then A {...} could not be pattern matched to extract the record).

Then

match expr with A {lbl1 = _; lbl2 = _} as x -> x.lbl1 ... x.lbl2

is conceivable (easy to compile, not too difficult to type check).

Moreover, this could be easily extended to mutable labels, using the
usual syntax: if t is defined as

type t = A of {mutable labl1 : int; mutable labl2 : bool}

we could write

match expr with
 A {lbl1 = _; lbl2 = _} as x ->
   x.lbl1 <- x.lbl1 + 1 ... x.lbl2 <- not x.lbl2

I think this is not too difficult to understand (given the simliarity
with the actual semantics of constructors in Objective Caml) and not
too difficult to implement. Last but not least, it does not require
any extra syntax!

Pierre Weis

INRIA, Projet Cristal, Pierre.Weis@inria.fr, http://cristal.inria.fr/~weis/



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:20 MET