Robert Goldman wrote:
On 10/15/10 Oct 15 -2:00 PM, Pascal J. Bourguignon wrote:
Robert Goldman rpgoldman@sift.info
I get it, but the value of such introspection seems, at the moment, primarily conjectural, but the bewilderment of :if-component-dep-fails is certain.
Not really.
For example, documentation generators use ASD files to as documentation root. It would be better if they could gather and document the various implementation specific parts without playing game with the lisp reader.
Agreed. But the number of systems that have such documentation generators are EXTREMELY limited.
There are a few documentation generators that grovel any asdf system by name. Example: declt http://www.lrde.epita.fr/~didier/software/lisp/misc.php
Regardless, tools like LibCL and Quicklisp could use this information for other reasons. For example, to load systems in the proper order, to download systems before compiling, to generate documentation including all possible dependencies, etc.
The uses are very real. I would like an interface that could cull things during the normal ops, but would "satisfy everything" during introspection ops. Maybe something like asdf:*all-conditions-pass*?
This would be much nicer than tricks like temporarily binding *features*.
There is also an obscure error potentially waiting for users of #+ and #-. As asdf reads system definitions, the reader won't expand features that will be set as systems load. If asdf then caches the definitions it has found...
Example: Start with two systems, X and Y, and a fresh lisp image. X depends on Y X.asd contains "#+Y-feature X-stuff" Y pushes :Y-feature to *features* while loading
(asdf:oos 'asdf:load-op :X)
Question: Was "X-stuff" read and executed? Does the result change if we load Y then X in two separate operations?
Special care would still be needed for the (:when x y) API, but it wouldn't require reinvoking the reader.
Later, Daniel