I kept finding more stuff as I got through my tests - I hope these aren't redundant, but this should be the last of my comments:

string-concatenate is in the list of procedures permitted to return shared storage/eq?-to-argument,  but the specific documentation for the procedure says "Guaranteed to return a freshly allocated string".

string-for-each-cursor -- the example code makes no sense.  The binding for LEN is unused.   Does proc take a cursor or a character?   The doc says "apply proc to each cursor".    Maybe you meant to retain the semantics of string-for-each/cursors from the previous version of the doc?

string-replicate:  The first example, either the TO argument is a typo, or the result is.  I think TO should be 8, not 4 to get a 6-character string result.


On Fri, Apr 15, 2016 at 7:21 AM, Jim Rees <xxxxxx@gmail.com> wrote:
One more thing if it's not too late:

string-concatenate-reverse:

1) minor formatting problem in the text - no space between "substring" and "final-string"

2) Can 'end' be a string-cursor?   The naming conventions would suggest so, but the text and examples only refer to an index interpretation.


On Tue, Apr 12, 2016 at 8:06 PM, John Cowan <xxxxxx@mercury.ccil.org> wrote:
Jim Rees scripsit:

> 1) One implication of the sharing option is that some of those procedures
> may return immutable strings as results not just when an argument is
> returned, but when a new object is constructed which refers to storage
> shared by one or more arguments.     Guile does this currently.

Good point.  I've added "If a shared string is returned, it may be mutable
or immutable" to the SRFI.  There is of course nothing to prevent R7RS-small
implementations from having procedures that return immutable strings: they
just can't be (most of) the procedures mentioned in R7RS-small.

> 2) The document already says that string cursors become invalid once a
> mutation has been performed on the string they came from.   Should the same
> be said if a mutation has been performed on any other string that was the
> result of a shared substring operation on the string this cursor came from?
>   (or for that matter any "relative" in the tree of substrings with a
> common original ancestor string?)

I've added "or any string that shares storage with it" to the discussion
of cursor invalidation.

Thanks for bringing up these points.

--
John Cowan          http://www.ccil.org/~cowan        xxxxxx@ccil.org
Values of beeta will give rise to dom!
(5th/6th edition 'mv' said this if you tried to rename '.' or
'..' entries; see http://9p.io/who/dmr/odd.html)