Two "references" to dynamic array, why not change both when reallocating?
Ola Fosheim Grøstad
ola.fosheim.grostad at gmail.com
Wed Nov 11 21:21:39 UTC 2020
On Wednesday, 11 November 2020 at 13:30:16 UTC, Simen Kjærås
wrote:
> The short answer is 'because that's how we've chosen to define
> it'. A more involved answer is that changing every reference is
> prohibitively expensive - it would require the equivalent of a
> GC collection on every reallocation, as references to the array
> could exist anywhere in the program, be that on the stack,
> heap, even on other threads. That's the performance side of it.
No... Not true. But either way, D and Golang only have simple
windows onto memory rather than dynamic array ADTs. That is bad
for correctness, static analysis and ownership modelling. A
simple choice, plausible for libraries, but bad for application
code. If D is going to support non-GC code well, it has to change
this. C++ got this right btw, where slices can only decrease in
size.
Then again, extending arrays is generally a bad idea for
performance in all languages... So try to avoid increasing size
after initial building.
More information about the Digitalmars-d-learn
mailing list