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

A few random I/O proposals (really: string ports)

++ String ports

> Before SchemeXerox switched over to the module system, we used what
> I think are the Chez Scheme names for these procedures:
> important issue to resolve is the state of an output string port
> *after* a call to GET-OUTPUT-STRING.  Is it still open for use?  If
> so, is any new output appended onto the end of the string that
> GET-OUTPUT-STRING returned or is the port's contents reset to empty?
> In the latter case, what guarantees does one have about sharing
> between the returned string and the port's buffer if any?  Finally,
> what is the effect of my mutating the string given to
> OPEN-INPUT-STRING?  There are a number of reasonable sets of answers
> to these questions; if string ports are added to the report, some
> particular set of answers should be specified.

Let me take a try.  I did take a look at MacScheme, MIT Scheme, T,
Gambit, and Chez.

 (OPEN-INPUT-STRING <string>) -> <input-port>

 (OPEN-OUTPUT-STRING) -> <output-port>

 (GET-OUTPUT-STRING <output-string-port>) -> <mutable-string>

 (STRING-PORT? obj) -> <boolean>

String ports give the expected answers to INPUT-PORT? and
OUTPUT-PORT?.  Reading after the last character in an input string
port returns the eof-object.

GET-OUTPUT-STRING does reset the output string to a state which is
indistinguishable from that if the port was freshly bound with
OPEN-OUTPUT-STRING (as with Chez and Gambit, unlike MacScheme).  The
rationale for this is that [1] reset is undefined for other port
objects, [2] Pavel's questions above, [3] this is probably the most
desired behavior {when used}.  {My personal preference is that the
reset side effect be separate, but my guess is that there is more code
which would break if this strategy is followed--admittedly a weak

The string returned by GET-OUTPUT-STRING is a new string, except that
all instances of the empty string are allowed to be shared (eqv?

If people make an argument that we need a FILE-INPUT-PORT? and
INTERACTIVE-INPUT-PORT?, etc. for symmetry, I would flush the
STRING-PORT? predicate.