On Sun, Feb 9, 2014 at 7:10 PM, Bill Janssen <[email protected]> wrote:

> I just want to be able to get my hands on the inner scope blocks.


This you can't do, by design. When a dynamic language is implemented as a
straightforward interpreter, local environments are just hash tables and
it's so easy to expose them as first-class values that it's difficult to
resist the temptation to do so – especially since it seems like such a
powerful feature. But allowing local environments to escape is a disaster
as soon as you want to optimize your code. Unless the compiler can prove
that the local environment can't possibly escape, it can't optimize
anything, because if the local environment escapes, basically any crazy
thing can happen at any point in time: every function might change the
value of every local binding, including changing the type of values that
variables are bound to and introduce entirely new bindings. Not only is
this terrible for compilers trying to optimize code, but it makes it
equally as impossible for programmers to reason about that what code will
do. Sure, you can tell people not to do that sort of thing, but then why
allow it in the first place? These are exactly the kind of marginal
features that make traditional highly dynamic languages so difficult to
optimize. Rather than implementing fancy compiler shenanigans that try to
prove that local environments don't escape, Julia simply doesn't reify
local environments, via eval or otherwise.

Sorry for the rant, this should probably go in our FAQ.

Reply via email to