What would Squeak be like without non-local returns
ncellier at ifrance.com
Wed Nov 7 01:39:43 UTC 2007
Your example is very speaking.
Searching such workaround and artefacts is contrary to Smalltalk spirit.
The simpler, the better, since it enables focusing more on contents than
Rob Withers a écrit :
> Are you saying you couldn't do without this feature? I have to agree,
> but still the question is worth asking.
> ----- Original Message ----- From: "nicolas cellier" <ncellier at ifrance.com>
> To: <squeak-dev at lists.squeakfoundation.org>
> Sent: Tuesday, November 06, 2007 4:03 PM
> Subject: Re: What would Squeak be like without non-local returns
>> Rob, ask this to a Compiler, an interpreter, but not to a Smalltalk
>> programmer please!
>> Rob Withers a écrit :
>>> I'll just throw this out and see what turns up. As you have
>>> probably heard, I am toying with adding eventual refs to Squeak.
>>> Unfortunately, they don't play well with non-local returns. Igor and
>>> I had been discussing what could be done with methods having
>>> non-local returns adn it is looking nasty. So I thought to look at
>>> another piece of the puzzle and question its existence. How important
>>> is non-local return to Squeak? What would Squeak look like without it?
>>> So I thought of the first use of it, detecting an object in a
>>> collection. Here is #detect:ifNone: with non-local return:
>>> detect: aBlock ifNone: exceptionBlock self do: [:each | (aBlock
>>> value: each) ifTrue: [^ each]].
>>> ^ exceptionBlock value
>>> and here is a version without non-local return:
>>> detectNoNonLocalReturn: aBlock ifNone: exceptionBlock | foundElement
>>> index each |
>>> index := 1.
>>> [foundElement isNil and: [index <= self size]] whileTrue: [
>>> (aBlock value: (each := self at: index)) ifTrue:
>>> [foundElement := each].
>>> index := index + 1].
>>> ^ foundElement isNil
>>> ifTrue: [exceptionBlock value]
>>> ifFalse: [foundElement].
>>> Hopefully someone can do better. As it stands it is much worse and
>>> I just don't know how to program in Squeak without non-local
>>> returns. It feels like there is a missing helper method in there or
>>> something. I don't know. At the point of detection we know we want
>>> to return that thing and the rest of this mathod just transfers it
>>> down to the end of the method. Noise.
>>> Tell me what you think!
More information about the Squeak-dev