DIP 1025--Dynamic Arrays Only Shrink, Never Grow--Community Review Round 1

Meta jared771 at gmail.com
Mon Nov 11 20:50:07 UTC 2019


I've never been comfortable with the fact that T[] can refer to 
any type of memory, GC-allocated or not (or T*, for that matter), 
but I think this DIP is not the right approach. It severely 
pessimizes one of the most common use cases of slices in order to 
prevent memory corruption when the slice does not refer to a GC'd 
array. While this could be a big gain, it is also definitely a 
huge loss in terms of how much code would be broken.

I completely agree, though, that the fact that ~ may change 
slices referring to non-GC'd memory to GC'd memory is not a good 
thing - I just think this DIP would break too much code.

I can't see a clear way forward, either, because at a fundamental 
level in the type system, D treats GC'd and non-GC'd pointers the 
same. Therefore, it would not be enough to introduce a new type 
that exclusively refers to GC-allocated memory (i.e., new T* / 
T[new], or whatever), because slicing would still have to be 
disabled for non-GC'd pointers, and appending would still have to 
be disabled for non-GC'd slices.

Would it be enough to put an assert in GC.realloc/extend/free 
that asserts the memory is GC-owned, maybe tied to a compiler 
switch?


More information about the Digitalmars-d mailing list