Re: Update, near finalization
Aubrey Jaffer 13 Apr 2005 23:02 UTC
| Date: Wed, 13 Apr 2005 11:44:07 -0700 (PDT)
| From: bear <xxxxxx@sonic.net>
|
| On Mon, 11 Apr 2005, Aubrey Jaffer wrote:
|
| >But this pissing contest should be largely irrelevant to R6RS --
| >SRFI-63 is more capable (uniform arrays), better integrated with
| >R5RS (specifying vector, string, and EQUAL? behavior), compatible
| >with SRFI-58 array syntax, and better designed than SRFI-25.
|
| Actually, I think that specifying string behavior in a document
| about arrays is a mistake.
|
| The operations we want to do on strings are in many cases
| fundamentally different from the operations that are efficient to
| do on arrays. For example, inserting or deleting text at an
| arbitrary point in the string are two of the most fundamental
| operations in text editing, and if strings are represented as
| arrays, they require the program to touch all subsequent characters
| in the string every time one character is inserted or deleted.
I had similar thoughts writing the initial version (Nov 2004) of
SRFI-63; and put in its issues section:
I removed character arrays (from SRFI-47) because, as I read R5RS,
the number of distinct characters an implementation supports need
not be finite; thus character elements might require an unbounded
size of representation.
Character arrays are can be supported based on strings; but they do
not necessarily have access times comparable to other types of
arrays.
But then I realized that access of shared arrays of vectors mandates
separation of the rank-n to rank-1 index calculation from the vector
access. Since array-ref and array-set! must be able to separate index
calculation from vector access, this same principle can be used to
separate index calculation from string access.
The bounds which SRFI-63 gives for access time are the bounds for this
separated access:
Except for character arrays, array access time is O(R)+V, where R is
the rank of the array and V is the vector access time.
Character array access time is O(R)+S, where R is the rank of the
array and S is the string access time.
Thus SRFI-63 does not constrain the representation of strings. An
implementation is welcome to employ representations with faster
ARRAY-REF and ARRAY-SET! than STRING-REF and STRING-SET!, but must not
have slower ones.