[asdf-devel] Two questions and note about the ASDF manual

Robert Goldman rpgoldman at sift.info
Wed Sep 30 13:30:24 UTC 2009


In version 1.366 I see the following:

(do-dep (op dep)
               (cond ((eq op 'feature)
                      (or (member (car dep) *features*)
                          (error 'missing-dependency
                                 :required-by c
                                 :requires (car dep))))
                     (t
                      (dolist (d dep)
                        (cond ((consp d)
			       (cond ((string-equal
				       (symbol-name (first d))
				       "VERSION")
				      (appendf
				       forced
				       (do-one-dep op (second d) (third d))))
				     ((and (string-equal
					    (symbol-name (first d))
					    "FEATURE")
					   (find (second d) *features*
						 :test 'string-equal))
				      (appendf
				       forced
				       (do-one-dep op (second d) (third d))))
				     (t
				      (error "Bad dependency ~a.  Dependencies must be (:version
<version>), (:feature <feature>), or a name" d))))
                              (t
                               (appendf forced (do-one-dep op d nil))))))))

I really wish there was a comment here, since I don't know why there are
two branches that seem to handle feature, and that handle it differently
(why does the former just eq match and the latter do the more careful
string-equal testing?).

Looks like there might be two ways that :feature is trying to be handled
--- one where it's (feature <feat>) and one where it's (feature <feat>
<dep>).

Alas, the manual does not seem to clarify this.  This, I think is a
problem with the manual's design.  In the discussion of DEFSYSTEM we
have two example pages, and then we have the grammar.  The grammar
specifies the /syntax/ of defsystem, but there really isn't any way to
specify the /semantics/ of bits of defsystem.  Note that the operations
(object model) bit of the manual does /not/ serve this purpose.  It
would be OK for us to specify the semantics in terms of those
operations, but we do not do so.  If we were to do so we would need to
add a section that bridges from the syntax to the object model by
specifying how the syntax gets rewritten into the object model.

I would not favor defining the semantics in terms of the object model,
although this would be a principled thing to do.  I believe that ASDF
users should be able to use ASDF at some limited level without having to
fully understand the object model.

Proposal:  In my copious free time, I will work to add a page to the
manual that comes /after/ the defsystem grammar and that describes the
semantics of the defsystem form.  Please jump in and object now if you
think that this would be A Bad Idea, as I'd rather not waste my time if
the community thinks this would not be worth doing.

Best,
Robert




More information about the asdf-devel mailing list