scheme-script organization created Lassi Kortela (26 Jun 2021 11:15 UTC)
Re: scheme-script organization created Vladimir Nikishkin (26 Jun 2021 11:20 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 11:26 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 11:54 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 12:03 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 12:18 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 12:32 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 12:41 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 13:28 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 13:40 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 14:16 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 14:30 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 14:44 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 15:50 UTC)
Re: scheme-script organization created Marc Feeley (26 Jun 2021 12:42 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 12:46 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 13:05 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 13:36 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 13:45 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 13:58 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 14:20 UTC)
Re: scheme-script organization created Vladimir Nikishkin (26 Jun 2021 14:23 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 14:31 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 13:07 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (26 Jun 2021 19:07 UTC)
Re: scheme-script organization created Lassi Kortela (26 Jun 2021 19:26 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (27 Jun 2021 08:02 UTC)
Re: scheme-script organization created Lassi Kortela (28 Jun 2021 06:47 UTC)
Re: scheme-script organization created Marc Feeley (27 Jun 2021 16:36 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (27 Jun 2021 19:45 UTC)
Re: scheme-script organization created Marc Feeley (27 Jun 2021 21:02 UTC)
Re: scheme-script organization created Marc Nieper-Wißkirchen (28 Jun 2021 06:20 UTC)
Script semantics and declarations Lassi Kortela (28 Jun 2021 06:59 UTC)
Re: Script semantics and declarations Lassi Kortela (28 Jun 2021 07:09 UTC)
Re: Script semantics and declarations Marc Nieper-Wißkirchen (28 Jun 2021 07:20 UTC)
Re: Script semantics and declarations Lassi Kortela (28 Jun 2021 07:49 UTC)
Re: Script semantics and declarations Marc Nieper-Wißkirchen (28 Jun 2021 08:05 UTC)
Re: Script semantics and declarations Lassi Kortela (28 Jun 2021 09:16 UTC)
Re: Script semantics and declarations Marc Nieper-Wißkirchen (28 Jun 2021 09:32 UTC)
Proposed implementation Lassi Kortela (28 Jun 2021 10:28 UTC)
Re: Proposed implementation Marc Nieper-Wißkirchen (28 Jun 2021 12:10 UTC)
Re: Proposed implementation Marc Feeley (28 Jun 2021 12:15 UTC)
Re: Proposed implementation Marc Nieper-Wißkirchen (28 Jun 2021 12:21 UTC)
Re: Script semantics and declarations Marc Nieper-Wißkirchen (28 Jun 2021 20:42 UTC)
Text substitution macros and multi-file archives Lassi Kortela (28 Jun 2021 07:24 UTC)
Re: Text substitution macros and multi-file archives Marc Nieper-Wißkirchen (28 Jun 2021 07:35 UTC)
Re: Text substitution macros and multi-file archives Lassi Kortela (28 Jun 2021 08:07 UTC)
Re: Text substitution macros and multi-file archives Marc Nieper-Wißkirchen (28 Jun 2021 08:23 UTC)
Re: Text substitution macros and multi-file archives Lassi Kortela (28 Jun 2021 08:38 UTC)
Re: Text substitution macros and multi-file archives Marc Nieper-Wißkirchen (28 Jun 2021 08:52 UTC)

Text substitution macros and multi-file archives Lassi Kortela 28 Jun 2021 07:24 UTC

> Here, the implementation for a hypothetical "foo-scheme" wants to make
> use of special lexical syntax, namely `##foo', of which
> `scheme-script-ce' may have no idea so that the above cannot work. A
> similar problem occurs when we want to mix R6RS and R7RS versions of a
> program; in the R6RS version, `#vu8(' is used to introduce bytevectors
> vs. `#u8' for the R7RS world.
>
> So what we do need is a capability of raw textual substitution in
> ce-scripts, e.g. as follows:
>
> #!/usr/bin/env scheme-script-ce
> (cond-expand
>    ((foo-scheme)
>     (include-chunk <<foo>>))
>    (else
>      ...))
> #!eof
> <<foo>>=
> ##foo
> @
>
> Here, I have used special lexical syntax (to be understood by
> `scheme-script-ce') to mark the end of the list of external
> representations of Scheme datums. Afterward, chunks in the style of the
> "noweb" program follow. (I have used its syntax just for demonstration
> purposes so that I didn't have to invent my own.)
>
> `include-chunk' will insert the referenced text into the final program
> that is fed by `scheme-script-ce' to a supported implementation.

Free-text substitution macros tend to confuse humans and text editors
alike. It would be a good principle for each Scheme implementation to
have an alternative way to use the features that are invoked via
non-standard read syntax.

For example, instead of #/.../ for a regexp literal, a portable script
should use (regexp-compile ...), even when `regexp-compile` is an
implementation-specific procedure called inside `cond-expand`, so that
the other implementations that can run the script can still read it.

Bundling multiple Scheme files into something like a `shar` archive
would surely be useful sometimes, but could we solve that problem by
permitting multiple (define-library ...) forms as you suggest, instead
of concatenating free-form files? Maybe those (define-library ...) forms
can embed non-Scheme files as string or bytevector literals if they need
them.

The JavaScript community has a lot of experience with transpilers like
Rollup (https://www.rollupjs.org/) that bundle modules into one script.
Writing a similar one for Scheme would be an interesting exercise for
which Unsyntax could be a good foundation. It should also be possible
possible to compile most R7RS code into a form that doesn't use
(define-library ...) and relies on (let ...) scoping only, renaming
identifiers as needed to avoid clashes.