Meta-programming has trade-offs, which is why languages like Go chose to avoid it. The main ones are:
* **Added Compile Time.** Nim is already implicitly taking a stand that you shouldn't do your compiling on a low-end machine, and I believe that we are on the right side of history. (This is compared to for example Go. C/C++ compiling is much slower even without meta-programming, due to bad and/or ancient language design.) Developer machines are becoming faster, CPU power is becoming cheaper, and you can also compile via a remote server / "the cloud". **BUT** there's still room for improvement, like caching. Some code generating tasks need only be done once. * **Code Reading Difficulty.** Again, Nim's philosophy already sides with tool-aided developer productivity over the hypothetical need to ever read the code in Notepad / paper / cave wall. And, again, we're on the right side of history - this makes Nim better than the less powerful alternatives. **BUT** we still need better tooling. Your IDE must be able to tell you what anything and everything is, including compile time code transformations (with specific limits).
