Scheme

I really love scheme's core and I like most of the things in R6RS.

What I really with the scheme community would do, however is completely in the opposite direction:

1) Define 5 or 6 core forms (lambda, define, if, set!, call/cc and maybe 1 or 2 more) that make up the language. This would be what we call scheme and want implementors to provide. Numeric towers and what have you would be part of #2.

2) Define a core library WITH REFERENCE IMPLEMENTATION using only the core forms. Implementors could reimplement this library any way they like for efficiency, but the point is, that if only the core forms in #1 are implemented, the reference implementation would provide the entire language specification.

3) Define a handful of *platform* core forms... display, ports, things that are very platform specific. These should be make themselves visible at compile time through a conditional expansion tag, srfi-0 like.

4) Provide a reference implementation for networking and input/output given the platform core forms.

Unfortunately, IMO, the way scheme is evolving is towards combining all of these things.... and in a complex enough way that few implementations actually follow the spec, yet they all call themselves scheme. For such a simple language, they sure are making things complicated.

if they provided a reference implementation for the entire library, then whipping up a scheme interpreter would take about an hour in any language, then you could just slap on the reference implementation and immediately execute any code your heart desires. The way things are now, code is not at all cross compatible. Personally, I just settled on Gambit and pretend all other schemes are different languages.

Now, if I got all my wishes, I'd also get a reference implementation of all the above things without using the core form, "set!" and have a completely immutable flavor of scheme available, but I might be asking a bit much there. I'd also like to see the division between compile-time (macro expansion) and run-time go away, but I don't know if that's possible. My hunch is that it is and it would greatly simplify JIT.