1944 methods
David T. Lewis
lewis at mail.msen.com
Thu Jun 14 02:06:40 UTC 2007
On Wed, Jun 13, 2007 at 10:01:52PM +0200, Pavel Krivanek wrote:
> Hi all,
>
> I have played with a very simple, extremely slow but powerful shrinking
> method:
> - take some very small image
> - create a task you want to do, for example some basic script like
>
> (FileStream forceNewFileNamed: 'out.txt') nextPutAll: (Compiler
> evaluate: '3+4') asString; close.
> SmalltalkImage current snapshot: true andQuit: false.
>
> - define the correct outputs (the file out.txt includes the text '7')
> - create a control image (with OSProcess) that takes the small image
> and starts to remove method by method and tests if the resultant image
> is not broken and returns correct outputs ;-)
> - the result is an image with the minimal possible count of methods
> for this task
Hi Pavel,
I think I can help with the "extremely slow" part. Try making the test
images (the ones started by the control image) headless, and do all the
I/O through an OS pipe rather than with files. For example:
| pipe testBlock c |
pipe := OSPipe new.
testBlock := [(Compiler evaluate: '3 + 4') asString = '7'
ifTrue: [pipe nextPut: $Y]
ifFalse: [pipe nextPut: $N].
pipe flush].
[10 timesRepeat:
["remove a method here then run the remote test"
UnixProcess forkHeadlessSqueakAndDoThenQuit: testBlock.
[(c := pipe next) isNil] whileTrue: [].
(c == $Y)
ifTrue: [Transcript show: 'the remote test succeeded'; cr]
ifFalse: [self error: 'the remote test failed, need to undo the last change']]] ensure: [pipe close].
Dave
More information about the Squeak-dev
mailing list
|