From: Bruno H. <br...@cl...> - 2004-11-29 22:07:57
|
This patch 2004-06-30 Sam Steingold <sd...@gn...> * spvw.d (main): reset `argv_for' to `for_exec' after processing the non-option argument so that "-i" will not disable scripting Reported by VAUCHER L Ext SIRES <lva...@fr...> makes clisp's behaviour highly nonintuitive: $ cat > a.lisp (format t "AAA~%") $ cat > b.lisp (format t "BBB~%") $ cat > c.lisp (format t "CCC~%") $ clisp -i a.lisp b.lisp c.lisp WARNING: *FOREIGN-ENCODING*: reset to ASCII ;; Loading file a.lisp ... AAA ;; Loaded file a.lisp BBB So it has loaded 2 out of 3 files!! $ clisp -c a.lisp b.lisp c.lisp WARNING: *FOREIGN-ENCODING*: reset to ASCII ;; Compiling file /dev/shm/a.lisp ... ;; Wrote file /dev/shm/a.fas 0 errors, 0 warnings So it has compiled 1 out of 3 files!! The ability of using "-i" with scripting is not needed, because - The options are made for the interactive user primarily. Forcing the interactive user to do "clisp -i a.lisp -i b.lisp -i c.lisp" makes it more cumbersome. Also, use of wildcards like "clisp -i a*.lisp" become impossible. What the benefit of the batch mode / scripting user on the other side? The ability of writing "-i" outside of the script instead of LOAD statements inside the script. This is minor. - A script should not use "#!/usr/bin/env clisp -i ..." because this causes it to bang against the system limits for #! too early. - A script should better load all its dependencies by itself, not require the command line invocation to provide them. Robustness. - Those who absolutely want to combine -i with scripting can use $ clisp -i a.lisp -q -x '(load "b.lisp")' -- c.lisp Here a.lisp will be initially loaded, b.lisp will be executed as a script, and c.lisp becomes part of *ARGS*. So I conclude that VAUCHER's report was mostly a documentation problem. I'm reverting the 2004-06-30 patch and updating the doc accordingly. A slightly different approach would be to introduce an option "-s", meaning scripting, such that $ clisp -i a.lisp -s b.lisp c.lisp loads b.lisp as a script. And -s could be omitted only if -i is not used. Bruno |
From: Sam S. <sd...@gn...> - 2004-11-29 22:32:33
|
> * Bruno Haible <oe...@py...t> [2004-11-29 23:02:44 +0100]: > > This patch > > 2004-06-30 Sam Steingold <sd...@gn...> > > * spvw.d (main): reset `argv_for' to `for_exec' after processing > the non-option argument so that "-i" will not disable scripting > Reported by VAUCHER L Ext SIRES <lva...@fr...> > > makes clisp's behaviour highly nonintuitive: > > $ cat > a.lisp > (format t "AAA~%") > $ cat > b.lisp > (format t "BBB~%") > $ cat > c.lisp > (format t "CCC~%") > > $ clisp -i a.lisp b.lisp c.lisp > WARNING: *FOREIGN-ENCODING*: reset to ASCII > ;; Loading file a.lisp ... > AAA > ;; Loaded file a.lisp > BBB > > So it has loaded 2 out of 3 files!! indeed, that's what the user asked for: 1. load a.lisp 2. run b.lisp on *args* = ("c.lisp") > $ clisp -c a.lisp b.lisp c.lisp > WARNING: *FOREIGN-ENCODING*: reset to ASCII > ;; Compiling file /dev/shm/a.lisp ... > ;; Wrote file /dev/shm/a.fas > 0 errors, 0 warnings > > So it has compiled 1 out of 3 files!! oops - this is a bug. it should have been an error because 2 action options (compile-file and script) are used at the same time. > The ability of using "-i" with scripting is not needed, because > - The options are made for the interactive user primarily. Forcing the > interactive user to do "clisp -i a.lisp -i b.lisp -i c.lisp" makes it > more cumbersome. Also, use of wildcards like "clisp -i a*.lisp" become > impossible. What the benefit of the batch mode / scripting user on the "clisp -i a*.lisp" is broken. loading files should be done in a specific order, and not always alphabetically. > other side? The ability of writing "-i" outside of the script instead of > LOAD statements inside the script. This is minor. > - A script should not use "#!/usr/bin/env clisp -i ..." because this causes > it to bang against the system limits for #! too early. > - A script should better load all its dependencies by itself, not require > the command line invocation to provide them. Robustness. > - Those who absolutely want to combine -i with scripting can use > > $ clisp -i a.lisp -q -x '(load "b.lisp")' -- c.lisp > > Here a.lisp will be initially loaded, b.lisp will be executed as a script, > and c.lisp becomes part of *ARGS*. YUK!!! > So I conclude that VAUCHER's report was mostly a documentation problem. > I'm reverting the 2004-06-30 patch and updating the doc accordingly. please don't. the normal behavior of command line switch is that it either takes one argument or no arguments. you are permitting a switch to take an arbitrary number of arguments which is very unusual, unexpected, and useless. when I was fixing the bug, I never thought that this behavior could be intentional: show me one other program whose switch takes more than one argument! -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Of course, I haven't tried it. But it will work. - Isaak Asimov |