ASDF Best Practices

Faré fahree at gmail.com
Sat Apr 1 06:33:38 UTC 2017


On Sat, Apr 1, 2017 at 1:54 AM, Mark Evenson <evenson at panix.com> wrote:
> On 4/1/17 06:27, Faré wrote:
>> I've started an ASDF Best Practices document as a response to all the
>> ugly stuff I saw while debugging backward incompatibilities introduced
>> by ASDF 3.3. It is currently in my plan branch:
>>
>> https://gitlab.common-lisp.net/asdf/asdf/blob/plan/doc/best_practices.md
>
> Very cool, and a needed resource to get some idea of the state of Faré's
> brain.
>
> One thing I learned from reading this document is that my use of symbols
> to name and refer to ASDF systems is probably wrong, as it contradicts
> the best practice of using strings for system identity.  I like using
> symbols because
>
> (asdf:defsystem democracry
>    :depends-on (civil-society press/freedom)
>>
> looks much less cluttered than
>
> (asdf:defsystem "capitalism"
>    :depends-on ("profit/increasing" "internal-contradictions")
>>
> While I can see problems stemming from what package the "democracry"
> symbol gets interned within, I assume that ASDF:DEFSYSTEM goes to great
> lengths to ensure that it is processed in a reasonable manner to guard
> against such problems, therefore system designators as symbols should be
> more or less the same as system designators as strings.  Using strings
> as system designators seems to work fine with asdf-3.2.0.
>
> Just to be clear, could someone please illuminate my understanding here
> a bit:  why are strings a better practice than symbols here?
>
Symbols work fine. It's just that they are not *canonical*; so it's
not obviously clear that underneath, ASDF them will reduce them to a
lower-case string; or that :SRc srC and "src" are the same thing. The
consing and interning saved by using strings is probably minor in
comparison.

It's a style issues. Others may disagree with my rule. That's a shame,
but as long as they have themselves a good set of principes, that's
their problem.



More information about the asdf-devel mailing list