What would Squeak be like without non-local returns

nicolas cellier ncellier at ifrance.com
Wed Nov 7 04:07:26 UTC 2007

It seems like everything after has to become eventual.
But worse, some inst var could contain blocks with local return (see 
ifFail: [^nil] pre-exception-handling kind in Compiler).

object eventual ifTrue: [failBlock value].

Nothing obvious at compile time...

As already stated by Igor, you also have modern exception handling that 
could play tricks...


Rob Withers a écrit :
> ----- Original Message ----- From: "Andreas Raab" <andreas.raab at gmx.de>
> To: "The general-purpose Squeak developers list" 
> <squeak-dev at lists.squeakfoundation.org>
> Sent: Tuesday, November 06, 2007 5:55 PM
> Subject: Re: What would Squeak be like without non-local returns
>> Igor Stasenko wrote:
>>> On 07/11/2007, Rob Withers <reefedjib at yahoo.com> wrote:
>>>> E states that non-local returns are bad and we are seeing th 
>>>> implications of
>>>> that statement.  Our candidate solution of mixing non-local returns and
>>>> eventual refs is not pretty.
>>> Yeah, but we talking about Smalltalk, not E. Maybe they are bad for E,
>>> but why they should be bad for smalltalk? :)
>> Indeed. And as a matter of fact I can't recall that particular 
>> statement. Who said it and in what context? The main rule that matters 
>> to E (for many reasons) is about globally mutable state which is a 
>> complete no-no. But non-local returns? The only issue I can imagine 
>> with this is that code could conceivably "escape" from an evaluation 
>> which may make it harder for auditing but that's about all I can see.
> Well, now I can't find that statement, but I was sure I had read it on 
> erights or Mark's thesis.  I searched and found nothing.  It may have 
> been a statement regarding eventual-sending specifically with non-local 
> return.  It IS strange thinking about the correct behavior of an 
> expression:
> object eventual ifTrue: [^3].
> ^4
> What should be the result?
> What I did find was discussion about escape from a block with an 
> ejector, which I had always wondered about.  It is non-local return from 
> a synchronous send.  Click on ii.3 Escape: 
> http://www.erights.org/elib/concurrency/msg-passing.html and also 
> http://www.erights.org/elang/kernel/EscapeExpr.html
> Cheers,
> Rob

More information about the Squeak-dev mailing list