[prev in list] [next in list] [prev in thread] [next in thread]
List: e-lang
Subject: [e-lang] Announcing Release Candidate 0.8.29b: Scopes are constant
From: "Mark S. Miller" <markm () caplet ! com>
Date: 2004-07-09 6:16:23
Message-ID: 6.1.1.1.2.20040708231615.02ecc910 () caplet ! com
[Download RAW message or body]
At http://www.erights.org/download/0-8-29/index.html
This release fixes our main outstanding security bug: "safeScope Mutability
breaks confinement"
https://bugs.sieve.net/bugs/?func=detailbug&bug_id=125579&group_id=16380 ,
as well as the other bugs listed at
http://www.erights.org/download/0-8-29/highlights.html#bugs .
The cost of fixing these bugs are several incompatible changes, most notably
"Top Level Bindings are No Longer Retroactively Updated"
From http://www.erights.org/download/0-8-29/highlights.html#no_retro :
To fix bug "Conflict between ForwardingSlots & PassByCopy,etc..."[1], in order to
make the world safe for Auditors (and to fix bug "Reversion of FlexOuterScope
is wrong"[2]), the ForwardingSlot has been removed from the system, and old
uses of old variables are no longer retroactively "fixed" to use the new
redefinition of that same variable name.
Instead, as explained above, evaluation produces a pair of a value and a new
derived replacement Scope. In the interactive case, in order to support
redefinition, we consider each top level expression to be evaluated in a new
contour nested within the previous one, as if there was a "{" between each
top level expression.
? def a := 3
# value: 3
? def f() :any { return a }
# value: <f>
? f()
# value: 3
? def a := "foo"
# value: "foo"
? f()
# value: 3
Previously, this would have returned "foo", since the old use of a within f
would now be referring to the new definition of a. While the old behavior
was, in many ways more pleasant, the new (ML-like) behavior works with our
other requirements.
? def i :int := 3
# value: 3
? [i, var i :String := "foo", i := "bar", i]
# value: [3, "foo", "bar", "bar"]
This last example shows that it really is like nesting contours. The first i
in the last expression above refers to the definition already in scope. The
remaining uses of i refer to the new definition.
[1] https://bugs.sieve.net/bugs/?func=detailbug&bug_id=125626&group_id=16380
[2] https://bugs.sieve.net/bugs/?func=detailbug&bug_id=125624&group_id=16380
--
Text by me above is hereby placed in the public domain
Cheers,
--MarkM
_______________________________________________
e-lang mailing list
e-lang@mail.eros-os.org
http://www.eros-os.org/mailman/listinfo/e-lang
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic