On 08.10.2012 11:31, Camillo Bruni wrote:
Just from the deleted wiki page on our google code project site:
Squeak startup and shutdown lists are iterated too often, and startup is
ignored by the network classes.
= Introduction =
== Squeak/Pharo Problems ==
Squeak's startup and shutdown lists are not used as such. Each snapshot forces
a shutdown and then a startup. This is not only inefficient, it is unfair to
things like open sockets, database connections, etc. Platform windows will not
be well served: imagine shutting down the entire IDE for a snapshot; something
needs to be done.
This is false, using startUp:/shutDown: serves exactly this purpose.
Dolphin does not free external resources on a snapshot. Resources are freed on
shutdown (by registering for the shutdown events) and pointers/handles are
cleared on *startup*. Having worked with it for years, I have gone from
considering it strange to believing it is the correct design.
== First Steps Toward a Fix ==
It became clear that my life would be easier given a singleton SessionManager
that triggers #sessionStarted and #sessionStopped. The open question was
whether Squeak's startup and shutdown lists with the quitting and resuming
flags would be enough to reproduce Dolphin's behavior, which is to trigger
#sessionStarted and #sessionStopped when *and only when* the image starts and
stops, respectively. Somewhat surprisingly, it appears to be. I am left
wondering why people have tolerated the need to litter images with
#initializeNetwork sends; that should be done once every time the image starts.
And this is true, you can achieve the same using startUp:/shutDown: as
you can in Dolphin.
Whether that is the best interface, or a manager/announcer would be
better is a different question.
Ironically, the session object Igor describes would necessitate the same
kind of intrusive checks as #initializeNetwork.
IMO, lazily checking whether the image has been restarted whenever you
want to do something stinks.
Registering to be notified when image starts/stops is a lot better.
Cheers,
Henry