What should other string-returning procedures do?
John Cowan
(20 Dec 2014 16:44 UTC)
|
Re: What should other string-returning procedures do? Per Bothner (23 Dec 2014 18:26 UTC)
|
Re: What should other string-returning procedures do?
John Cowan
(24 Dec 2014 01:33 UTC)
|
Re: What should other string-returning procedures do? Per Bothner 23 Dec 2014 18:05 UTC
On 12/20/2014 08:21 AM, John Cowan wrote: > I think this is an excellent SRFI, and I support it. > > However, it specifies only that `make-string` must return > a variable-length string. What about `string`, `string-*case`, > `substring`, `string-copy`, and `string-map`? Well, it does say: Standard Scheme functions that return mutable strings, such as make-string or string-copy, are specified to return variable-size mutable strings by default. > My notion is that `string` ought to be free to return either a > variable-length or a fixed-length string, and that the others ought > to be guaranteed to return variable-length strings if (not iff) their > string argument is variable-length. We could do something like that, but is the extra implementation flexibility justified by the extra complexity? There is something to be said for just having two kinds of strings: immutable and mutable variable-sized. If we allow some functions to return fixed-size mutable strings, I think it would be simpler to just specify some functions always return variable-sized strings, and some may return fixed-size mutable strings. In retrospect, it would have been cleaner if functions such as string-upcase or string-append were defined to return immutable strings, but for compatibility they must returns mutable strings, though not necessarily variable-sized ones. > Also, what about conversions between fixed-length and variable-length > strings? On Kawa, these would be no-ops, but on other systems they > might not be. If we specify that some functions (for example string-copy) always returns a variable-size string, then we don't need explicit conversion functions: string-copy will do. If we split up the r7rs string functions, I suggest: Procedures that may return a fixed-size string: string string-upcase string-downcase string-foldcase substring string-append list->string (These are functions it would be plausible for a future RnRS to specify that they should return an immutable string.) Procedures that must return a variable-size string: make-string string-copy -- --Per Bothner xxxxxx@bothner.com http://per.bothner.com/