Metaprogramming is less fun in D
epi.github.io
epi.github.io
It's a nice little anecdote about why you might want to use D in place of C++.
Java and C# are statically typed, garbage collected languages with a huge adoption and massive amounts of tooling.
D's attempt to become an alternative to C and C++ was eclipsed by Rust, which doesn't have the GC overhead and has a ton of other really compelling features.
There are a bunch of other new and exciting languages too: Go, Nim, ...
Why would anyone choose D today? (Serious question.)
It also compiles to native exes as the normal procedure. You can do that with Java / C# in special cases though.
D is much easier to pick up than Rust. Rust seems to take the runtime overhead of Java/C# and put it into your brain overhead during typing time.
D has very fast compile times, Rust has very slow compile times.
I should add that the GC actually works perfectly fine for normal work, it justs not up to the competition (Partly because of having to work with traditional dynamic memory).
I considered C/++, Rust, Go, Nim and D.
D won because:
* Less manual memory management
* Awesome compile-time errors (this is absolutely key)
* Super easy tooling setup
* High-level abstractions in stdlib
* Still reasonably fast
* AOT compiled, which was a hard requirement for what I was researching
D and it's errors were just easier.
Not to say Nim isn't on my radar for new things, it just didn't quite fit at the time. (However, my first prototype was in Nim!)
Unfortunately not, as I no longer have the right to publish it, and it hasn't appeared in the journal yet.
But basically, partial evaluation of the AST to create a fully type-inferenced statically typed F-expr Lisp. Makes JITing faster.
a thesis, just produce a proof of concept
D is unpopular , and I really believe that going after c++ was a bad idea .. if this was not clear at first, it should be clear by now, yet almost 100% of the article i see on D never stop from claiming how much better it is compare to c++
I guess the lesson learned from D's unpopularity is, when creating something dont focus on one competing tool
I recall how one time Linus Torvald, bashed subversion on how "Its goal is to be a mostly compatible successor to the widely used Concurrent Versions System" -- Wikipedia
Was a horrible design choice from the start
By focusing on C++ they added a GC, as an advantage (because C++ didnt have a GC) but now that many people priase Rust for not having a GC and arguing they prefer C++ over D for it ... now they are trying to dis-integrate the GC ... very reactive, design decision ... and i doubt this will help much
And I see the same from Rust and Go communities, hell I see it in Swift and Java communities a fair bit too.
That's not a real argument for or against a language. It just says the community will actually compare itself to other languages in similar fields. X vs Y articles are dime a dozen.
Some of Ds library inspired things in the new C standards, and D is influenced by other languages. I fail to see how that is a bad thing.
Common Lisp influenced Closure.
CoffeeScript influenced ES2005.
C has influenced Go.
Python, Nim.
That's just natural evolution. A language trying to become more flexible, is a good thing.
C++ is an incredibly popular collection of footguns and its replacement is a noble design goal.
Conversely, SVN is one of the tools which I use to archaeologize within a C++ codebase. It might not be right for the Linux kernel or other FOSS projects, but in the corporate world it works fine.
Really? So like your abstract goes in the main function, or how does that work? Do you use reference types for citations or just external symbols?
Good choice of language; though, who wants a "Ph. C++" or "Ph. Rust" affixed to their name, know what I mean?
I used a combination of Literate D [0] and pandoc to create the finished paper.
Ph. PLT still really doesn't stand out.
D has a documentation generator (Ddoc) as part of the language. It turned out to be useful as a standalone documentation generator. The dlang.org website is built using Ddoc, and I've even published a couple books in Ddoc. It feels a bit weird running a compiler over your marked up text, but that feeling passes after a while :-)
i think, it might be worth it if you guy investigate areas like these, many trading platforms have interfaced to c/c++ if D and be added as a drop in replacement, with some more safety guarantees, you have a big niche market here that D can survive on for a long time
Rust isn't just a better C++, it imposes a new paradigm over resource management (lifetime oriented programming?). If you're coming from C++, you have to change your way of thinking. D doesn't try to make you follow any paradigm (for the better and for the worse) ; and its syntax will feel natural and terse for a C++ programmer.
My experience (10 people team) has shown all C++ programmers can learn D very quickly. Is this the case for Rust?
> Why would anyone choose D today? (Serious question.) Native speed, on-demand deterministic destruction, on-demand memory safety, metaprogramming, fast compile times, terse syntax.
A major pain point probably is that people never really followed the "conventions" of C++ resource management as rigidly as Rust enforces them.
That's exactly right. Rust does a great job moving idiomatic C++ best practices into the type system and actually forcing you to do it "right". And alot of the early pain people run into when switching to Rust is learning how to do this. I suspect very experienced C++ programmers have alot less challenge getting spun up on Rust. It's sorta front-loading the pain of discovering and learning C++'s best practices.
As a side effect, though, it means alot of Rust evangelism misses the mark as it mostly reveals their own C++ weaknesses (this is, on a different level, an indictment of C++, and its learning curve, but not really in the ways the evangelists often believe).
The reflection is IMO the killer individual feature (well, hand-in-hand with the codegen to actually use it). The rest is just the benefit of 1000 small things that all add up to a greater whole.
PS, I used to enjoy your posts on SDN, before the site owner threw a fit. :-)
Phobos, the D standard library, makes C++ standard library look very small. C++14 standard library still can't do "ls", "execvp", "socket" in a portable way (but we finally got std::thread and std::function!). Phobos can do all of this, and also haves support for md5, gzip, diff, sort, getopt, json, xml, ...
Thus the need for an external library is a lot less likely than it is in C or C++, and you almost never spend time rewrapping native stuff: it's already done by Phobos.
And in the end, if you need to use some specialized library, D can call C and C++ functions with zero overhead (I have D projects that use CGAL and SDL).
Compiles(with DMD, ldc and gdc are still fast but are not as fast) are fast and
D is not really comparable with Go (For example). D is much more complex (and I my opinion simpler to write through said complexity, but obviously opinions differ), whereas Go is supposed to be simple to learn and implement.
1. Java and C# are designed around JIT compilation, which results in a number of architectural choices that may or may not be to your liking.
2. The JVM and CLR are pretty heavyweight pieces of machinery.
3. Neither Java nor C# are particularly well-suited for working "close to the metal".
> D's attempt to become an alternative to C and C++ was eclipsed by Rust, which doesn't have the GC overhead and has a ton of other really compelling features.
This goes both ways: Rust doesn't have a GC, so if you want one, you're out of luck. For example, for most of what I'm doing – where GC works fine –, Rust offers me no benefit, but significant costs (note that this is a matter of application domains: the ones that Rust is designed for are simply not ones that matter much to me).
> There are a bunch of other new and exciting languages too: Go, Nim, ...
Go and Nim are indeed the languages that D is competing with more directly, but there's nothing wrong with having competition in this area, given that all of them are relatively new.
And is we talk meta-programming, I think D goes further in the Stepanov style: https://www.youtube.com/watch?v=LIb3L4vKZ7U
How efficient is the garbage collector, and are there pauses?
Yes.
> How efficient is the garbage collector, and are there pauses?
Not very efficient, and there might be pauses if you are not careful. Now if your closure doesn't escape (just a local function + context) it won't use the GC. So you can use delegates in @nogc code.
Here is a Qt/C++ tasks[1] that greatly simplified async programming using Qt's event system.
Also DConf is just around the corner (tickets close tomorrow?) so expect more.
i dont know what have changed to make it work in the future
i dont remember Go or Rust ever focusing on comparing themselves to another language as much as d compare itself to c++
d should create its own path same way any other more popular language did
When I want a GC'd C-like I use Go.
D has to find a space between those two for me and a lot of other people.
I don't dislike D. I think D has a LOT of great work done in it. I just really want all my libraries to be able to be used without GC. And I'm not sure it's really feasible to have each foot in either world and not just get split down the middle.
Can someone argue against this worry? It's literally the only thing stopping me spending more time with D.
Also I've been coding in Ada (lord help me) for fun. Contracts are interesting.
You can delete objects early, or call GC.disable
If you have called GC.disable, the collector becomes `return;`. Sure, the GC function is called, but it doesn't do anything, it just immediately returns.
This does seem to come up sometimes. I'm wondering if it makes sense to add a "end-vision for GC-less D" section to the D GC documentation, now that there are various undertakings to make it easier. Might also help with finding volunteers that care about @nogc to help out with various bits.
`void main() @nogc { /* ... */ }`
Done.
I've written a log of `@nogc` code lately.
Subsetting languages (and comunities) usually doesn't end well...
[0] http://dconf.org/2016/talks/watson.html
[1] https://wiki.dlang.org/Language_design_discussions#Automatic...
[2] http://www.digitalmars.com/d/archives/digitalmars/D/ARC_in_D...
Go has Google.
Swift & ObjC has Apple.
D... Doesn't have a large mindshare/corporation backing it.
Rust and Go .. made better design choices that made them more popular
[citation needed]
I wrote a Fizzbuzz implementation. I did it to test language features. As language features and the standard library kept on changing, I kept updating my repository. It's had something like 70+ commits to it since 0.6 days.
https://bitbucket.org/iopq/fizzbuzz-in-rust/src/d4638b2ba3f0...
it's a little bit more complicated than necessary BECAUSE it's a test of new functionality (even now it only compiles on Nightly)
but it has a certain charm to it (fizzbuzz done in a few filter and map operations)
I don't think Go would have been popular without Google. It's easier to sell a solution to your manager when it is backed by a big org, and when people are paid fulltime to work on it. Same for Rust and Mozilla. The barrier for adoption of new languages is pretty high today in enterprise space.
and why isnt dart more popular
Ruby became popular because of Rails.
Dart isn't popular because it was designed to be a browser language but did little to court Web developers who like JS (contrary to the HN consensus, a lot of Web developers actually like JS) or other browser vendors.
more examples that debunk that corporate backing is what made rust or go ... are scala and clojure, scala being way more popular than d and clojure ... and neither have corporate backing
in conclusion, you dont really need corporate backing if you have a nicely designed language that have its own path
Cs syntax can be awful. Similar symbols with different meanings. But, it was powerful, fast and simpler than some competitors.
Bash is frequently used today, for all sorts of things. Its even in production products, like git. However, even its creator thought it was a kludge.
There is no simple answer to language success, but a large group of people adopting and improving a language is probably going to be helpful.
d is unpopular because of poor project objectives and positioning and playing catch up with other languages rather than leading in any specific area
d needs a novel idea ... i guess they made bet on execution rather than innovation
two legendary programmers
I had a strong interest in D from 2007-2009. The problem is that there were two competing, incompatible standard libraries for D1 (Phobos and Tango). Then came D2, which was a large improvement, both language-wise and library-wise, but basically split the ecosystem in three for some time.
I think the library and D1 vs. D2 situation stifled the growth of D. I gave up on D because the community was so fragmented.