Should we add another SmallArray to DMD?

Guillaume Chatelet via Digitalmars-d digitalmars-d at puremagic.com
Tue Jul 5 12:41:18 PDT 2016


DMD currently provides the Array type:
https://github.com/dlang/dmd/blob/master/src/root/array.d

It is primarily designed to interact with C++.
It provides the small array optimization which is good, but its 
stack space is one element and cannot be changed, making it not 
suitable for small string buffers.

As a matter of fact we also have OutBuffer which reimplements the 
allocation strategy a second time (with no small string 
optimization)
https://github.com/dlang/dmd/blob/master/src/root/outbuffer.d

It is also quite old, not tested (at least I didn't find them), 
and does not follow D idioms.

Also note that because Array is "extern (C++)", it's not possible 
to add SMALLARRAYCAP as a template parameter (bug in the C++ name 
mangler).

Proposal:
---------
As for LLVM, create a few tested D idiomatic facilities to use in 
the front end: SmallVector, SmallString to begin with.

Here is a first take at SmallVector (no doc yet)
https://gist.github.com/gchatelet/876adfb59abe1dda58ba24d63d4e418d

I'm half convinced for now so I would like some feedback before 
investing more time.


More information about the Digitalmars-d mailing list