[erlang-questions] Abstract patterns, structs and frames

Richard O'Keefe <>
Tue Feb 24 01:22:57 CET 2009


On 24 Feb 2009, at 12:31 am, Richard Andrews wrote:

>> Yes, it means that both Abstract Patterns and (Frames or Structs)
>> might be implemented.
>
> As best I can understand - after reading the papers by Richard  
> O'Keef and Joe Armstrong - structs and frames are trying to solve  
> pretty much the same problem and the main distinction appears to be  
> that structs are named/tagged while frames are defined only by their  
> content.

Actually, tags are _optional_ in the frames proposal.
<Tag{ K1=E1, ..., Kn=En }>
is allowed, and is equivalent to <{'' = Tag, K1=E1, ..., Kn=En }>

> I don't see a need for the tag (ie. struct) and I think it might be  
> a problem in some cases.

Having tried to convert some large chunks of Erlang from records
to frames, I can say that it really helps a lot having a place to
put the record name.  And when you have a function with two or
more frame arguments, it can help you keep track of which is which.

I'm not yet convinced that tags are _essential_, but they are
definitely too useful to forbid.

> What situations can people see where the struct tag is better than  
> say, tag=someTagAtom in a frame?

It ensures that everyone uses the _same_ name for the tag field
(namely ''), it ensures that the name is an atom ('' should be
forbidden as a field name), it provides a hook for pretty-printers &c,
it increases readability.

The frames proposal and the struct proposal are essentially the same
thing.  There are minor differences of syntax, and I've listed a lot
more BIFs that should be provided, but nobody should think that there
are two rival proposals, just two independent drafts of the same
proposal.

>




More information about the erlang-questions mailing list