Hi Dave, first, my compliments on your lambda proposal. This should
significantly simplify the core language after expanding sugars --
especially if you succeed at redefining function as desugaring to
lambdas. That would be awesome!


On Sat, Oct 11, 2008 at 5:34 AM, David Herman <[EMAIL PROTECTED]> wrote:
> Here's roughly the semantics of return-to-label:
>
> - return-to-label first checks to see if the label is live on the stack
> - if not, it raises an exception from the point where the return was attempted
> - but if so, it attempts to unwind the stack to the point where the label was 
> executed, passing through any intervening finally clauses
> - if any of the finally clauses has its own non-local exit, this interrupts 
> and aborts the unwinding
>
> Thank you for pointing out, though, that try/catch isn't so easily defined on 
> top of return-to-label, since it still needs special handling for finally. 
> The options are either to define a lower-level primitive underlying 
> try/finally (akin to Scheme's dynamic-wind), or to leave exceptions -- or at 
> least try/finally -- as primitive. I lean towards the latter; dynamic-wind is 
> a subtle beast.
>
> [For those interested in dynamic-wind, Flatt et al's ICFP 07 paper has a nice 
> investigation into its semantics: 
> http://www.cs.utah.edu/plt/publications/icfp07-fyff.pdf]

I haven't looked at the Flatt paper yet. But the semantics you explain
above corresponds exactly to E's escape expressions. And E also treats
try/finally primitive for similar reasons. (Historical note: The E
escape construct and the call/ec previously explained both originate
in an "escape" statement by Reynolds from a paper in the late 60s or
early 70s. I don't recall whether Reynolds had any mechanism analogous
to try/finally.)

-- 
    Cheers,
    --MarkM
_______________________________________________
Es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to