On Mar 20, 2006, at 5:29 PM, David Lichteblau wrote:
Quoting Marco Antoniotti (marcoxa@cs.nyu.edu):
Just to be nitpicking. Merging *d-p-d* (which I assume to be *DEFAULT-PATHNAME-DEFAULTS*) isn't guaranteed to work. *d-p-d* can be a relative pathname. Wouldn't that cause the same problem?
Well, ISTR that CMUCL starts with an empty *default-pathname-defaults*, so I recognize that CMUCL users might indeed still have this problem even with the patch.
And since the spec is terribly vague on this issue (like most issues relating to pathnames), the implementation choice made by CMUCL maintainers is technically correct.
However,
- the spec does say that *default-pathname-defaults* is "typically in the working directory that was current when Common Lisp was
started up".
- it's the only approximation of the concept of a "working directory" I am aware of in portable Common Lisp and many Lisps implement it like that.
- if the implementation chooses not to set it to the working directory, users can easily fix that by setting or binding it themselves. (Or, of course, by passing an absolute pathname to cxml:parse-file in the first place...)
So using it seems like a reasonable compromise to me, and improves the situation on some Lisps while not making it worse on the others.
I do think that it still has problems. Think of
(let ((*default-pathname-defaults* (make-fiendshly-relative-pathname))) ;; run CXML code. )
It is true that *d-p-d* is usually what you think, but since it is a variable that can be manipulated, it is not safe to assume any value for it.
I would either introduce a CXML variable, or use USER-HOMEDIR-PATHNAME, which is guaranteed to be "constant".
In alternative, I would use some package that masks the implementation vagaries and gives you the notion of "working directory". CLOCC port is one of them (or, shameless plug, cl-environment)
Cheers
Marco -- Marco Antoniotti http://bioinformatics.nyu.edu/~marcoxa NYU Courant Bioinformatics Group tel. +1 - 212 - 998 3488 715 Broadway 10th FL fax. +1 - 212 - 998 3484 New York, NY, 10003, U.S.A.