Blogs

A killer feature: copy-on-write #copyFrom:to:

Tagged:  •    •  

A killer feature that I would like to add is copy-on-write string handling. For a good example, see this post on ruby-talk (aka comp.lang.ruby):

When you take a substring in Ruby, it doesn't copy the string data. Instead, it just constructs a new string object (just a few words of memory) that references into the original string. Only when either string is modified does the string content get copied.

PackageDir

Tagged:  •    •  

I've become spoiled with Python's module and package system. So here I give
you a half baked (but mostly working) alternative package loader.

GNU Smalltalk 3.0 released

Tagged:  •    •  

GNU Smalltalk 3.0 has been released at

   ftp://ftp.gnu.org/gnu/smalltalk

The release was tested on the following systems:

  • i686-pc-linux-gnu
  • x86_64-pc-linux-gnu
  • powerpc-apple-darwin8.9.0
  • powerpc-unknown-linux-gnu
  • sparc-unknown-linux-gnu
  • ia64-hp-linux-gnu
  • s390-ibm-linux-gnu
  • hppa-hp-linux-gnu

Thanks to Stephen Compall, Thomas Girard, Robin Redeker for help and testing of this release!

News from 2.3.6 to 3.0

(Changes from the last release candidate, 2.95h, are listed later.)

Important changes:

Analyzing Hash Collisions

Tagged:

This is a little debugging helper for analyzing hash functions in GST by looking at collisions in LookupTables. I just copied one of the more-or-less identical #findIndex: implementations and added a counter to it, then a nice method for slicing up a whole table for analysis.

Fun with Generators

Tagged:  •    •  

Sometimes I just wander around in blogs looking for cool snippets in other programming languages. Since the upcoming GNU Smalltalk 3.0 will have some features from Python and Ruby (most notably generators), it is nice to test corner cases and see if GNU Smalltalk's behavior matches what happens in other languages.

I came across two implementations of the power-set function in Python, a recursive and an iterative one:

# by Guido van Rossum
def power(s):
    if len(s) == 0:
        yield Set()
    else:
        # Non-destructively choose a random element:

Syndicate content

User login