[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Gcl-devel] Re: trouble with cl-launch

From: Faré
Subject: Re: [Gcl-devel] Re: trouble with cl-launch
Date: Fri, 13 Oct 2006 15:18:56 -0400

On 13 Oct 2006 12:18:19 -0400, Camm Maguire <address@hidden> wrote:
* cl-launch calls gcl with option -batch, and this causes gcl to NOT
re-read system::*tmp-dir* from (si::getenv "TMP"). I had to explicitly
redefine it, but you probably know a better fix (especially if other
variables need to be reinitialized), and the real fix might be on your
OK, this should be fixed in CVS now.
Thank you. I'll keep my workaround there until you release it.

> * gcl 2.7 seems to have a buggy make-pathname, that tries to merge a
> relative :directory with the directory of the default, which causes
> clc cached objects to be in the wrong place
>   (make-pathname :directory '(:relative "foo" "bar") :defaults
> (make-pathname :directory '(:absolute "baz" "quux")))
> Should return #P"foo/bar/" but instead returns
> #P"/baz/quux/foo/bar/"

I think this is correct.
I think it is wrong, and all the other Lisp implementations I've tried
agree with me:
clisp sbcl cmucl openmcl allegro ecl

 From merge-pathnames:

   Pathname merging treats a relative directory specially.  If
(pathname-directory pathname) is a list whose car is :relative, and
(pathname-directory default-pathname) is a list, then the merged
directory is the value of

      (append (pathname-directory default-pathname)
              (cdr  ;remove :relative from the front
                (pathname-directory pathname)))

   except that if the resulting list contains a string or :wild
immediately followed by :back, both of them are removed.  This removal
of redundant :back keywords is repeated as many times as possible.  If
(pathname-directory default-pathname) is not a list or
(pathname-directory pathname) is not a list whose car is :relative, the
merged directory is (or (pathname-directory pathname)
(pathname-directory default-pathname))

And from make-pathname:

   After the components supplied explicitly by        host,
device,        directory,        name,        type,    and version are
filled in, the merging rules used by merge-pathnames are used to fill
in any unsupplied components from the defaults supplied by defaults.

This is literally what the code does.

Note the UNSUPPLIED at the end of the above sentence. In this case,
the pathname IS supplied and it is (:relative ...) and so should NOT
be merged as by merge-pathnames.

At the very least, this behaviour confuses the hell out of clc.

Great!  And thanks again for the feedback!
Thanks for all the wonderful free software!

[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ]
Economics is the plural of Morality.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]