[m-dev.] tabling, trailing and impure references

Fergus Henderson fjh at cs.mu.OZ.AU
Mon Aug 4 14:05:51 AEST 2003

On 04-Aug-2003, David Overton <dmo at cs.mu.OZ.AU> wrote:
> I have a few questions about the implementation of tabling.  We are
> wondering whether it is possible to implement global variables (for HAL)
> using reference.m / nb_reference.m and tabling.
> Question 1:	How reliable is this approach?  Does the
> 		`:- pragma memo' guarantee that my_ref will
> 		always return the same reference?

In the current implementation, yes.

In the long term, we might do something a bit more clever with regard
to garbage collection of memo tables.  However, if we do ever do
that, I think we should provide something which keeps the old behaviour,
at least for the zero-arity case.  So I think it would be reasonable
for you to rely on it.  I think at worst you might at some point in
the future have to change the pragma name from "pragma memo" to
something else.

> Question 2:	The reference manual says: "if you enable the use of
> 		trailing ... then any use of tabling will result in a
> 		"Sorry, not implemented" error at runtime."
> 		I get no such error from the above example in grade
> 		asm_fast.gc.tr.  Does this mean the reference manual is
> 		out of date, or have I just been lucky?

I think the reference manual may be incorrect and/or out of date.

I think that only applies to minimal model (and/or model_non) tabling.

The "sorry, not implemented" error which is referred to in the
documentation was in library/private_builtin.m, in the code
for table_resume/1:

 | #ifdef MR_USE_TRAIL
 |        /*
 |        ** We ought to save the trail state here --
 |        ** this is not yet implemented.
 |        */
 |        fatal_error(""Sorry, not implemented: ""
 |                ""can't have both tabling and trailing"");
 | #endif

But this code was deleted in revision 1.19:
 | revision 1.19
 | date: 1999/04/20 11:48:01;  author: zs;  state: Exp;  lines: +841 -1155
 | Estimated hours taken: 130
 | Rewrite significant parts of minimal model tabling so that it works
 | in a much wider variety of situations, including coups. Also, clean up
 | the tabling implementation to make it more maintainable, and introduce
 | a new grade component, .mm, that enables minimal model tabling.
 | ...

Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
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