On Thu, 11 Nov 2010 08:26:40 -0500, Gary Whatmore <n...@spam.sp> wrote:
Yao G. Wrote:
On Wed, 10 Nov 2010 20:34:07 -0600, bearophile
<bearophileh...@lycos.com>
wrote:
> Do you seen anything wrong in this code? It compiles with no errors:
>
> enum string[5] data = ["green", "magenta", "blue" "red", "yellow"];
> static assert(data[4] == "yellow");
> void main() {}
>
>
> Yet that code asserts. it's an excellent example of why a sloppy
> compiler/language sooner or later comes back to bite your ass.
Stop blaming the compiler for your own carelessness.
I fully agree with this. It's odd to see only few people opposing this,
because the feature has no merit. If the language needs to be overly
verbose in every turn, bearophile could go and use Java instead.
The "feature" of concatenating two strings together automatically without
any operator has no merit. In C it was important because C does not have
any other way to concatenate multiple strings together at compile-time.
With the way the preprocessor works, it would be very difficult to
concatenate string literals with macros. But we don't have a preprocessor
in D and D *does* have constant folding with the ~ operator.
This is a no brainer -- we need to kill auto string concatenation. It
serves no purpose, there is already a clear, concise, unambiguous
alternative that fits exactly into the language grammar.
It's like the operator precedence of logical and comparison operators was
a carryover from the B language. I'm sooo glad we got rid of that.
> In C the joining of adjacent strings is sometimes useful, but explicit
> is better than implicit, and D has a short and good operator to
perform
> joining of strings, the ~, and D strings are allowed to span
multi-lines.
I find it useful, and I like it. I like to break long strings into
smaller
ones
and put each one in one line. I know that you can do that using one
single
string, but
some syntax hightlighters don't like it that way.
Multiline strings have traditionally required stupid hacks. D might be
the only string oriented language with so many useful string literals.
Very useful in string processing.
In this case, it's not a hack, it fits precisely within the definition of
the language. It's like saying:
1 +
2
is a 'hack' to get multi-line addition working. How many times have you
written:
if((condition1 && condition2) ||
condition3 ||
condition4 ||
...)
To keep your sanity when writing complex if statements? Have you ever
felt that adding those pesky || at the end of each line was a 'hack'?
This is exactly the same thing.
-Steve