Adding loop primitives/optimizations (was Making Set/Dictionaryetc. loops more robust)

Tim Rowledge tim at sumeru.stanford.edu
Wed Dec 1 19:46:46 UTC 2004


"Joshua Scholar" <jscholar at access4less.net> wrote:

> Since I was only talking about iterating over primitive types like arrays,
> it's not possible to change the size of the collection while iterating over
> it.
Really? Consider what happens in this:-

|array newArray|
array := Array new:10.
1 to: array size do:[:i| array at: i put: i squared]. "ok"
array do:[:el|
	newArray := Array new: el +3.
	array become: newArray]

Warning - this code might cause brain damage. Never underestimate the
excitment #become: can cause, nor how often some demented ninny will
spring it upon you.

A more prosaic example might be a stream on an Array. You can add extra
elements to the array which in the Squeak implementation replaces the
array with a bigger one BUT IIRC older Smalltalks used a become to do
that grow. Now add in multiple threads and life can get very
complicated. 

tim
--
Tim Rowledge, tim at sumeru.stanford.edu, http://sumeru.stanford.edu/tim
Useful random insult:- Talks to plants on their own level.



More information about the Squeak-dev mailing list