On Thursday, 22 June 2023 at 05:21:52 UTC, Cecil Ward wrote:
On Thursday, 22 June 2023 at 01:44:22 UTC, Jonathan M Davis
wrote:
On Wednesday, June 21, 2023 7:05:28 PM MDT Paul Backus via
Digitalmars-d-learn wrote:
[...]
To add to that, it _has_ to know the element type, because
aside from anything related to a type's size, it bit-blits the
type's init value onto the new elements when it increases the
length of the dynamic array.
You'd probably be dealing with bytes if you were explicitly
asking for memory and the like (e.g. with malloc), but a
dynamic array is properly typed, and everything you do with it
in @safe code is going to deal with it as properly typed. For
it to be otherwise would require @system casts.
- Jonathan M Davis
Thankyou Jonathan!
I just had a fight with LDC over the following code when I tried
out reserve. I have an associative array that maps strings to
‘ordinals’ ie uints that are unique, and the compiler hates the
call to reserve.
==
struct decls_t
{
uint n_entries = 0;
uint[ dstring ] ordinals; // Associative array maps variable
names to ordinals
}
static decls_t Decls;
enum NPreAllocEntries = 32;
Decls.ordinals.reserve( NPreAllocEntries );
source>(82): Error: none of the overloads of template
`object.reserve` are callable using argument types
`!()(uint[dstring], ulong)`
/opt/compiler-explorer/ldc1.32.1/ldc2-1.32.1-linux-x86_64/bin/../import/object.d(3983):
Candidate is: `reserve(T)(ref T[] arr, size_t newcapacity)`
Compiler returned: 1