[English] [Japanese]

Squeak: Squeakless and Bible Black

Squeak!

Updated: Apr 2, 1998.

  1. Check keyborad script on your Macintosh
  2. User Interrupt key
  3. UI Alternatives (Updated: Apr 2, 1998.)
  4. On your own risk! #1: aftrer installing
  5. Where have all my classes gone?
    1. Where have all my classes gone?
    2. Where have all my classes gone?: aftermath
    3. Where have all my classes gone?: fixed!
  6. Run full screen on Windows95
  7. Win32 VM (v1.31) bug
  8. How to run STones80: "reuse" temp names

Check keyborad script on your Macintosh

Squeak (also SmalltalkAgents) is very sensitive to keyborad script on your machine. If you feel so funny at showing popup menu or selecting by no mouse-dragging, check your keybord script and caps lock key.

User Interrupt key

Squeak's invocation of User Interrupt is command-.(period) (same as Hypertalk, Supertalk), not control-C. On Windows95, this key combination is alt-.(period).

UI Alternatives

Squeak is a work in progress based on Smalltalk-80, with which it is still reasonably compatible. -- from "Welcome To..." window of Squeak

Squeak's look & feel is traditional Smalltalk-80 interface. And some people say "I hate the interface of Squeak". If you the one, try this ONE! This image contains "Windoze 3D borders and title bar" and "SSAScrollBar and VIVA LA JUNTA!!". They'll be found at goodies directory on Squeak site.

You need no more file except this latest version of Windoze looks at ftp://st.cs.uiuc.edu/Smalltalk/Squeak/Goodies/Windoze-1-3-4.cs by Mr. Sam S. Adams (with help from Mr. Andreas Raab and Mr. Stephen Pope).

traditional alternative
Traditional browser Alternative browser

NotifyStringHolderController>>proceed problem is fixed!

On your own risk! #1: aftrer installing

I've heard someone said:

aftrer installing,
Text initialize.
Smalltalk recompileAllFrom: 'A'.
you should do it better.
But I don't know it's better or not.

Where have all my classes gone?

Using 1.23 or 1.3 (on MacOS or Windows95), I did:

  1. add category
  2. accept my own class
  3. accept a method of my own class
  4. save my image
  5. do it condenseChanges
  6. save and quit
  7. boot my image again
  8. Where have all my classes gone!?

Walkback says that

UndefinedObject(Object)>>doesNotUnderstand:
StandardFileStream(PositionableStream)>>skipSeparators
StandardFileStream(PositionableStream)>>nextChunk
RemoteString>>string
CompiledMethod>>getSourceFromFile

After adding category and class, please evaluate "Smalltalk classNames". If there is no class of your own, it will be disappeared or got lost after condenseChanges.

Adding category and class does not update "ClassNameCache." In this occasion, you must update "ClassNameCache" manually.

Smalltalk flushClassNameCache.

If you want to condense your changes file, do them below:

Smalltalk flushClassNameCache.
Smalltalk condenseChanges.
Smalltalk snapshot: true andQuit: false. 
"Smalltalk snapshot: true andQuit: true."

Mr. John Maloney's Squeak 1.24SK (based on Squeak 1.23) is OK with no trouble on condensing.

and see below.

Where have all my classes gone?: aftermath

I've asked above question to The Smalltalk GURU. and Mr. Dan Ingalls said:

It is a bug. And it is sure to be fixed in the forthcoming release 1.31.

The Fix is:

!Metaclass methodsFor: 'class hierarchy' stamp: 'di 2/1/98 09:55'!
name: newName 
inEnvironment: environ 
subclassOf: sup 
instanceVariableNames: instVarString 
variable: v 
words: w 
pointers: p 
classVariableNames: classVarString 
poolDictionaries: poolString 
category: categoryName 
comment: commentString 
changed: changed 
(snipped)
    (wasPresent _ environ includesKey: newName)
        ifTrue: 
            [oldClass _ environ at: newName.
            (oldClass isKindOf: Behavior)
                ifFalse: 
                    [self error: newName , ' already exists!!  Proceed will store over it'.
                    wasPresent _ false.
                    oldClass _ self newNamed: newName]]
        ifFalse: 
            [oldClass _ self newNamed: newName.
            Smalltalk flushClassNameCache "addition here"].
or
classNameCacheFix.1Febr1002.

Where have all my classes gone?: fixed!

Fixed classNameCache bug is fixed at Version 1.31. 10000 timesRepeat: [We thank you Dan!].

Run full screen on Windows95

Try to press F2 Key! (or System Menu >> VM Preferences) If you select "Run full screen", and Squeak runs on that sounds like SqueakOS.

Remember F2 Key. When you lost the key, edit squeak.ini at same directory of VM.

Squeak on Windows popup/system menu
popup/system menu of Squeak on Windows95

Win32 VM (v1.31) bug

The current Win32 VM (v1.31) contains a serious bug. It can happen that Squeak mysteriously crashes if you try to resize the main window.

You must update to the new version - it can cost you hours of work only because you resized your window in the wrong place. This archive contains both of Squeak.exe and SqueakJ.exe. And of course we thank you, Mr. Andreas Raab!

How to run STones80: "reuse" temp names

Trying to run STones80 benchmark but I can't fileIn the source.

The Walkback says:
<<Cannot compile - stack including temps is too deep>>
CompileMethod(Object)>>error:
CompileMethod>>needsFrameSize:
MethodNode>>generate:
SlopstoneBenchmark class(ClassDescription)>>compile:notifying:trailer:ifFail:elseSetSalectorAnd
Node:
SlopstoneBenchmark class(ClassDescription)>>compile:classified:withStamp:notifying:

Mr. Tim Olson taught me,

The problem here is that Squeak contexts only come in two sizes:

  • smallFrame: 12 slots
  • largeFrame: 32 slots
smallFrames cover 94% of all methods, and including largeFrames gets you to 99.975%, but it turns out that the number of temporaries plus the max stack depth in the "execute" method in the STones80 benchmark is just a bit larger than a largeFrame allows.

Since Squeak allocates a unique temp for each temp name, you might try modifying the code for that method to "reuse" temp names, where possible, instead of using a unique temp name.

Thank you Mr. Tim Olson!

But unfortunately I'm in another trouble.

Thanx again to Mr. Tim Olson! The "another trouble" is clear by advice from him. He taught to me that

This is due to some inexactness in the Float>>absPrintOn:base:digitCount: method. -- see Float>>testPrintOn:base: in the 1.31 image

And another trouble on SmopstoneBenchmark.

Attempt to evaluate a block that is already being evaluated.
BlockContext(Object)>>error:
BlockContext>>valueWithArguments:
BlockContext>>value:
[] in SmopstoneBenchmark>>primesUpTo:
SmopstoneBenchmark>>primesUpTo:

Mr. Tim Olson taught me again,

The implementation of Blocks in Squeak currently does not allow recursive invocation of blocks, because of the way they are implemented (they are not full closures, yet). Ian's Jitter uses a Dynamic Context Cache which assigns each block invocation its own context local to the VM, so basic recursive blocks will run, but do not yet fully interact correctly with things that examine contexts, like the Debugger.

If you want to run the code under the non-jitter VM, you will have to replace the recursive block with a recursive method.

Mr. Tim Rowledge taught me,

That's because you are doing a recursion on a blcok - which the conventional VM cannot do (cf. blue book) whereas the jitter can as it has the framework in place for working from Closures instead of blocks. I'm sure Ian could add much more detail if you need it.

If you need to run with the conventional vm, rewrite the code to avoid the block recursion. Of course, since it is intended to test the efficiency of recursively calling a block, that would be fairly pointless !

So I re-wrote and modified the original source, but 2 test of SmopstoneBenchmark benchmark is intended to test the efficiency of recursively calling a block, that is not supported by non Jitter VM. If you run this test on non Jitter VM, so the result would be fairly pointless. PublicDomain-Benchmarks.zip (12KB). Tested on version 1.31 only.


Created: Jan 23, 1998
[English] [Japanese]