There are lots of possibilities to implement
strings of characters such
that the interface can pretend a string
is just a vector of Unicode Scalar
Values, while representing most characters
by 8 bits if possible.
One of the alternatives is representing
strings in pieces that are
homogeneous with respect to whether
they use 1, 2, or 3 bytes per char.
When string-set! modifies a character
such that its width increases,
the string is either split further,
or an entire section of the string is replaced
by a wider representation. The access
time becomes O(log |string|),
eventually but with very small constants.
This is a matter of personal preference,
but for Scheme I would rather
like to see more advanced implementations
of strings with a simple
interface than simple implementations
with a complicated interface.
The most simple interface I can think
of is "string = vector of char".
In fact, I would even prefer if the
default 'string' type in Scheme would
behave like a type of constants---exactly
like 'integer' which involves a
fair amount of magic behind the scene
but is conceptually simple and
often amazingly efficient.
Sebastian.