GNU Smalltalk 3.0c


GNU Smalltalk 3.0c will shortly be available from

Version 3.0c is a feature complete development release. The new features compared to 3.0b are:

  • Collections and Streams have a common superclass, Iterable. The user-visible aspect of this is that Streams now enjoy a wider range of iteration methods, such as #anySatisfy:, #detect: and #count:.
  • Error backtraces include line numbers and filenames.
  • FileDescriptor and FileStream raise an exception if #next: cannot return the given number of bytes.
  • FileDescriptor is now a subclass of Stream. Its old superclass ByteStream has been removed.
  • Functions gst_async_signal and gst_async_signal_and_unregister are now thread-safe, *not* async-signal-safe. To trap signals from Smalltalk, you have to use ProcessorScheduler>>#signal:onInterrupt:.
  • ObjectDumper now accepts normal String streams. The old superclass ByteStream has been removed.
  • Streams have a set of new methods that allow to eliminate useless copies when moving data from stream to stream, as well as to eliminate useless creation of collections to store the data read from a stream. Besides the standard methods #next, #nextPut: and #atEnd, two more methods can be implemented by Stream subclasses in order to achieve better performance on block transfers, namely #nextAvailable:into:startingAt:, #nextAvailable:putAllOn: and #next:putAll:startingAt:. Another set of methods is implemented by Stream; they all use the above three methods and you should not need to override them. These are #next:into:startingAt:, #next:putAllOn:, #nextAvailable:, #nextAvailable:putAllOn:, #nextAvailablePutAllOn:.
  • Together with the above changes, Stream>>#nextHunk was removed. Applications can use #nextAvailable: or, better, should be rewritten to use new stream-to-stream protocol such as #nextAvailablePutAllOn:.
  • Support for imports were added to namespaces (via the <import: ...> pragma, as for classes). Unlike the superspace, imports are not made visible through #at:.
  • The sockets package (and the namespace it is installed in) was renamed from TCP to Sockets. While the old namespace is still available for backwards compatibility, it is suggested to use the Sockets namespace instead. This was done because the package now supports IPv6 and AF_UNIX sockets too.
  • Bindings to OpenGL and GLUT were contributed by Olivier Blanc.
  • All the changes between 3.0.3 and 3.0.4 are included.

User login