On 24 Sep 2014, at 08:13, Ville Voutilainen ville.voutilainen@gmail.com wrote:
On 24 September 2014 08:59, Mark Evenson evenson@panix.com wrote:
On 24 Sep 2014, at 06:05, Pascal J. Bourguignon pjb@informatimago.com wrote:
Why do we have?
(wild-pathname-p #P"*-blah") -> T (wild-pathname-p #P"*-blah" :name) -> NIL
This is inconsistent (and non-conforming).
Looking at the java code, it seems a bit naive/lazy. The memq for the directory does catch directories like foo/bar/*/baz (which _are_ wild), but it also seemingly catches other cases like foo/bar/baz*baz/otherstuff. I'm not convinced this is non-conforming, though, since implementations are allowed to support implementation-dependent strings that contain wildcard characters, which is what we do.
Having said that, in such cases I usually prefer doing what sbcl does, as far as possible. :)
I’m not sure this is advisable with respect to pathnames. sbcl is strongly influenced by cmucl, and cmucl is not the best implementation about pathnames, IMO.
That said, the wild-pathname-p implementation should rather be consensual, CLHS doesn’t seem to leave much to implementation choice in it.
Only, it shall depend on how the implementation supports wild components.
For logical pathnames, there are :wild components and wildcard-word (or also wild-inferior-words for directories) components (they must be both supported).
For physical pathnames, only :wild or :wild-inferiors components must be supported, but of course, it is highly advisable to document and support wildcards in physical components too.
And since we also want to support POSIX paths as physical pathnames, which may contain any sequence of byte, we want to distinguish physical pathname syntax, from plain POSIX paths. (Let’s also keep in mind that POSIX paths may contain any control character and any sequence of byte that is *invalid* UTF-8 (apart from 0)).
I’m reminding all this, because foo/bar/baz*baz/otherstuff is ambiguous: - it may be a physical pathname syntax with a wildcard-word component using a syntax similar to logical pathnames, ( #P"foo/bar/baz*baz/otherstuff” ), or - it may be a native pathname string representation of the POSIX path #(102 111 111 47 98 97 114 47 98 97 122 42 98 97 122 47 111 116 104 101 114 115 116 117 102 102).
In the first case, it’d be a wild-pathname, in the later case, it wouldn’t be.
— __Pascal Bourguignon__