:FEATURE dependency-def

Faré fare at tunes.org
Tue May 17 13:39:57 UTC 2016


On Mon, May 16, 2016 at 5:56 PM, Robert Goldman <rpgoldman at sift.net> wrote:
> On 5/16/16 May 16 -4:36 PM, Faré wrote:
>> On Mon, May 16, 2016 at 3:35 PM, Robert Goldman <rpgoldman at sift.net> wrote:
>> There were two :FEATURE features. One was braindead and I removed it
>> in ASDF3, because it was badly breaking the object model.
> Right.  I believe that's the one documented as "feature requirement."
Indeed.

> Some of this is a problem that arises because we don't have a DEFSYSTEM
> *Semantics* section, only a DEFSYSTEM *grammar*.

Yes.

> OK.  I will try to add a subsection about the semantics to the defsystem
> grammar page (per my earlier remarks, not ideal, but I'm not ready to
> plunge into the end-to-end rewrite and reorg that the manual requires!).
>
I won't cast the first stone.

>>> If the semantics is intended to be the latter -- and that's how I read
>>> the relevant code in find-component.lisp -- how does a programmer say
>>> "if this feature is not present, my system should not compile"?
>>>
>> (:feature (:not :foocl) "something_that_fails")
>
> Would it be possible for us to either add something that fails as
>
> (:feature (:not :foocl) :fail)
>
This should already fail... if there's no system or component named fail.

> or perhaps better (the above smells uncomfortably like
> :IF-COMPONENT-DEP-FAILS):
>
> (:required-feature <feature-expression>)
>
> "require" is, perhaps unfortunately, a term of art for CL so perhaps
>
> (:must-have-feature <feature-expression>)
>
> would be better....
>
The traditional solution was to fail at compile-time and/or load-time with a
#-(or clozure sbcl) (error "not supported implementation")

That's what asdf itself does, btw.

I recommend against failing while loading the .asd file, because that
will break cross-compilation in the future (and/or on MOCL, which
already does it with a gross hack).

> One more query while I have you on the line:
>
> the grammar still contains this rule:
>
>      component-dep-fail-option := :fail | :try-next | :ignore
>
> The LHS of that rule is never referenced, so I propose to cut it.
>
Yes, that was part of the :if-component-dep-fail misfeature that I
removed in ASDF3.

—♯ƒ • François-René ÐVB Rideau •Reflection&Cybernethics• http://fare.tunes.org
Beware of altruism. It is based on self-deception, the root of all evil.
       — Robert Heinlein, "Time Enough For Love"



More information about the asdf-devel mailing list