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

Re: Several comments



> Marc> and "scheme-script" would always invoke "script-main" after loading a
> Marc> script.
> 
> I can imagine going with that.  Opinions, anyone else?

Can you explain your position on the other alternatives.  In
particular the second one which is my preference:

  #! /bin/sh
  "exec" "scheme-script" "$0" "$@"
  (define (main arg1 arg2)
    (write (+ (string->number arg1) (string->number arg2))))
  (apply main (script-arguments))

I forgot to mention that it allows scripts to be compiled to an
executable program (i.e. a.out), as well as to a "fasl" file.  For
this to work, "script-arguments" behaves as follows depending on the
context:

1) In the dynamic extent of a "load": (script-arguments) signals the
   error "Attempt to load a script in an inappropriate context".  This
   happens whether the file loaded is a source code file or a "fasl"
   file.

2) In all other contexts, and in particular during loading as a script
   by scheme-script and during the execution of a compiled program:
   (script-arguments) returns the command line arguments as a list of
   strings.

For example, the above script could be compiled with Gambit to an
"a.out" simply with:

   % gsc S.scm
   % gcc S.c S_.c -lgambc
   % a.out 100 200

There is no need for the compiler to know that it is compiling a
script.

My third alternative, based on the implicit call of a "script-main"
procedure, requires the compiler to know it is compiling a script so
it has to be given a special compilation option, or detect that the
file being compiled starts with "#!" (actually it is a bit more
complicated because it is the linker that has to know it is generating
an executable and one of the source files was a script).

Marc