[squeak-dev] Re: Package unload status

Andreas Raab andreas.raab at gmx.de
Tue Jan 5 13:22:11 UTC 2010


Folks -

Here is the latest from the unloading front. In addition to the packages 
that could be un- and reloaded the last time around, namely:

> - ReleaseBuilder, ScriptLoader
> - 311Deprecated, 39Deprecated
> - Universes, SMLoader, SMBase, Installer-Core
> - VersionNumberTests, VersionNumber
> - Services-Base, PreferenceBrowser, Nebraska
> - CollectionsTests, GraphicsTests, KernelTests, MorphicTests
> - MultilingualTests, NetworkTests, ToolsTests, TraitsTests
> - XML-Parser, Traits

we can now also un- and reload:
- SystemChangeNotification-Tests, FlexibleVocabularies
- EToys, Protocols
- Tests, SUnitGUI

I decided on an intermediate approach for Tests namely to move all of 
Files-Tests, Compiler-Tests, System-Tests, Monticello-Tests etc. into 
the Tests package which removed the ClassTestCase dependency.

With the amount of packages removed, we're also starting to get into 
"more interesting" ranges for the size of the resulting images. Compare 
these numbers for example:

Image Version		Classes		Methods
Cuis 2.0		644		17442
Squeak Unloaded		1330		33564
Squeak Regular		1951		43906

The great news is that we're roughly halfways on our way towards a 
kernel the size of Cuis. I'm hoping that as things get smaller we can 
find common ground such that Cuis + MC + M17N = SqueakCore (or something 
close to that). FWIW, here are the largest packages after removal:

Package                    Classes      Methods
Morphic                        185         6925
Kernel                          86         3509
System                         120         3204
MorphicExtras                  126         2856
Graphics                        57         2257
Collections                     89         2196
Tools                           50         1724
ST80                            66         1509
Monticello                      97         1439
Network                         61         1360
Sound                           54         1234
Compiler                        53         1151
Multilingual                    92         1051
Files                           18          509
Balloon                         22          462
Compression                     28          436
ToolBuilder-Kernel              20          317
SUnit                           16          311
TrueType                         9          209
ToolBuilder-Morphic             12          173
ShoutCore                        4          143
Exceptions                      40          141
PackageInfo-Base                 4          133
MonticelloConfigurations         6          122
ToolBuilder-SUnit               12           80
ToolBuilder-MVC                  3           57

Cheers,
   - Andreas

-------------- next part --------------
"Prepare unloading"
Flaps disableGlobalFlaps: false.
StandardScriptingSystem removeUnreferencedPlayers.
Project removeAllButCurrent.
#('Morphic-UserObjects' 'EToy-UserObjects' 'Morphic-Imported' )
	do: [:each | SystemOrganization removeSystemCategory: each].
Smalltalk at: #ServiceRegistry ifPresent:[:aClass|
	SystemChangeNotifier uniqueInstance
		noMoreNotificationsFor: aClass.
].
World removeAllMorphs.
"Go unloading"
#(	'ReleaseBuilder' 'ScriptLoader'
	'311Deprecated' '39Deprecated'
	'Universes' 'SMLoader' 'SMBase' 'Installer-Core'
	'VersionNumberTests' 'VersionNumber'
	'Services-Base' 'PreferenceBrowser' 'Nebraska'
	'CollectionsTests' 'GraphicsTests' 'KernelTests'  'MorphicTests' 
	'MultilingualTests' 'NetworkTests' 'ToolsTests' 'TraitsTests'
	'SystemChangeNotification-Tests' 'FlexibleVocabularies' 
	'EToys' 'Protocols' 'XML-Parser' 'Tests' 'SUnitGUI'
) do:[:pkgName| (MCPackage named: pkgName) unload].
"Traits use custom unload"
Smalltalk at: #Trait ifPresent:[:aClass| aClass unloadTraits].

"Post-unload cleanup"
PackageOrganizer instVarNamed: 'default' put: nil.
SystemOrganization removeSystemCategory: 'UserObjects'.
Presenter defaultPresenterClass: nil.
World dumpPresenter.
Preferences removePreference: #allowEtoyUserCustomEvents.
SystemOrganization removeEmptyCategories.
ChangeSet removeChangeSetsNamedSuchThat:[:cs | (cs == ChangeSet current) not].
Undeclared removeUnreferencedKeys.
StandardScriptingSystem initialize.
MCFileBasedRepository flushAllCaches.
MCDefinition clearInstances.
Behavior flushObsoleteSubclasses.
ChangeSet current clear.
ChangeSet current name: 'Unnamed1'.
Smalltalk flushClassNameCache.
Smalltalk at: #Browser ifPresent:[:br| br initialize].
DebuggerMethodMap voidMapCache.
DataStream initialize.
Smalltalk forgetDoIts.
AppRegistry removeObsolete.
FileServices removeObsolete.
Preferences removeObsolete.
TheWorldMenu removeObsolete.
Smalltalk garbageCollect.
Symbol compactSymbolTable.
TheWorldMainDockingBar updateInstances.


More information about the Squeak-dev mailing list