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._ "

Reply via email to