Blocking points for further D adoption

David via Digitalmars-d digitalmars-d at puremagic.com
Sun Jun 5 05:58:56 PDT 2016


As someone who recently tried D and dropped it to learn Python I 
can tell you, tooling was not an issue for me. I worked on a 
windows computer (which it seems a lot of this community are 
linux users based on the examples I see in the 
documentation...very *nix type examples) I will say I had dmd + 
codeblocks up and running and a hello world programming printing 
to the console in < 20 minutes.

D's major issue is it doesn't have much of a presence on sites 
like stackoverflow (or at least they don't appear to show up well 
in my google searches) and the documentation google does give me 
links to are poorly done. Two main issues I saw? Broken links and 
poor examples. Also occasionally I get pages that look like a 
different a style from google searches than the main 
documentation pages, which makes me feel one is outdated. I ended 
up actually just going to dlang.org itself to be sure...

But I should probably show some examples, because this post is 
meant to be productive not just critical.

Looking at the std.algorithm module page we get a description of 
functions that...well aren't really descriptions. For instance:

clamp	clamp(1, 3, 6) returns 3. clamp(4, 3, 6) returns 4.

Yeah...that does not explain anything. Definition writing 101 
tells you to never use the word you are trying to define in the 
sentence defining it. In fact, most of the descriptions for the 
functions in std.algorithm should probably come with better 
descriptions. D doesn't offer a lot of return on investment for 
learning it, so you could at least make it easy to learn...

isPermutation	isPermutation([1, 2], [2, 1]) returns true.

^^^ How is that helpful? BTW, I'm getting this from this page:

https://dlang.org/library/std/algorithm/comparison.html

Now, if I click on each function I get a little bit better of an 
explanation (in some cases), but why have a useless description? 
It serves nothing and just distracts. You might as well as not 
have a description column on std.algorithm, and just provide 
links.

The other beef I see, is that examples for functions seem like 
they are just ripped from random unittests and frequently 
reference other standard library calls without context of what 
they are doing.

For example readText:

https://dlang.org/library/std/file/read_text.html

It provides an example of this:

import std.string;
write("someUniqueFilename", "abc\n");
scope(exit)
{
     assert(exists("someUniqueFilename"));
     remove("someUniqueFilename");
}

enforce(chomp(readText("someUniqueFilename")) == "abc");

So reading it, it looks like we crate a file with "abc" in it, 
then do some scope(exit) thingy, then assert the file exists, 
then remove it? Odd...

Then we move down and it looks like "after" we delete it we read 
the file using "readText" and make sure it's contents are equal 
to what we wrote to the file? So first thing I had to do is look 
up what the hell scope(exit) was doing and found that it gets 
called when the scope gets killed not inline where it was. Ok 
fine. That sounds useful. So by the time we get to the readText 
line we still have a file. But what the hell is chomp? Do I need 
chomp to use readText? Turns out...no...I read a file literally 
by doing auto text = readText(fileName). So yeah...

To understand this example I had to a lot more work than I should 
of had to just understand how to use readText correctly, and it 
turns out I didn't need to do 90% of the code for my purposes, 
which means the rest is really more of just a distraction. Sure, 
I learned what scope(exit) does and what chomp did, but I didn't 
need them.



More information about the Digitalmars-d mailing list