On Sat, Nov 5, 2016 at 5:47 PM, Joakim via Digitalmars-d <digitalmars-d@puremagic.com> wrote:
On Saturday, 29 October 2016 at 22:38:07 UTC, Danni Coy wrote:
The bit that sends group 3 people off screaming is static typing, once you have accepted the need to explicitly type everything then Template functions are pretty straight forward in D.

D can probably do well with groups 1 and 2, but the level
of power and expertise that is needed for those lower levels will scare away
people from 3.  Those already using it for 1 and 2 may also be comfortable
with reusing D for scripting, but that's not attracting people from group 3,
ie those who only want something easy to use and don't want to know the
difference between a static and dynamic array.

Again this boils down to static typing, once your group 3 programmer has accepted this then is is a minor issue. At worst case I could see a grumble then avoiding static arrays.

As someone who uses all three, I think you underestimate the reluctance of many in group 3 to learn enough to drop down into the lower-level languages.

What I am saying that you loose a whole bunch of people as soon as you make the language statically typed. Of the people that you have left at worst you will have them grumble a bit and perhaps avoid using static arrays.
 
For this whip up a tool to automate some file processing quickly I
found D as pleasant as anything else I have used.

I would only use D for such a task too, but I think that is more that we are in group 1/2 and are reusing the tool we know.  I'm talking about attracting those from group 3.

I honestly don't think the D code I wrote was any less readable or understandable than the python code I wrote, In both cases there are a couple of idioms you have to learn, but the code is really concise and to the point once you know the idioms (something that makes me a big fan of both languages). In fact the file processing required less steps than the Python version. I don't think I would have a harder time explaining what the code does to a novice coder.
 

The only thing missing are bindings for a high quality crossplatform
gui toolkit.

Have you tried DlangUI?

https://github.com/buggins/dlangui

I haven't tried it much, so I can't speak to quality, but it certainly is very cross-platform.

When I mean high quality I mean competitive with Qt (the current least bad cross platform toolkit), DLangUI gets compared to the Java UI offerings which leaves me somewhat cold. I have never met a java program with a UI I liked.
 
Where I see the future potential of D in regards to the levels 1,2 and 3 is having a team where different programmers are working at different levels within the same language on the same project. Take a game engine, typically you have low level engine guys (level 1) some guys on the engine team who aren't quite as good but don't have to be (effectively level 2) and the guys who do the level / ai scripting (level 3). I would quite happily use D as a high level language in a team where I had a good lower level team designing most of the stuff I use with my level of expertise in mind as they designed it.

To this end the really critical things for me are that my level 1 guys can create code that performs in low latency environments without missing deadlines and can present their APIs in such a way that is easy/enjoyable for us level 3 guys to use (see the batch processing thread a little while back).

That's an interesting use, guess Ethan is heading down that road with his Binderoo effort.  If D can be used like this for more than just games, it would create a nice niche, but I'm skeptical of attracting much of group 3.

Perhaps - Taking a look at my D as a scripting language code, I can't see anything that would really turn a scripter off.
I basically use auto for every variable declaration.
Probably the most complicated thing I do is to use std.algorithm.filter and map.

In the former case it might be nice to have some syntactic sugar in the way that maxscript does.

for a in group where a.count > 0 do (

is easier to approach than

foreach (a; group.filter!(a.count > 0)()) {

but that is a fairly minor qwibble.

http://pastebin.com/VyAiRpyh