write-bytevector, write & co. Lassi Kortela (16 Aug 2020 10:24 UTC)
Re: write-bytevector, write & co. Marc Nieper-Wißkirchen (16 Aug 2020 10:33 UTC)
Re: write-bytevector, write & co. Daphne Preston-Kendal (16 Aug 2020 10:37 UTC)
Re: write-bytevector, write & co. Marc Nieper-Wißkirchen (16 Aug 2020 10:44 UTC)
Configuring read and write for syntax extensions Lassi Kortela (16 Aug 2020 11:04 UTC)
Re: Configuring read and write for syntax extensions Shiro Kawai (16 Aug 2020 11:46 UTC)
Re: Configuring read and write for syntax extensions Lassi Kortela (16 Aug 2020 11:55 UTC)
Re: Configuring read and write for syntax extensions Marc Nieper-Wißkirchen (16 Aug 2020 11:59 UTC)
Re: Configuring read and write for syntax extensions Lassi Kortela (16 Aug 2020 12:06 UTC)
Re: Configuring read and write for syntax extensions Marc Nieper-Wißkirchen (16 Aug 2020 12:25 UTC)
User-defined writers and recursive write Lassi Kortela (16 Aug 2020 12:38 UTC)
(missing)
(missing)
Re: User-defined writers and recursive write Marc Nieper-Wißkirchen (16 Aug 2020 13:32 UTC)
Re: Configuring read and write for syntax extensions Lassi Kortela (16 Aug 2020 12:26 UTC)
Re: Configuring read and write for syntax extensions Marc Nieper-Wißkirchen (16 Aug 2020 12:33 UTC)
Re: Configuring read and write for syntax extensions Lassi Kortela (16 Aug 2020 12:50 UTC)
Re: Configuring read and write for syntax extensions Shiro Kawai (16 Aug 2020 12:32 UTC)
Re: Configuring read and write for syntax extensions Marc Nieper-Wißkirchen (16 Aug 2020 12:35 UTC)
Re: Configuring read and write for syntax extensions Lassi Kortela (16 Aug 2020 12:44 UTC)
Re: Configuring read and write for syntax extensions Shiro Kawai (16 Aug 2020 12:53 UTC)
Re: Configuring read and write for syntax extensions John Cowan (17 Aug 2020 16:58 UTC)

Re: Configuring read and write for syntax extensions Lassi Kortela 16 Aug 2020 11:55 UTC

> Gauche extended write to take <write-controls> with which you can
> configure output (similar to CL's '*print-' dynamic variables).

That sounds reasonable.

> Initially I thought using parameters but decided against it, for there's
> a rare case that you want to do two writes concurrently for the
> different purpose (e.g. you wrote your "plugin" for write and want to
> leave some logs to a separate port.  Naturally such logging routine is
> invoked in middle of main "write", but the log output doesn't want to be
> affected even the main 'write" is customized.)
>
> My solution is actually quite a kluge so I'm wondering if there's a
> better way.  Whenever `write` can't pass down the current controls
> directly to the recursive `write`, it associates the current controls to
> the port.  So concurrent write to the different port can use separate
> controls.

Good point.

It might make sense for the `write` controls to be a property of each
textual output port. If there's one port for the REPL, this would also
be a natural way to control the REPL syntax.

Does Gauche let the user access a port's write controls, or is it
internal only?

There's also a drawback to Common Lisp's approach of using many separate
dynamic variables, in that you have to remember to set all their values.
There's a `with-standard-io-syntax` convenience macro to restore them
all to defaults. It's nice that in Scheme you don't need to remember to
do such a thing.