[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Scheme-reports] Bidirectional ports and port-open?

On 07/02/2012 06:02 AM, Marc Feeley wrote:
> I also expect a bidirectional port when doing
>     (open-file "/dev/tty")
> and
>    (open-tcp-client "google.com:80")

open-file doesn't exist and is meaningless.  Open for reading?
Open for writing?  Open for whatever I have permissions for
(which we know leads to security and other problems)?

> It is conceivable, but non-trivial, to arrange for these procedures to return 2 values: an input port and an output port (some Scheme systems do this), but then it becomes bothersome to pass these two values around consistenty (unless of course you cons them together, in which case you basically have an ad-hoc bidirectional port!).

No.  The Right Solution IMNSHO is that (say) open-tcp-client
returns a "connection" or a "socket" object.  It's a historical
accident (i.e. a design mistake) for Unix to conflate the types
of file/port and connection, since a connection has two files
*plus* other state.

I.e. a connection is fundamentally a different kind of object than
a port.  Trying to conflate them is a design bug.

(Some environments (including Java) don't support bi-directional ports
(except in Java's case RandomAccessFile).  This means that mapping Scheme
ports to implementation ports becomes ugly.)
	--Per Bothner
per@x   http://per.bothner.com/

Scheme-reports mailing list