[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