Squeak SmalltalkJoker Squeak Smalltalk : Tools Tricks Usage : prevnext Partition Image Detect Cluster

About four years ago, I got serious about partitioning the system as 
part of the Environments project.  Since I have a small brain I wrote 
a Squeak method to help, which is still in the system (except that it 
got broken by some effort to split up SystemDictionary :-(  :-(.  A 
fix is attached).  Anyway, consider...

    Smalltalk reportClassAndMethodRemovalsFor: #(Celeste Scamper 
    MailMessage)

This grinds for a few minutes, and then *automagically*produces an 
array of two very useful results.  The first is an IdentitySet 
containing 63 classes that can all be removed together with the 
original 3 without leaving any broken links:

---------

HtmlBoldEntity HtmlDefinitionTerm HtmlHorizontalRule HtmlSubscript 
HtmlBiggerFontEntity HtmlSmallerFontEntity HtmlComment HtmlInput 
CelesteCategoryFilter HtmlListItem RadioButtonInput HtmlUnorderedList 
ScaffoldingCeleste HtmlBlockQuote HtmlArea HtmlTitle ToggleButtonInput 
HtmlForm MorphicTextEditor HtmlTokenizer HtmlDefinitionDefinition 
HtmlTag HtmlStyle CelesteCodeFilter HtmlDocument FormInputSet HtmlMap 
HtmlOption DHtmlFormatter HtmlTable HtmlItalicsEntity HtmlTableHeader 
TextMessageLink SelectionInput MailMessage Celeste HtmlBody 
HtmlOrderedList HtmlParagraph WebPageMorph HtmlSelect HtmlFontEntity 
HtmlOptionGroup HtmlTableRow HtmlParser HtmlDefinitionList HtmlNoEmbed 
HtmlPreformattedRegion HtmlHead HtmlBreak HtmlAnchor 
RadioButtonSetInput HtmlSuperscript HtmlUnderlineEntity 
HtmlFixedWidthEntity FileInput HtmlFrame HiddenInput HtmlStrikeEntity 
HtmlTextArea HtmlCommentEntity HtmlEmbedded Scamper

----------

Really.  How long would it take to figure this out by hand?

And that's not all...  The second element is an IdentitySet containing 
253 selectors sent only by these 63 classes.  These are essentially 
all the "extensions" to other classes.  I won't list them, but you can 
run the code and see for yourself.

But wait, there's more...   Check out SystemDictionary 
fileOutAndRemove: (which doesn't really remove anything ;-).  This 
method accepts the tuple produced above (oops you need to coerce the 
first to an Array), and produces a fileOut of all the classes and 
extension methods -- essentially a complete Package.  I just tried it 
and got a 321K file.  At the time I wrote this code, you could file 
the resulting file into a Squeak image after removing all the above 
and then run Scamper and Celeste again just fine.

I have been encouraging the Splitters and Packagers to try this out, 
but I thought others on this list might enjoy it as well.  Hopefully 
the attached fix will encourage people who might have tried it and 
failed.

What it tells us is, wherever we can identify approipriate root 
classes, packaging may not be all that hard.

Enjoy - Dan

PS:  If you are curious how this works, it is very simple.  It is 
explained in... 
http://discuss.squeakfoundation.org/cgi-bin/ezmlm-cgi?11:mss:42:200503:
echjfhegcncflbfeeofe