[m-dev.] Question about WAM style variables in Mercury

Ralph Becket rafe at cs.mu.OZ.AU
Thu Feb 5 14:39:01 AEDT 2004

Fergus Henderson, Thursday,  5 February 2004:
> On 05-Feb-2004, Ralph Becket <rafe at cs.mu.OZ.AU> wrote:
> > For adding Herbrand types to the language, it would be good if WAM style
> > variables didn't require heap allocation, but instead just formed direct
> > pointer chains.
> > 
> > However, this would mean having pointers to the interior of cells rather
> > than the start of a cell.
> How so?  Could you explain in more detail?

Consider this Mercury snippet:

	X = f(A, B),	% Construct f/2, A & B are unbound Herbrand vars.
	Y = g(C, D),	% Construct g/2, C & D are unbound Herbrand vars.
	A = D,		% Alias A and D.
	B = C		% Alias B and C.

The C code for the constructions using non-heap allocated WAM variables
could be something like

	X = <<construct f/2 cell>>;

	A = &X[0];	% ) Initialize A.
	*A = NULL;	% )

	B = &X[1];	% ) Initialize B.
	*B = NULL;	% )

	Y = <<construct g/2 cell>>;

	C = &X[0];	% ) Initialize C.
	*C = NULL;	% )

	D = &X[1];	% ) Initialize D.
	*D = NULL;	% )

then the unifications would be (assuming we have already dereferenced A,
B, C, D and decided they're each unbound),

	if(A != D) { *A = D; }	% Unify A with D.
	if(B != C) { *B = C; }	% Unify B with C.

The thing is that A, B, C and D at various times point into different
places of the interior of X and Y.

However, the whole thing already looks a tad complicated and, given that
what you've said about GC issues is as I suspected, I'll just use heap
allocated WAM variables.

-- Ralph
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au

More information about the developers mailing list