Here are a few more "basics" that are unneeded or confusing. Lets not even talk about the more advanced features like inout, ...

/-/

* auto: Static typed language yet we fall back on the compiler to figure out what is being assigned. Can just as well have a interpreter language. It only encourages lazy writing and has a penalty on the compilation.

/-/

* to!string, to!... requires "import std.conv"
* basic string manipulation requires "import std.string"
* join, replace, replaceInPlace, split, empty all require std.array
* ...

... these are basic language features, yet its required to included each of those libraries to every file you need it. A lot of languages have basic functions as standard or dynamically include the required code upon compilation ( or error if you have a double naming ). The time saved on auto compilation, can be reused to do the above mentioned. Two birds with one move.

/-/

* splitLines vs split .. std.array vs std.string

It confuses people because split is part of std.array but splitLines is part of std.string. Really! Most languages simply have split as a basic language feature and you indicate what you want to split.

Its not the only confusing or double function that is present in the standard library.

/-/

* scope() .. just call it "defer" just as every other language now does. It only confuses people who come from other languages. Its now almost a standard. By using scope people have have no clue that D has a defer. Took even me a while to know that D had a defer system in place.

/-/

If you have a few more weeks, this list is long :)

Unfortunately, because the code base it is impossible to fix these issues as too much code depends on it. The libraries, packages, ...

Reply via email to