Subject: Re: Logical pathname hosts. From: Erik Naggum <erik@naggum.no> Date: 1998/12/24 Newsgroups: comp.lang.lisp Message-ID: <3123471323156503@naggum.no> * Raymond Toy <toy@rtp.ericsson.se> | Which test case are we talking about here? sigh. you need to look up the meaning of relative and absolute logical pathnames in the specification. you clearly do not understand this, yet you assume you do. that is _bad_ karma. "host:name.type" is an absolute logical pathname namestring. an absolute logical pathname's directory component is (:ABSOLUTE). "host:;name.type" is a relative logical pathname namestring. a logical pathname's directory component is either NIL or (:RELATIVE). THIS IS OPPOSITE OF PHYSICAL PATHNAME NAMESTRINGS under Unix, where "foo.bar" should have a directory component of NIL or (:RELATIVE) when parsed, and "/foo.bar" should have a directory component of (:ABSOLUTE) when parsed. the specification of logical pathname namestring syntax is very clear. I cannot fathom how you could begin to patch and hack on CMUCL without even reading it. | Are you saying the logical pathname "demo:foo.lisp" gets mapped to a | physical pathname relative to the current directory? "demo:foo.lisp" is an _absolute_ logical pathname. pay attention! | I suppose that would be true if (logical-pathname-translations "demo") | was '((";**;*.*.*" "./")), but isn't that what the translation says to do? huh? the whole point of logical pathnames is to remove the dependencies on locations in the file systems. using the current working directory as the target of a logical pathname translation is just really stupid. I installed cmucl_2.4.5 on my Debian system, and this trial run shows the pathological¹ case, somewhat abbreviated to reduce CMUCL's overly chatty error-reporting: CMU Common Lisp 18a+ release x86-linux 2.4.5 29 June 1998 cvs, running on sourcery * (setf (logical-pathname-translations "DEMO") '(("**;*.*" "/tmp/") (";**;*.*" "/tmp/foo/"))) (("**;*.*" "/tmp/") (";**;*.*" "/tmp/foo/")) * (translate-logical-pathname #p"demo:x") File-error in function TRANSLATE-LOGICAL-PATHNAME: No translation for #.(logical-pathname "DEMO:X") * (translate-logical-pathname #p"demo:;x") #p"tmp/foo/x" * (translate-logical-pathname #p"demo:foo;x") #p"/tmp/x" please note how insanely useless the translation of #p"demo:;x" is. | Anyway, I've sent a patch which makes CMUCL behave in the same way as | ACL for the original question. this is not comforting. this is why I want to argue with people who may know better than me and who have real, economic concerns about making changes to their code before something is admitted into an implementation. you have not heeded my warnings that what I have shown you is not ACL 5.0 behavior, it's the behavior of _my_patched_ ACL 5.0, because I think I got it right after spending a _lot_ of time on this shit, and there are a few minor issues in ACL 5.0 that don't rhyme with what I think, and I went ahead and made it make sense according to my understanding of the standard. it is _not_ a resolved set of issues at Franz Inc, and they are understandably reluctant to make changes that will affect customer applications. I really wish more "free" software was as cautious. (this appears to contradict my desire to see fully conforming implementations, but getting there involves changes, and changes involve investments.) _I_ think you have just rebugged CMUCL's logical pathname handling. #:Erik ------- ¹ "ersatz", anyone? (honk if you get the reference! :) -- Nie wieder KrF! Nie wieder KrF! Nie wieder KrF! Nie wieder KrF!