Walter Bright:

I'm aware that D2 offers many opportunities to improve the code :-)

One problem I am seeing is that there is a large distance from the bare-bones code D2 requires you to write, and the code that I now regard as good D2 code. And the D2 compiler doesn't require or pushes you much toward the better code.

You can see that even for in the smallest things, like:

foreach (i; 0 .. 10) {
    writeln(i);
    i++;
    writeln(i);
}

I suggested to make that variable i an immutable by default. Currently it's a mutable and nearly no one bothers to write the correct and safer code:

foreach (immutable i; 0 .. 10) {
    writeln(i);
    writeln(i + 1);
}


The moral of this story is that a language needs to be designed to have by default the best&safe idioms (but avoiding excessive amounts of typing as Ada). This is a hard balance to find.

Here you can see two examples of code that show the difference from the C-style code that compiles with D2, and the code you can write in D2 only if you push yourself a lot to express more invariants and more precise typing:

http://rosettacode.org/wiki/Hidato#D

(The two programs are similar but they don't do exactly the same things. The second program is longer also because it does a little more). Most of the D code you see in the wild is the C-like code of the first kind.

This problem is present even in Ada code or F# code, but in F# the "basic" style of coding is rather safer than D written in the bare bones C-style, and it's rather crisp.

Bye,
bearophile

Reply via email to