To be able to eat and keep the cake, consider a three-layered architecture: kernel, modules, distros.
**Nim kernel** Would contain just the core features so that Nim can compile itself and majority of Rosetta code problems can be solved. Very compact, very stable, very efficient, very well tested and documented. (But not designed to be very useful (or even expressive) without additional modules) **Nim modules** When kernel stuff is not enough, coder can install packages (modules and their documentation) from various repositories. Basically all language constructs that don 't need magical compiler support should be implemented as additional modules (as macros, I guess). **Nim distros** Would contain the kernel and a pre-selected collection of modules, tools, extra documentation, and such enabling a flying-start to Nim development. There should be three "official" distros available: * Nim Legacy: Anything you need so that your old Nim 0.18 code still compiles * Nim Standard: The standard Nim programming language environment (lean and mean) * Nim Dev: For those who develop the Nim itself Then hopefully communities would emerge that curate distros for their needs: Nim for Android, Nim Gaming, Data Science Nim, Nim Web, Nim Enterprise Edition, ... (And in a perfect world one could install multiple distros simultaneously without hassle) * * * This three-layered architecture could achieve the following: * Core devs (like writers of alternative compilers) can concentrate on perfecting the kernel * The decision of which features to include in 1.0 would not have such criticality (when in doubt, leave it out) * Availability of application-specific distros would keep anyone happy (all your favourite features are still pre-installed there!) " _We can solve any problem by introducing an extra level of indirection._ "
