Hi, Robert (and Robert),
I'm interested in speeding up the project loading for that kind of projects as well, which mostly consist of Smalltalk code for new classes and not much Etoys objects. Your games are this kind.
Currently, the standard way to include Smalltalk changes is to have change set in the project and have it compiled by standard Smalltalk compiler upon loading. However, you can actually include CompiledMethods in a project and load them quicker than compiling. My experiment is along this line.
I made a proof of concept tool for it. To try it:
- File in the attached change set into a relatively new image.
- Load one of your games (such as Pipe) into the image.
- Go to the project and *clear* the changeset of the project from ChangeSorter.
- Evaluate "ProjectPackager new open" somewhere. You'll get a small window that is titled "Packager".
- In the upper pane of the Packager, type something like:
#(PlAbstractField PlAbstractFieldTest PlAdjacentBendPipeTest PlAdjacentCrossPipeTest PlAdjacentEndPipeTest PlAdjacentStartPipeTest PlAdjacentStopPipeTest PlAdjacentStraightPipeTest PlAdjacentTPipeTest PlBendPipe PlButtonMorph PlCrossPipe PlEasyPolicy PlEasyPolicyTest PlEmptyField PlEndPipe PlFieldMorph PlFieldMorphDragAndDropTest PlFieldMorphInitializationTest PlFileResourceManager PlFileResourceManagerTest PlFillingNotification PlFillingStrategy PlFloodingNotification PlGame PlGameMorph PlGameOverState PlGameState PlGameStateTest PlGameTest PlHardPolicy PlHardPolicyTest PlHighscoreMorph PlImageMorph PlInitState PlIntegrationTest PlMediumPolicy PlMediumPolicyTest PlMemoryResourceManager PlMenuMorph PlMockGame PlMockLevelPolicy PlMockPolicy PlPausedState PlPipe PlPipeSimpleFillingTest PlPipeSlowFillingTest PlPipeSupply PlPipeSupplyMorph PlPipeSupplyMorphTest PlPipeSupplyTest PlPlayfield PlPlayfieldMorph PlPlayfieldTest PlPresentationPolicy PlRandomizingDecorator PlResourc eManager PlResourceManagerDecorator PlRulePolicy PlSARCreator PlScoreCounter PlScoreDisplayMorph PlScoreDisplayTest PlSimpleFillingStrategy PlSlowFillingStrategy PlStartedState PlStartPipe PlStopPipe PlStraightPipe PlThemingDecorator PlTimeLabelMorph PlTPipe PlWaterFlowState PlZipResourceManager)
and accept it. You'll see the list of classes. (You could enter an expression like:
[:c | c name beginsWith: 'Pl']
but it would include other classes like PluggableTextMorph and wouldn't quite do it for this.) Also, you could probably remove all the Tests from the list above.
- Set the name of project from the ChangeSorter or the oval text in the Sugar Bar.
- Now, press the "Save" button in the Packager. It will create a project with CompiledMethods.
- Compare the performance of project loading; Pipe didn't give as much boost as I saw other instances, but it speeds up it a little bit.
It is *experimental* and it may as well turn out to be a bad idea. But if you are interested in making loading these games faster, please give it a try.
-- Yoshiki