Thomas Lord's recent insistence that a simpler Scheme is possible (including that advanced features such as first-class macros and environments should be provided, with the caveat that their use may be less performant than non first-class devices) has got me to investigate first-class environments.

Way back there's been a bit of discussion of this topic here.

The usual arguments against first-class environments are:

They're "dangerous". (IMO, dangerous is good. ;))

They mess up ahead-of-time compilation. (Well, many projects use JITs these days.)

On the pro side, we have:

They make the language definition significantly simpler. For example, Christian Queinnec's Sharing Code through First-class Environments can provide a clean account of the interactive top-level, as well as a simplified definition of letrec . In Scheme, the top-level is considered hopeless.

. In Scheme, the top-level is considered hopeless. They can describe stuff like module systems and objects (Lee and Friedman: Quasi-Static Scoping: Sharing Variable Bindings across Multiple Lexical Scopes)

They provide more visibility into the running program, so they make debugging etc easier.

They're cool and fun. ;)

So my question is: given that JITs are commonplace these days, should first-class environments be reconsidered for inclusion into programming languages?