The Port
- There is a package
FileOut30
in SCG StORE that contains a Squeak exporter that mostly works. - It is the best to rename all classes to have a common (two letter) prefix
classPrefix
in VW (see the script below). - Also make sure that all class categories
categoryName
of the VisualWorks classes are properly set (also done by the script below). - In VisualWorks go to Settings / Source and choose the format of the file out to be Squeak.
- Right click on your Package/Bundle and File Out/Package.
- 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.
Do
- 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.