D 2.065 released with 396 fixes and improvements
dlang.org
dlang.org
D might be for you if you're heavily into C++ template metaprogramming and wish it was neater and more expressive and all around more powerful.
Go is rather what Java 1.0 should have been, 20 years later.
I would dispute the fact that the type system is the a big draw to D. Whilst it is an improvement on C++, it is still hampered by the fact that it is ultimately descended from the ALGOL lineage. Advanced type systems lie with the MLs and Haskell, languages that Rust's type system is inspired by. What D has over Rust however is its expressive template metaprogramming. Templates have their shortcomings, but they are still a powerful form of static code generation that can really empower library developers.
My main point was that they follow the school that you need expressive type systems, even if as you noted, each has different strengths.
And both, each with a different set of mechanisms, allow for some sort of compile meta-programming.
Compared to Rust, D is rock solid stable, relatively. Ok, seriously. Rust seems to specialize on low-level or high-performance code. D also allows for high-level easy programming (aka Java) due to its simpler type system, garbage collector. However, D does not sacrifice performance. I think Rust will find its niche more as a C replacement than a C++ replacement.
I'm surprised that D lang even has a goto statement.
goto (used judiciously and sparingly) is fine and easier to understand and reason about than other flow control mechanisms would be in many situations.
It gets tiring constantly hearing this. We discussed it in depth 18 days ago [0]. I'm going to copy and paste something I said then, as it's relevant to your post:
> Also, a minor rant here: Dijkstra's "Go To Statement Considered Harmful" is often mentioned, sometime wordlessly, when goto is brought up, but it seems many of those people misunderstood what was actually being argued. Although he mentions being "convinced that the go to statement should be abolished from all 'higher level' programming languages," his main gripe was that the "unbridled use of the go to statement has an immediate consequence that it becomes terribly hard to find a meaningful set of coordinates in which to describe the process progress." He felt it was "as it stands is just too primitive; it is too much an invitation to make a mess of one's program." So, as others have pointed out already, his main issue was with goto being used in a way that resulted in unstructured, hard to understand programs.
[0] https://news.ycombinator.com/item?id=7191201
Edit: The original paper [1] is so short, it might as well be required reading before people bring up goto near any mention of "considered harmful".
[1] http://www.u.arizona.edu/~rubinson/copyright_violations/Go_T...
Replace the "goto" with "Throw", "break", or "return", or any other construct, and you'd come up with the same problem.
goto cleanup;
/* ... */
cleanup: foo();
... is perfectly idiomatic C. It was the brace style that was the real stinker there.Thankfully he's got the whole section on his site. http://www.stevemcconnell.com/ccgoto.htm
Most of the reason for this is the lack of higher level language constructs (e.g. `finally`). Keeping goto around for cleanup reminds of me of performing demolition with a nuclear bomb.
Personally, I'm not sold that this is enough to argue for the removal of goto. I don't think goto-cleanup is the only sane use case of goto.
C++ should focus on RAII destructors, such as std::lock_guard. I can't think of a legitimate time to use "goto" in C++, unless you were forced to emulate C for some reason.
So a goto is the only thing that can solve this problem.
I'm doing a technical review of an upcoming book on D that I believe should be coming out the latter half of this year.
1. Jonathan Davis' list of changes since TDPL came out: http://forum.dlang.org/post/mailman.647.1327135415.16222.dig...