[R6RS] Scripts and toplevel code
Anton van Straaten
anton at appsolutions.com
Wed Aug 16 16:48:52 EDT 2006
Michael Sperber wrote:
> But it seems that adding your proposal to the existing mix will make
> that quite hard, as the script can't evolve gracefully into a library:
> the forms in its body have to be re-arranged or augmented by "(define
> dummy-xxx ...)" , giving scripts bad continuity characteristics.
>
> To my mind, this makes it worth reconsidering the restriction on
> library bodies. This would enable us to say:
>
> #!/usr/bin/env scheme-script
> #!r6rs
> (script <identifier>
> (import ...)
> <library body>)
>
> where <identifier> names the entry point. Change it into a library by
> changing "script" to "library", replacing <identifier> with the name
> of the library and adding an export clause. This can be done with an
> editor macro.
In general, I like that this reduces the boilerplate by not requiring a
separate clause to identify which library and entry point to use.
But one drawback to this (and to the toplevel code proposal that Kent
and I discussed earlier) is that scripts are nameless, and would
presumably require a special API to support loading and running them
from a program, for testing or some kind of reuse.
So at the risk of re-cluttering the syntax, I'm thinking it could be
worthwhile adding a script name, to allow scripts to be imported like
libraries. This would give a syntax like:
#!/usr/bin/env scheme-script
#!r6rs
(script <script name> <entry point name>
(import ...)
<library body>)
If we adopt Mike's proposal for listing exports in libraries first, then
the script form and the library form would have parallel structure, with
the entry point name in the script form replacing the export clause in
the library form. The difference between the script form and the
library form would then just be:
a) The script form has a specified entry point with a known signature,
i.e. a single parameter for the command line arguments.
b) The script form has no export clause, and scripts export only their
entry point. (Alternatively, scripts could export all their top-level
names.)
* * *
Finally, in my quest to support relaxed scripts, one other thing I think
could be useful is to allow omission of the entry point, so that a
script would not be required to define an entry procedure, but could
just rely on code at the top level of the script form. Again, this
increases user choice: someone wanting more rigor can specify and define
an entry procedure.
Anton
More information about the R6RS
mailing list