RFC on range design for D2
Bruno Medeiros
brunodomedeiros+spam at com.gmail
Thu Sep 25 12:55:35 PDT 2008
Andrei Alexandrescu wrote:
> Lars Ivar Igesund wrote:
>> Andrei Alexandrescu wrote:
>>
>>> A slice is a range alright without any extra adaptation. It has some
>>> extra functions, e.g. ~=, that are not defined for ranges.
>>
>> Aren't slices const/readonly/whatnot and thus ~= not possible without
>> copying/allocation?
>
> Well there's no change in semantics of slices (meaning T[]) between D1
> and D2, so slices mean business as usual. Maybe you are referring to
> strings, aka invariant(char)[]?
>
> Anyhow, today's ~= behaves really really erratically. I'd get rid of it
> if I could. Take a look at this:
>
> import std.stdio;
>
> void main(string args[]) {
> auto a = new int[10];
> a[] = 10;
> auto b = a;
> writeln(b);
> a = a[1 .. 5];
> a ~= [ 34, 345, 4324 ];
> writeln(b);
> }
>
> The program will print all 10s two times. But if we change a[1 .. 5]
> with a[0 .. 5] the behavior will be very different! a will grow "over"
> b, thus stomping over its content.
>
> This is really bad because the behavior of a simple operation ~= depends
> on the history of the slice on the left hand side, something often
> extremely difficult to track, and actually impossible if the slice was
> received as an argument to a function.
>
> IMHO such a faux pas is inadmissible for a modern language.
>
>
> Andrei
Cool, good to see this is going to be taken care of, it is a horrible wart.
--
Bruno Medeiros - Software Developer, MSc. in CS/E graduate
http://www.prowiki.org/wiki4d/wiki.cgi?BrunoMedeiros#D
More information about the Digitalmars-d-announce
mailing list