**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.
