spir <[email protected]> wrote:

Oh, yes. You mean since the string data is immutable, there is no risk in sharing strings?

Exactly.


Does this really mean (like lisp lists, for instance), that b really shares elements (chars) with a? (So that, if they were mutable instead, changing chars in b would then change a?)

Indeed.


Right. I'll use dup, seems more self-commenting for me.
By the way, is it possible to alias funcs/methods like types? (I'll try...). To me,
"copy" would be far more obvious than "dup" ;-)

Sure you can alias functions. However, .dup is kinda special, so you'll
have to write a helper function for it:

T copy( T )( T arg ) {
    return arg.dup;
}


auto names =new dchar[][](numNames, nameLength);
[snip]
Is "auto" here used because it looks stupid to repeat the type, which is neccessary on right side?

Yup.


Also, let's say names are dstrings (by casting once built) instead of dchar[]. Is it still possible to dimension names at startup? I mean, how to tell D the size of elements (names)?

Yes. This works:

char[] a;
a.length = size;
string b = cast(string)b;

One other good way to build strings is to use std.array's appender.
http://digitalmars.com/d/2.0/phobos/std_array#Appender


dchar[nameLength] name;
//...
names[i] = to!string(name[]); (since it's a static array in this case, you have
to slice it to pass it to to!()).

Hum, I'm not sure this works because nameLength is a variable,; or does it? (I'll try)

It shouldn't, no.


It looks strange to me to define a static array from a variable length ;-) Is the memory allocation issue really relevant, since if it's not allocated for name, then it must be for names[i]?

Seems like the same cost, only different locations to me.


Also, would idup work here, instead of (pseudo-)slicing? (I'll try this, too)

It would. The slicing is only used because Jonathan was assuming a to be
a static array.


Right, later I'll see what D ranges are (only read evocation of them as of now). I suspect they are more or lass what is often called iterators in other languages (or cursors in Eiffel).

They're mostly a pair of iterators, thus safer than the single iterators
offered by other languages.

--
Simen

Reply via email to