Andrei Alexandrescu Wrote: > Steven Schveighoffer wrote: > > I think what Burton is saying is by annointing immutable(char)[] as the > > type "string," you are essentially sending a message to developers that > > all strings should be immutable, and all *string parameters* should be > > declared immutable. What this does is force developers who want to deal > > in const or mutable chars have to do lots of duplication or casting, > > which either makes your code dog slow, or makes your code break const. > > > > Evidence is how (at least in previous releases) anything in Phobos that > > took an argument that was a utf8 string of characters used the parameter > > type "string", making it very difficult to use when you don't have string > > types. If you want to find a substring in a string, it makes no sense > > that you first have to make the argument invariant. a substring function > > isn't saving a pointer to that data. > > > > I think the complaint is simply that string is defined as immutable(char) > > [] and therefore is promoted as *the only* string type to use. Using > > other forms (such as in char[] or const(char)[] or char[]) doesn't look > > like the argument is a string, when the word "string" is already taken to > > mean something else. > > > > -Steve > > I see. Phobos is being changed to accept in char[] instead of string > wherever applicable. As far as what the default "string" ought to be, > immutable(char)[] is the safest of the three so I think it should be that.
So far this discussion has no examples. Let me toss one out as a dart board to see what folks think: char[] s = get_some_data(); // accesses a large buffer that i don't want to copy size_t pos = my_find(s, "blah"); s[pos] = "c"; string s2 = "another string"; size_t pos2 = my_find(s2, "blah"); another_func(s2[pos2 .. pos2+4]); size_t my_find(string haystack, string needle) { // Perform some kind of search that is read-only } another_func(string s) {} --- It seems like string is the obvious parameter type to use for my_find, but it doesn't work because we're passing mutable data in. Instead we have to use const(char)[], which is less intuitive and uglier. Or did I miss the thrust of the argument?