Why we cannot use string in mixins?
ag0aep6g via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Feb 27 15:48:09 PST 2016
On 28.02.2016 00:29, mahdi wrote:
> I read this criticism about D on Reddit and it claims that you cannot
> use strings in mixins. Can you please elaborate about this and the
> reason behind it?
>
> QUOTE:
> Look at strings: they are defined as immutable(char []).
immutable(char)[] actually
> "immutable" as
> in "you could put it in ROM", ... CTFE can't see strings correctly
> (can't be determined at compile time). So rather than fix the compiler
> so that strings can be used in mixins in the way that people expect it
> to work even if that means making them something other than
> immutable(char []), they decided to start using enums where strings
> actually go. Seriously: take the same code and replace 'string "foo"'
> with 'enum "foo"' and it starts to work!
> END QUOTE
I can only guess that something like this is the perceived problem:
----
string hello(string who) {return "hello " ~ who;}
void main()
{
string w = "world";
static string hw = hello(w); /* Error: variable w cannot be read at
compile time */
}
----
The poster seems to be puzzled as to why the compiler refuses to see
that `w` is a constant. It's even marked "immutable"!
As noted above, `w` is not immutable, though. Only the elements are.
Also, `immutable` does not mean that the value is a compile time
constant. Immutable values can be constructed at run time, and then they
can't be used at compile time, obviously. `enum` values, on the other
hand, are compile time constants.
More information about the Digitalmars-d-learn
mailing list