[Squeakfoundation]What I would like to promote

Dan Ingalls squeakfoundation@lists.squeakfoundation.org
Wed, 30 Jan 2002 07:49:09 -0800


> >
>> Yes. Celeste mostly, at the moment. It really needs to be split up, and
>> some of the classes it depends upon (E.g., MailDB) need, themselves to be
>> refactored.
>
>
>So celeste could be  a good testbed for a refactoring process. Have you
>approach the celeste users and the people taking care of it. Could you set
>up a war plan to clean celeste?
>
>It would be good to extract celeste from the squeak image, do a call for
>tests and lead a refactoring efforts. This way we could:
>    - have a better celeste
>    - learn in the process
>
>I think that Celeste is "well" separated from the core so this could be
>interesting to try.

I agree.  If you look at changeSet #3746, ...
-----------------
Introduces a new image partitioning tool that is essentially a local version of majorShrink.  The idea is to pick some application like Scamper, or some cluster like all the 3D classes, and remove it, and also remove everything that is solely referred to by it.  The way it works is:
	Record all unsent messages and unused classes at the outset
	Mark the application or cluster as removed
	Note all *newly* unreferenced methods and unused classes
		and iteratively remove them as well
For example, the expression
	Smalltalk reportClassAndMethodRemovalsFor: #(Celeste Scamper MailMessage)
reports 63 classes and 155 other messages that can be removed.

Also, introduces a new method, fileOutAndRemove:... that will take such results, build a changeSet from them, fileOut everything that is about to be removed, and then remove all of the classes and related messages as well.  For the above example, this method produces a 290k fileOut, and saves about 104k from the system.  More importantly, if you fileIn the changeSet afterward, the system returns to approximately its former size, and you can run Scamper again.  It's a way to fileOut a package that never existed.
-------------------

So a year ago, that group and that method (for which there is now equivalent code in modules) worked perfectly as a module a year ago.

	- Dan