On 12/7/11 Dec 7 -2:10 PM, Faré wrote:
> On Wed, Dec 7, 2011 at 14:55, Nikodemus Siivola
> <[email protected]> wrote:
>> I want to define a component class PORT-FILE, to be used like this:
>>
>> :components ((port-file "ccl" :when :ccl)
>>             (port-file "clisp" :when :clisp)
>>             (port-file "sbcl-x86" :when (and :sbcl :x86))
>>             ...)
>>
>> The implementation I have adds AROUND methods for
>>
>>  PERFORM (LOAD-OP PORT-FILE)
>>  PERFORM (LOAD-SOURCE-OP PORT-FILE)
>>  PERFORM (COMPILE-OP SOURCE-FILE)
>>
>> and does CALL-NEXT-METHOD only if the feature test passes -- which
>> seems to work well enough, but is there a better place to hook into?
>>
> That works indeed. I don't have any better option to offer,
> except maybe to make your featurization a mixin.
> Also if you rely on 2.018 or later, you can use asdf::featurep internally.
> You then need :and rather than cl:and, though.

Yes, this is a very readable approach for this.  The built-in
alternative is the (IMO) very horrible alternative of adding feature
dependencies, and doing the conditionalization by handling dependency
failures.  A simple :when is much more readable (again IMO).

If one was going to make featurization a mixin, one might want to modify
the syntax to :when-feature or something like that to make its meaning
even more clear to the reader.

Cheers,
r


_______________________________________________
asdf-devel mailing list
[email protected]
http://lists.common-lisp.net/cgi-bin/mailman/listinfo/asdf-devel

Reply via email to