Gavin Sinclair wrote:

> I'd like to read about how the Smalltalk environment fits together
> like this.  All I know is the joke about it having an image problem.

I've only played around with Squeak Smalltalk, but I assume that all of 
the Smalltalk environments follow the same basic approach. All of your 
code -- everything -- exists inside the core Smalltalk "image" that you 
referred to. When you start up Smalltalk, this image is loaded into 
memory. As you make changes (i.e. adding and removing classes or 
methods) the image is updated. At any time, you can identify (for 
example) all of the classes that implement the "foo" method, because 
they're all right there. When you shut down Smalltalk, the image is 
saved back to disk.

It's a very interesting approach, and different from any other 
programming environment I've worked with.

> IntelliJ and Eclipse both do a brilliant job at code refactoring and
> navigation for Java - probably as good as any Smalltalk environment.
> However, if an add-on can do this for Java (whose static typing makes
> it possible), yet it can also somehow be done for non-statically-typed
> Smalltalk, then there's hope for Ruby.  I suspect the Ruby-in-Ruby
> interpreter is the key.

You may be right. I haven't used IntelliJ or Eclipse either, but I'm 
assuming that they work with a project-based approach, where a "project" 
is a collection of a particular set of source files and build a database 
of classes and methods based on those. And we'd need to do something 
similar for Ruby.