GNU Smalltalk 3.0b
GNU Smalltalk 3.0b will shortly be available from
Like GNU Smalltalk 3.0a, this release of GNU Smalltalk includes support for Seaside. It includes the following changes compared to GNU Smalltalk 3.0a:
- All the bugfixes of GNU Smalltalk 3.0.3.
- BlockClosure methods #cull:, #cull:cull:, #cull:cull:cull: evaluate blocks removing parameters that are not accepted by the block. Thanks to this new functionality, the parameter to #on:do: and #ifNotNil: can be omitted.
- CObjects can be backed with garbage-collected (as opposed to heap-allocated) storage. Using this is not always possible, for example for CObjects stored by external libraries or passed to functions that call back to Smalltalk or otherwise may cause garbage collections. If it is, however, it is easier to use, faster and more predictable than finalization. As an added benefit, garbage-collected CObjects accesses are bounds-checked.
Garbage-collected CObjects are created by sending #gcNew instead of #new.
- If possible, the installation is made relocatable. More information about this are available in the distribution and will be placed in the FAQ too.
- It is possible to create CFunctionDescriptors that are not attached to a function that the VM knows about, simply by passing a CObject to CFunctionDescriptor>>#for:returning:withArgs:.
- The VFS subsystem was rewritten. Virtual filesystems are now accessible via special methods on File (such as File>>#zip, for example "(File name: 'abc.zip') zip") and not anymore with special filenames that could conflict with real files.
This change causes some incompatibilities. In particular,
- methods like `File image' and `Directory kernel' return a File object, not a String
- Directory objects are not created anymore and instead File objects also support the Directory protocol;
- Directory>>#do: passes File objects rather than file names to the block;
- Directory>>#contents is now called Directory>>#entryNames.
- The order for searching pool dictionaries changed. The new implementation, codenamed "TwistedPools", was designed by Stephen Compall who also contributed a testsuite and parts of the implementation. The ideas behind TwistedPools can are explained on the wiki.
- Processes support thread-local variables, which are accessed through a special dictionary returned by ProcessorScheduler>>#processEnvironment.
- Bindings to Cairo and LibSDL were contributed by Michael Bridgen, Tony Garnock-Jones and Brad Watson.