Array literals MUST be immutable.

Simen kjaeraas simen.kjaras at gmail.com
Wed Feb 17 00:55:11 PST 2010


Don <nospam at nospam.com> wrote:

> This is for me the last remaining D2 issue.
> I've mentioned this several times before. Mutable array 'literals' are  
> wrong on so many levels. Here are some of the issues, listed in  
> decreasing importance.
>
> (1) The language has no syntax for immutable array literals.
>    [1,2,3] is mutable. You can created an immutable literal using the  
> awful 'static const' syntax, but that only works for named literals.
>
> (2) Concurrency issues make (1) even more important. It ought to  
> possible to pass an array (defined at compile time) as a message.
>
> (3) Performance of the existing array 'literals' is absolutely  
> appalling. I doubled the speed of my entire app by changing ONE array  
> declaration from 'immutable [] xxx' into 'static const [] xxx'!!!
> Right now, if an array literal appears in your code, chances are it's a  
> performance bug. It's deceptive that there's a hidden heap allocation  
> happening in every array literal. It's got no business being in a  
> systems language IMHO.
>
> (4) It is unintuitive. "hello" is immutable, but ['h','e','l','l','o']  
> is not???
>
> (5) It's trivial (a one-liner) to make a function to create a mutable  
> array literal. We don't need it in the language.
>
> Mutable arrays literals are common in toy examples, but they've got very  
> little real-world relevance. By contrast, immutable array literals are  
> used in lookup tables all the time. They are extremely common. We need  
> to be able to express them.
>
> This is the only remaining thing in D2 which I'm certain is a big  
> mistake. Of course there's ugliness in various places, but it's possible  
> to ignore them or work around them. This is a primitive,  
> bread-and-butter issue with no workaround.

Absolutely. This needs fixin'.

-- 
Simen



More information about the Digitalmars-d mailing list