Revision of IRC from Sun, 09/23/2007 - 04:00
There are two regular channels for GNU Smalltalk users: ##smalltalk and #gnu-smalltalk on Freenode (irc.freenode.net).
I have written this guide for ##smalltalk in the spirit of #lisp's. Following the advice here is the easiest way to get help from ##smalltalk or #gnu-smalltalk.
First, are you in the right place?
- What's this about a programming language? I'm just looking for casual conversation.
- Join #defocus instead.
Picking a Smalltalk implementation
Most of us use GNU Smalltalk, or "GST" to regulars. GNU Smalltalk has been quite active for the last several months, so your implementation's package is probably out-of-date. It runs on GNU/Linux, OS X (both PPC and X86), Windows with Cygwin, and maybe *BSD. You can get the JIT by passing --enable-jit to configure. Check the topic of #gnu-smalltalk for a direct source code download link.
Little Smalltalk is a great way to learn how Smalltalk itself works. If you have Java, you can look at a Java applet and play right in your browser without installing anything.
We'll be more interested in Strongtalk one day, but aren't now, because it only worked on Windows last anyone checked.
As far as I know, we don't play with proprietary Smalltalks.
There's a longer list on Smalltalk.org.
Getting a tutorial
GST comes with a tutorial; it's in doc/gst.info in the distribution. Just run info -f on it or C-u C-h i in Emacs.
Stef's Free Online Smalltalk Books is the perennial source of useful books on Smalltalk. You can also buy a modern descendant of the Blue Book, Smalltalk 80: The Language.
Other Things to Remember
GST's high-quality documentation (base class documentation found in doc/gst-base.info) and source (kernel/ contains all the base classes themselves) is a great way to learn just about everything you might want to know about Smalltalk. When in doubt, see how GST does things. Here are some hard-won lessons:
- Don't, don't, don't check types of arguments. If you want a method to branch on a type, split it into different methods. It's the responsibility of the sender of a message to give an argument that the receiver can understand.
- Just because an object x answers
x respondsTo: #foo:withfalsedoesn't mean that x won't understandx foo: 1. It only means that there is no method installed in the class to deal with the message.
