[armedbear-devel] translate-logical-pathname and :wild-inferiorsregression
Mark Evenson
evenson at panix.com
Wed Feb 3 13:51:41 UTC 2010
On 1/29/10 4:12 PM, Alan Ruttenberg wrote:
> On Fri, Jan 29, 2010 at 4:03 AM, Mark Evenson<evenson at panix.com> wrote:
>> On 1/18/10 4:51 PM, Alan Ruttenberg wrote:
>>> (TRANSLATE-PATHNAME #P"IDO:IMMUNOLOGY;" #P"IDO:IMMUNOLOGY;**;*.*"
>>> #P"/Users/alanr/repos/infectious-disease-ontology/trunk/src/ontology/**/*.*")
>>
>> Acknowledge and logged as [ticket 82][1].
[…]
Somehow, the more I learn about Pathnames, the less I understand.
First off, I think that the SETF on LOGICAL-PATHNAME-TRANSLATION should
never use the #P for its arguments as you had in your example:
(setf (logical-pathname-translations "ido")
'((#P"IDO:IDO-CORE;**;*.*"
#P"/Users/alanr/repos/infectious-disease-ontology/trunk/src/ontology/ido-core/**/*.*")))
[…]
because it doesn't do what you might expect, namely the
#p"IDO:IDO-CORE;**;*.*" is not interpreted as a logical pathname when
read by the SHARP_P reader. You end up with an Pathname whose NAME is
"IDO:IDO-CORE;**;*.*" and other components are nil. That this ever
worked in ABCL is mysterious. Based on a canvas of open source Lisps
available to me, SBCL, ECL, and CCL all signal errors on being input
this form, for a variety of differing reasons. clisp accepts the form,
but fails to record it as a logical pathname.
Second, refactoring your test case away from logical pathnames down to
the use to TRANSLATE-PATHNAME, I derive the following use of
TRANSLATE-PATHNAME to be equivalent to the behavior you want:
(translate-pathname "/immunology/" "/immunology/**/" "/usr/home/**")
which you want to output
#p"/usr/home/immunology/"
but none of the other Lisps I checked (SBCL, ECL, CCL, and clisp) work
this way, they all return
#p"/usr/home/"
I think they do this to avoid the case for which Thomas Russ reported a
bug where
(translate-pathname "/immunology/" "/immunology/**/"
"/usr/home/immunology/**")
should return
#p"/usr/home/immunology/"
not
#p"/usr/home/immunology/immunology/"
as was the pre-r12283 ABCL behavior.
So, I am a bit confused on how to proceed. The behavior of
TRANSLATE-PATHNAME is implementation specific. From fuddling around
with the old implementation and the new one, I seem to be able to get
either behavior but not both and they seem logically incompatible but I
haven't proved that definitely to myself. Since the other CL
implementations exhibit the same behavior as current ABCL I need either
a) evidence that another Lisp works the way that Alan expects (and does
it then exhibit the same behavior that is a bug to Thomas Russ?) or b) a
clear semantics that I can implement that satisfy both uses.
Input kindly solicited from one and all.
--
"A screaming comes across the sky. It has happened before, but there
is nothing to compare to it now."
More information about the armedbear-devel
mailing list