D Language Gotchas

Jonathan M Davis jmdavisProg at gmx.com
Tue Nov 5 20:57:44 PST 2013


On Tuesday, November 05, 2013 13:27:54 Jacob Carlborg wrote:
> On 2013-11-05 12:16, Meta wrote:
> > One gotcha relates to enums. Writing `enum a = [0, 1, 2]` is a really
> > bad idea, because everywhere you use a, it constructs a new array at
> > runtime. The [0, 1, 2] is "pasted in", and you'll have a bunch of
> > allocations you didn't expect. This doesn't just happen with arrays, but
> > that's the most common case. What *is* okay is using string enums, as
> > strings are a bit special due to being immutable.
> 
> Isn't the problem rather that [0, 1, 2] allocates in the first place,
> regardless if an enum is used or not.

In most cases, array literals need to allocate, regardless of whether they're 
an enum or not. The cases where they don't need to allocate (e.g. when 
initializing a static array) shouldn't allocate, but an array literal by 
itself is a dynamic array, and pretty much has to allocate in most cases in 
order to be safe. Having an enum which is an array literal rather than making 
it an immutable constant then results in allocations that you might not want, 
but that's not really the literal's fault.

- Jonathan M Davis


More information about the Digitalmars-d mailing list