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?
John Cowan
(24 May 2006 16:06 UTC)
|
||
(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)
|
||
(missing)
|
||
Re: Why are byte ports "ports" as such?
Marcin 'Qrczak' Kowalczyk
(24 May 2006 16:17 UTC)
|
||
Re: Why are byte ports "ports" as such?
John Cowan
(14 Apr 2006 12:26 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