Here is a patch against 1.720 that fixes a weakness in merge-pathnames*. This was a show stopper in my system.
It seems that merge-pathnames* assumes that *default-pathname-defaults* has some interesting value to contribute which is not always the case. In my system and in a few others (clisp comes to mind) the usual value of *default-pathname-defaults* is #P"" which ends up giving
(pathname-directory *default-pathname-defaults*) => nil
Then, (append nil (cdr directory)) is probably not a "valid pathname directory". In clisp passing this not so "valid pathname directory" to make-pathname will result in a visit in the debugger...
I want also to insist again on the issue of accessing the process current directory. Assuming that *default-pathname-defaults* is a substitute for the process current directory is not portable ANSI Common Lisp code. The following definition is very likely to be wrong on at least one ANSI Common Lisp conforming implementation:
(defun current-directory () (truenamize (pathname-directory-pathname *default-pathname-defaults*)))
Cheers,
Jean-Claude Beaudoin
-------
diff asdf-1.720/asdf.lisp asdf.lisp
519c520,522 < (append (pathname-directory defaults) (cdr directory)) ---
(if (pathname-directory defaults) (append (pathname-directory defaults) (cdr directory)) directory)
It's hopefully fixed in 1.725, except that somehow in the commit message, I wrote pjb where I should have written jcb. Oops.
My "solution" to the "current-directory" thing was to rename it to "default-directory".
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program. — Alan Perlis
On 18 May 2010 06:32, Jean-Claude Beaudoin jean.claude.beaudoin@gmail.com wrote:
Here is a patch against 1.720 that fixes a weakness in merge-pathnames*. This was a show stopper in my system.
It seems that merge-pathnames* assumes that *default-pathname-defaults* has some interesting value to contribute which is not always the case. In my system and in a few others (clisp comes to mind) the usual value of *default-pathname-defaults* is #P"" which ends up giving
(pathname-directory *default-pathname-defaults*) => nil
Then, (append nil (cdr directory)) is probably not a "valid pathname directory". In clisp passing this not so "valid pathname directory" to make-pathname will result in a visit in the debugger...
I want also to insist again on the issue of accessing the process current directory. Assuming that *default-pathname-defaults* is a substitute for the process current directory is not portable ANSI Common Lisp code. The following definition is very likely to be wrong on at least one ANSI Common Lisp conforming implementation:
(defun current-directory () (truenamize (pathname-directory-pathname *default-pathname-defaults*)))
Cheers,
Jean-Claude Beaudoin
Faré wrote:
It's hopefully fixed in 1.725, except that somehow in the commit message, I wrote pjb where I should have written jcb. Oops.
Thanks for the commit. And don't worry, I have been called worst...
My "solution" to the "current-directory" thing was to rename it to "default-directory".
I am not sure I understand whether this really serves your purpose. "default-directory" and "current-directory" are two quite different concepts after all. I guess that now function "default-directory" is in a better position to declare itself correct by construction. But I still don't see what usefulness it will have on lisp systems that chose to not accept (truename #P"") as designating anything special (as, for one thing, the process current directory). Nothing in the ANSI CL standard mandates (truename #P"") to mean anything and I would even argue that assigning a meaning to (truename #P"") runs against the spirit of the ANSI CL text on truename... (I say this above in the context of *default-pathname-defaults* being #P"" itself.)
Cheers,
Jean-Claude Beaudoin
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program. — Alan Perlis
On 18 May 2010 06:32, Jean-Claude Beaudoin jean.claude.beaudoin@gmail.com wrote:
Here is a patch against 1.720 that fixes a weakness in merge-pathnames*. This was a show stopper in my system.
It seems that merge-pathnames* assumes that *default-pathname-defaults* has some interesting value to contribute which is not always the case. In my system and in a few others (clisp comes to mind) the usual value of *default-pathname-defaults* is #P"" which ends up giving
(pathname-directory *default-pathname-defaults*) => nil
Then, (append nil (cdr directory)) is probably not a "valid pathname directory". In clisp passing this not so "valid pathname directory" to make-pathname will result in a visit in the debugger...
I want also to insist again on the issue of accessing the process current directory. Assuming that *default-pathname-defaults* is a substitute for the process current directory is not portable ANSI Common Lisp code. The following definition is very likely to be wrong on at least one ANSI Common Lisp conforming implementation:
(defun current-directory () (truenamize (pathname-directory-pathname *default-pathname-defaults*)))
Cheers,
Jean-Claude Beaudoin
This default-directory thingie (nee current-directory) is here for backwards compatibility with previous behavior. I don't actually know that anyone is relying on it, and I haven't checked when the functionality was introduced. If anyone is exercising this feature while setting the default-pathname-defaults to something that doesn't have a truename on his implementation - then he's asking for trouble, and I'll be blaming the user.
User, please remember: if no AI emerged from your computer yet, it's YOUR fault.
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] Slogans rarely convince the unconvinced. However, they do rally the troops already on your side. — John McCarthy
On 19 May 2010 07:20, Jean-Claude Beaudoin jean.claude.beaudoin@gmail.com wrote:
Faré wrote:
It's hopefully fixed in 1.725, except that somehow in the commit message, I wrote pjb where I should have written jcb. Oops.
Thanks for the commit. And don't worry, I have been called worst...
My "solution" to the "current-directory" thing was to rename it to "default-directory".
I am not sure I understand whether this really serves your purpose. "default-directory" and "current-directory" are two quite different concepts after all. I guess that now function "default-directory" is in a better position to declare itself correct by construction. But I still don't see what usefulness it will have on lisp systems that chose to not accept (truename #P"") as designating anything special (as, for one thing, the process current directory). Nothing in the ANSI CL standard mandates (truename #P"") to mean anything and I would even argue that assigning a meaning to (truename #P"") runs against the spirit of the ANSI CL text on truename... (I say this above in the context of *default-pathname-defaults* being #P"" itself.)
Cheers,
Jean-Claude Beaudoin
[ François-René ÐVB Rideau | Reflection&Cybernethics | http://fare.tunes.org ] You think you know when you can learn, are more sure when you can write, even more when you can teach, but certain when you can program. — Alan Perlis
On 18 May 2010 06:32, Jean-Claude Beaudoin jean.claude.beaudoin@gmail.com wrote:
Here is a patch against 1.720 that fixes a weakness in merge-pathnames*. This was a show stopper in my system.
It seems that merge-pathnames* assumes that *default-pathname-defaults* has some interesting value to contribute which is not always the case. In my system and in a few others (clisp comes to mind) the usual value of *default-pathname-defaults* is #P"" which ends up giving
(pathname-directory *default-pathname-defaults*) => nil
Then, (append nil (cdr directory)) is probably not a "valid pathname directory". In clisp passing this not so "valid pathname directory" to make-pathname will result in a visit in the debugger...
I want also to insist again on the issue of accessing the process current directory. Assuming that *default-pathname-defaults* is a substitute for the process current directory is not portable ANSI Common Lisp code. The following definition is very likely to be wrong on at least one ANSI Common Lisp conforming implementation:
(defun current-directory () (truenamize (pathname-directory-pathname *default-pathname-defaults*)))
Cheers,
Jean-Claude Beaudoin