[squeak-dev] New Tutorial on Events in Squeak, Pharo and Cuis

Peter Dinges me+squeak-dev at elwedgo.de
Sun Nov 21 04:27:06 UTC 2010

Hello Subbu,

> Good stuff. You should add it to squeak wiki so that you can directly link
> terms to their wiki entries.

thank you very much. Putting the text into the squeak wiki is on my todo list. 

Also, thank you for your clarifications on the different usage scenarios. 
Unfortunately, I think I do not fully grasp why CU events are easier for 
unknown listeners. All that a change from CU to WS events seems to require is 
maybe a relocation of the registration code(?)

[Note that my text is meant as a description of what is, not of what should 
be. What was/is important to me, is to document that several mechanisms exist 
so that people don't end up looking for errors in the wrong places.]

Suppose we have a viewer as you proposed. When a value in the viewer is 
- with CU events, viewer would issue "self changed: #valueUpdate";
- with WS events, viewer would issue "self triggerEvent: #valueUpdate".

> For instance, when up key is pressed in a list, the listener is well known
> and interested only in the happening of key press. WS is ideal for this
> case. On the other hand, when a value in viewer is changed, an unknown
> number of watchers need to read the new value. This would be a case for
> changed/update. Of course, we could use a WS when the watcher is created
> but it wouldn't be simple.
Why is it more complicated? At some point you have to tell the watcher which 
viewer to watch. So couldn't you just have a method

Watcher>>watch: viewer
    viewer when: #valueUpdate send: #doSomethingWatcherSpecific to: self

that is called during initialization (or maybe later)? It certainly has more 
characters than "viewer addDependent: self", but avoids the (possibly) huge 
distinction of cases in Watcher>>update:

Also, if the watcher watches several viewers, it has to query all of them if 
it only receives the CU event "update: #valueUpdate". (The viewer triggering 
the update might not be provided.) With WS events, above method could be 
modified to:

MultiWatcher>>watch: viewer
    viewer when: #valueUpdate
           send: #doSomethingWatcherSpecific
           to: self
           with: viewer

No code change in the viewer class is required to accomodate MultiWatcher :-)

> In your CU example, Alice would be an instance of Dresser and Bob will be
> an instance of Eater, where Dresser and Eater are subclasses of Person.
> Alice would wear office dress if the alarm went off in the morning or an
> evening dress if it went off in the evening.
I guess I overemphasized instance specific behavior. The situation I made up 
to show that CU events are less general probably rarely occurs in real code. I 
will incorporate your suggestion in the next version.


More information about the Squeak-dev mailing list