On Sunday, October 30, 2011 17:29:36 bearophile wrote: > I have translated C code similar to: > > > something foo(int n) { > int *array = malloc(n * sizeof(int)); > > int i; > for (...) { > for (i = 0; i < n; i++, array++) { > *array = ...; > *array = ...; > } > ... > } > > > Into D2 code similar to: > > > something foo(int n) { > auto array = new int[n]; > > size_t index; > foreach (...) { > foreach (i; 0 .. n) { > array[index] = ...; > *array = ...; > index++; > } > ... > } > > > Do you see the bug I have found during the debugging? > > I think the D2 compiler has to catch this bug: > > *array = ...; > > D arrays aren't pointers. Letting the compiler see them as pointers is > bug-prone, not tidy, and doesn't help D newbies understand how D represents > its arrays. > > > My bug report: > http://d.puremagic.com/issues/show_bug.cgi?id=3990 > > > Some very good comments about this topic: > http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&ar > ticle_id=135391
Arrays in D implicitly convert to their ptr property, so they essentially _are_ pointers in that sense. Now, personally, I think that it would be a good idea for them _not_ to implicitly convert, forcing you to explicitly use the ptr property, since you really shouldn't be treating arrays as pointers in D code. It's primarily when interacting with C code that you need to do that sort of thing, and the ptr property deals with it just fine. However, I don't think that you're going to find a general consensus that the implicit conversion is bad, and changing it now would likely break a lot of code. So, while I do think that it would be a good change, I really don't think that it's going to happen at this point. - Jonathan M Davis