[asdf-devel] patch system-source-file
Greg Pfeil
greg at clozure.com
Sun Jul 12 17:11:05 UTC 2009
On 12 Jul 2009, at 11:17, Robert Goldman wrote:
> Greg Pfeil wrote:
>> On 9 Jul 2009, at 13:08, Robert Goldman wrote:
>>
>>> Greg Pfeil wrote:
>>>> Here are a couple changes to ASDF that I made in the process of
>>>> creating
>>>> an ASDF browser for CCL's IDE:
>>>>
>>>> system-source-file now works for systems without their own .asd
>>>> optional parts of systems (version, maintainer, etc.) don't leave
>>>> their slots unbound
>>
>>> The first of these looks good, but I'm less fond of the second
>>> change.
>>> I've been bitten repeatedly by bugs caused by initforms that caused
>>> slots not explicitly set to have some value that hides a mistaken
>>> failure to fill the slot.
>>
>> Yeah, I should have sent these as separate patches. The first one is
>> more important, IMO, and the second is definitely debatable.
>
> How about sending that first patch while we work through the second
> issue. Even if we add the initforms, seems like it's still worth
> discussing the tradeoff b/w "" and NIL as defaults. I'd be inclined
> to
> prefer the latter, even at the expense of :type (or null string), so
> that an unsupplied value is readily distinguishable from an empty
> value.
Here's the system-source-file patch.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: system-source-file.diff
Type: application/octet-stream
Size: 1246 bytes
Desc: not available
URL: <https://mailman.common-lisp.net/pipermail/asdf-devel/attachments/20090712/179294b5/attachment.obj>
-------------- next part --------------
> The argument for slot-unbound is that it makes an error when you think
> you have set a slot, but you haven't. For example, let's say I
> misspell
> an initarg so that the value quietly vanishes. Then I'd rather the
> system hurl an error instead of quietly going off and doing
> something I
> don't expect.
>>
>>> I'd rather have us handle slot-unbound on those optional parts of
>>> the
>>> system instead of stuffing a bunch of NILs in there.
>>
>> When you say "us", do you mean implementing the accessors
>> explicitly in
>> ASDF to handle the condition, or having the caller handle/avoid the
>> condition?
>
> The latter.
>>
>>> If one is expecting strings here one must still handle checking
>>> for NIL,
>>> so having to check for slot-boundp doesn't seem that much more
>>> onerous.
>>
>> Checking slot-boundp has a number of problems:
>>
>> you have to export the slot names
>
> Is this really an issue? Would someone outside the ASDF package
> really
> be looking into these things? I suppose possibly so...
>
>> it breaks the accessor abstraction because the slot names don't
>> match
>> the accessor names
>> (when (slot-boundp foo 'asdf::description) (system-description
>> foo))
>
> (handler-case ....
> (slot-unbound () ...)
>
> avoids this problem, if you know that you want to quash unbound slots.
You know, I considered this, but quickly dismissed it as too verbose.
However, while
(handler-case (system-description foo) (slot-unbound () ""))
is worse than the
(or (system-description foo) "")
that I wanted, it's still better than the
(when (slot-boundp foo 'asdf::description) (system-description foo))
I was afraid of. I'm happy to use that pattern.
I'd still prefer optional values to not signal slot-unbound, but I
understand the tradeoff with catching errors in initforms, etc.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: PGP.sig
Type: application/pgp-signature
Size: 194 bytes
Desc: This is a digitally signed message part
URL: <https://mailman.common-lisp.net/pipermail/asdf-devel/attachments/20090712/179294b5/attachment.sig>
More information about the asdf-devel
mailing list