[asdf-devel] patch for component-relative-pathname
Robert Goldman
rpgoldman at sift.info
Sun Feb 21 23:46:24 UTC 2010
On 2/19/10 Feb 19 -2:19 PM, Faré wrote:
>> 2. SPLIT-PATH-STRING --- this is the one I think might need a ticket.
>> I confess I'm bamboozled by this one. It's called on (component-name
>> component), not on a pathname. Can you explain why the COMPONENT-NAME
>> would end up being a string that looks like a pathname?
>>
>> This SPLIT-PATH-STRING stuff looks like a relatively recent gwking
>> addition (if I understand the output of git blame correctly). I don't
>> see what use case it was introduced for. Anyone else have a clue? I
>> see this docstring for component-name:
>>
> gwking might have done the checkin, but I am the one who wrote the code at ITA,
> where we wanted to be able to use "foo/bar" as the name of a component,
> instead of having all those ugly :pathname #.(make-pathname ...)
> ALL OVER THE DAMN PLACE for hundreds of components.
>
>> "Component name: designator for a string composed of portable pathname
>> characters"
>>
>> but I have never seen at component-name that was anything other than a
>> simple name, never something with directory separators. Is this ever
>> used in the wild? Or was this something that was added in an excess of
>> enthusiasm and that should just be killed (like the undocumented
>> tripartite FEATURE form)?
>>
> Yes, we use it a lot at ITA, and ASDF-DEPENDENCY-GROVEL
> and XCVB's ASDF front-end and backend use it, too.
>
> This change is 100% backwards compatible, since the behavior before then was
> "undefined" when the #\/ character appeared in a name.
> Now it's defined and portable.
OK, I'm interested in writing up the documentation, and have been
thinking about how this is to be treated. Some thoughts:
1. SPLIT-PATH-STRING is not an ideal name. SPLIT-PATH-STRING is /not/
used on paths, it is used on /names/ (in the ASDF sense of these terms).
An unwary reader of this code might try to apply it to a pathname (as I
originally thought), where it could cause lossage because S-P-S doesn't
handle logical pathnames (or lots of other things about pathnames).
Suggest that we rename this to something like NAME-TO-PATHNAME or
NAME-PATHNAME-SPLIT.
2. We should define in the grammar simple-names and structured names.
Simple names have no "/" and structured names may have a slash.
3. The period character should be forbidden in /both/ simple and
structured names because of oddities with pathname types.
4. Only simple names should be permitted in naming systems.
5. For modules, I propose either:
5.1 Only simple names should be permitted in naming modules, or
5.2 The use of a structured name implicitly overrides the default
relative pathname for modules. [a test should go here!]
On a related note, the grammar in the manual seems to suggest that a
component can be just a string, which I don't believe that ASDF supports.
The grammar says:
component-def := simple-component-name
| ( component-type name {option}* )
But I don't believe SIMPLE-COMPONENT-NAME is actually supported. I
propose to squash this from the documentation, unless corrected.
best,
r
More information about the asdf-devel
mailing list