Why are byte ports "ports" as such? Ben Goetter (13 Apr 2006 17:54 UTC)
Re: Why are byte ports "ports" as such? John Cowan (13 Apr 2006 18:04 UTC)
Re: Why are byte ports "ports" as such? Marc Feeley (13 Apr 2006 21:41 UTC)
Re: Why are byte ports "ports" as such? John Cowan (14 Apr 2006 12:49 UTC)
Re: Why are byte ports "ports" as such? Marc Feeley (14 Apr 2006 13:37 UTC)
Re: Why are byte ports "ports" as such? Marc Feeley (13 Apr 2006 22:03 UTC)
Re: Why are byte ports "ports" as such? Ben Goetter (14 Apr 2006 01:02 UTC)
Re: Why are byte ports "ports" as such? Marc Feeley (14 Apr 2006 01:52 UTC)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
(missing)
Re: Why are byte ports "ports" as such? Marcin 'Qrczak' Kowalczyk (24 May 2006 16:17 UTC)
(missing)
(missing)
(missing)
Re: Why are byte ports "ports" as such? Thomas Bushnell BSG (24 May 2006 16:26 UTC)
Re: Why are byte ports "ports" as such? John Cowan (24 May 2006 17:18 UTC)
Re: Why are byte ports "ports" as such? Marc Feeley (24 May 2006 18:11 UTC)
(missing)
Re: Why are byte ports "ports" as such? John Cowan (24 May 2006 16:06 UTC)
Re: Why are byte ports "ports" as such? John Cowan (14 Apr 2006 12:26 UTC)

Re: Why are byte ports "ports" as such? Marc Feeley 14 Apr 2006 13:37 UTC

On 14-Apr-06, at 8:49 AM, John Cowan wrote:

> Marc Feeley scripsit:
>
>> It is a pain to carry those two ports around in the code when the
>> program needs to communicate bidirectionally with some other entity
>> (another process, a user at a terminal, a socket, etc).  Moreover the
>> separation of a conceptually bidirectional channel into distinct
>> ports (input and output) destroys the conceptual link that they
>> have.  This hinders program understanding.  For example, with
>> bidirectional ports (close-port port) will close both sides of the
>> bidirectional port (i.e. the link between the input and output port
>> is preserved).  With two unidirectional ports you have to duplicate
>> some operations (closing ports, changing port settings, ...).
>
> I find this rationale convincing (and think it should be added to the
> SRFI).

OK.

>   However, the socket API does permit closing input and output
> sides of the socket separately, and there are use cases for this,
> so it
> should be at least permitted though not the default.
>
> For example, when you want to send an arbitrary-length undecorated
> document to a server and retrieve an arbitrary-length undecorated
> document
> back, the simplest way to convey "end of document" is to close the
> output
> side, while leaving the input side open in order to receive the reply.
>

That was the intent of the passage:

     When an operation is said to apply to an input port it also
applies to a
     bidirectional port.  When an operation is said to apply to an
output port
     it also applies to a bidirectional port.

but I guess it is not clear that this also applies to the port
closing operations so I will add a note to that effect.  So yes you can:

    (let ((tty (open-file "/dev/tty"))) ; bidirectional port
      ...
      (close-input-port tty)
      ...
      (close-output-port tty))

And similarly for any bidirectional port (presumably sockets when
they are specified by another SRFI).  For the record Gambit has:

    (open-tcp-client
      (list server-address: "www.apple.com"
            port-number: 80
            eol-encoding: 'cr-lf)))

> A few unrelated editorial comments:
>
> UTF-8 byte sequences of length 5 and 6 have been deprecated for a
> long,
> long time.  They should not be referred to here.
>

This is an oversight.  I'll change it to 1 to 4 bytes.  That's what
my reference implementation does anyway.

> The SRFI should explicitly permit implementation-dependent encodings
> and eol-encodings.  (XML 1.1 allows CR, LF, CR/LF, NEL=U+0085, and
> LS=U+2028.)

What do you mean by "explicitly permit"?  In general an
implementation can extend an API any way it wishes!  The spec is only
a requirement.

>
> The SRFI should depend only on the lighter-weight SRFI 66 (Octet
> vectors),
> rather than on the heavier-weight SRFI 4.

It only depends on u8vectors which are common in SRFI 4 and SRFI 66.
SRFI 66 has things that SRFI 4 does not have, and vice versa.  I
could add a reference to SRFI 66 though.

>
> A warning is needed that non-default values of the create: file port
> setting may be subject to race conditions on file systems that
> don't provide full Posix semantics.
>

Sounds reasonable, as a warning.

> Finally, this SRFI makes only trivial use of keyword objects, and IMHO
> should be respecified to use symbols to reduce its dependencies.

I'll add something in the preamble saying:

    The tokens of the form ``foo:'' used in this document will be
called ``keywords''.
    On Scheme implementations supporting SRFI 88, these keywords
correspond to the
    keyword objects specified in that SRFI.  On Scheme
implementations which do not
    support SRFI 88, these keywords are symbols.

Marc