**gokr:** _I don't know D, but I am quite sure that Nim beats D on these three 
specific meta programming aspects (just looked them up quickly)._

This is arguable. While Nim's AST manipulations are generally more powerful, 
the "string mixin hacks" are often plenty sufficient to get the job done and 
generating strings is generally much easier than generating AST structures. 
What I really want is both, not one or the other.

**gokr:** _Nim uses a VM (!) during compilation (also the basis of Nimscript) 
which means meta programming and const procs etc can be run at compile time._

D also has CTFE. That's not a significant difference.

For what it's worth, the killer difference between D and Nim for me is the GC. 
D doesn't have an incremental GC (let alone a generational one), and the (fully 
conservative, stop-the-world) one it has just isn't very good. While there's 
some interest in improving the situation, the language design of D makes it 
difficult to fix the core issues involved. This leads to D having the problem 
of trying to work around the GC not just where a GC isn't a suitable option, 
but also where D's GC runs into its limitations. In short, D sometimes would 
force me to revert to manual memory management, which I have no interest in 
whatsoever.

There are other things that I really like about Nim, but that's the do-or-die 
aspect of it. (As a result, Nim competes with OCaml for most of the work I'm 
doing, not D.)

Other than that, there's a lot of good stuff in D that I really, really like 
(Walter Bright and Andrei Alexandrescu have probably forgotten more about 
language design and implementation than I know) and where I wouldn't mind if 
Nim borrowed a thing or two.

Reply via email to