[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Dumping data structures with circular references.
Date: Thu, 2 Nov 89 16:26:13 EST
From: gavan@cmx.npac.syr.edu (Gavan Duffy)
From: "RDP%ALAN.LAAC-AI.Dialnet.Symbolics.COM %ALAN.kahuna.DECNET.LOCKHEED.COM"@warbucks.ai.sri.com
Date: Thu, 2 Nov 89 13:05:36 CST
I'd like to know what people do in general to avoid the "circular
reference" problem when using SYS:DUMP-FORMS-TO-FILE. I would guess
that this must have been solved many times but the documentation doesn't
seem to have anything to say about it.
IWBNI someone could devise a more general solution so we wouldn't have
to worry about it.
ANSI Common Lisp specifies a general solution to this, the MAKE-LOAD-FORM
generic function. Briefly,
Define a new generic function named MAKE-LOAD-FORM, which takes one
argument and returns two values. The argument is an object that is
referenced as a constant or as a self-evaluating form in a file being
compiled by COMPILE-FILE. The objective is to enable LOAD to
construct an equivalent object.
The first value, called the "creation form," is a form that, when
evaluated at load time, should return an object that is equivalent to
the argument.
The second value, called the "initialization form," is a form that,
when evaluated at load time, should perform further initialization of
the object. The value returned by the initialization form is ignored.
The creation form for an object is always evaluated before the
initialization form for that object. When either the creation form or
the initialization form references other objects of user-defined types
that have not been referenced earlier in the COMPILE-FILE, the
compiler collects all of the creation and initialization forms.
Separating the operation into two forms, unlike :FASD-FORM, makes it
possible to deal with circular structures, since the loader can first
evaluate all the creation forms to create the objects then evaluate all
the initialization forms to fill in the inter-object references.
You should let Symbolics know whether you want this implemented in
Genera 8.0, whether you want it for both Flavors and CLOS or only for
CLOS, and how high you rate its importance. Be specific, mention some
other feature that you would be willing to sacrifice in order to get
this one. Genera 8.0 is just about to go into beta test, so this is
the time to get your final input in.
Your input can help us a lot when making decisions on where to put our
resources, and whether to develop new features or improve the quality
of old features.