Porting from VisualWorks to Squeak

The Port

  1. There is a package FileOut30 in SCG StORE that contains a Squeak exporter that mostly works.
  2. It is the best to rename all classes to have a common (two letter) prefix classPrefix in VW (see the script below).
  3. Also make sure that all class categories categoryName of the VisualWorks classes are properly set (also done by the script below).
  4. In VisualWorks go to Settings / Source and choose the format of the file out to be Squeak.
  5. Right click on your Package/Bundle and File Out/Package.
  6. Drag the resulting .st file into Squeak or Pharo.

Script to prepare the VW code

| classPrefix categoryName |
classPrefix := 'XY'.
categoryName := 'Squeak Category Name'.
 PackageName classes do: [ :each |
	each category: categoryName.
	each renameAndFixSourceTo: classPrefix , each name ]

Making Code Portable

Do Not

Namespaces Squeak has no namespaces, instead use a two letter class prefix to avoid conflicts.
Packages Squeak has no packages, instead it depends on naming conventions of the class and protocol categories.
Bindings Squeak has no bindings #{CodeFoo.Color}), instead import required namespaces into your own namespace or class.
Weak References Squeak has weak references, however the implementation is weak and weak references should be avoided at all cost.
Shared Variables Squeak has no shared variables.
Literal Byte Arrays Squeak has no literal byte arrays #[1 2 3], instead use a normal literal array and send the message asByteArray.
Object immutability Squeak has no object immutability.
Dependency mechanism Squeak implements the dependency mechanism (#addDependent:, #update:, ...), but slightly different than VisualWorks. Instead consider using Announcements.
Trigger Events Squeak implements the event mechanism (#when:‌send:to:with:, #triggerEvent:, ...), but slightly different than VisualWorks. Instead consider using Announcements.
GUI Framework Squeak has a different GUI framework. Properly separate View and Model.

Avoid To

  • Subclass any class outside your package.
  • Extend any class outside your package.
  • Use common method names like #min:, #value:, ....
  • Depend on external packages.


  • Write tests that cover every line of code.
  • Write tests that cover every line of class extension code.
  • Really, write a lot of high quality tests.
Last changed by admin on 21 April 2009