Two minor last-minute tweaks
Mark H Weaver
(19 Oct 2012 02:29 UTC)
|
Re: Two minor last-minute tweaks David A. Wheeler (19 Oct 2012 16:54 UTC)
|
Re: Two minor last-minute tweaks David A. Wheeler 19 Oct 2012 16:54 UTC
Mark H Weaver: > First, a small typo: > > 6. These MUST recurse within lists and vectors, so any list or vector > in a position that accepts a neoteric expression MUST accept a > sequence of zero or more neoteric expressions, not just > s-expressions. (Note that this occurs if they are directly or > directly within a curly-infix list or a neoteric-expression.) [...] > ^^^^^^^^ > > Presumably that should be "directly or indirectly", not "directly or > directly". Absolutely correct. Typo fixed. > An implementation of this SRFI MUST accept the marker #!curly-infix > followed by a whitespace character in its standard datum readers > (e.g., read and, if applicable, the default implementation > REPL). This marker (including the trailing whitespace character) > MUST be consumed and considered whitespace. After reading this > marker, the reader MUST accept curly-infix expressions in subsequent > datums until it reaches an end-of-file or some other conflicting > marker (no conflicting marker is specified here). > > I'd prefer to change the language "[...] in subsequent datums until it > reaches an end-of-file [...]" to something closer to "[...] in > subsequent datums read from the same port [...]". This is based on the > text in section 2.1 of R7RS (draft 6) that describes #!fold-case and > #!no-fold-case: > > #!fold-case > #!no-fold-case > > These directives may appear anywhere comments are per- mitted (see > section 2.2) and are treated as comments, except that they affect > the reading of subsequent data. The #!fold-case directive causes > the read procedure to case-fold (as if by string-foldcase; see > section 6.7) each identifier and character name subsequently read > from the same port. (It has no effect on character literals.) The > #!no-fold-case directive causes the read procedure to return to the > default, non-folding behavior. > > There is a functional difference between the two formulations when > reading from a terminal. On POSIX systems, a terminal device will > return EOF when CTRL-D is pressed, but then subsequent reads may > continue to read more data. > > This raises the question of whether the #!curly-infix read option should > be reset to the Scheme implementation default when CTRL-D is pressed at > a terminal. I interpret the current language to mean that the flag > should be reset, but I would prefer that the flag retains its setting as > long as the port exists. > > Following the R7RS language also simplifies the handling of reader > directives by giving them uniform behavior, and also makes it crystal > clear that the flag should be set on a per-port basis (as opposed to a > global flag for the process or thread). > > What do you think? Sounds like a great rationale to me. In general, we want to be consistent with how other things are done unless there's a strong reason not to be. New text: "After reading this marker, the reader <em>MUST</em> accept curly-infix expressions in subsequent datums read from the same port until some other conflicting marker is given (no conflicting marker is specified here)." --- David A. Wheeler