Go directly to Alan Knight's post. AMEN BROTHER! AMEN! Can I add a few?
- Metaclass The most fun one person can have. Their power is enormous. For example, by taking advtange of metaclasses, I can write compilers inside of Smalltalk! I can also browse the code and debug it with my Smalltalk tools! WOW! Smalltalk/X has several examples built in (Prolog, Java, etc), Squeak has several to download, and not to mention that any other Smalltalk allows it. I can do this on a per class basis. There's a lot of sick things that you can do like have compile each of your classes differently or even have them "behave" differently. Recently, I heard they were adding instance-based behavior (ala Self) to Squeak so you can add methods and variables to instances and not just classes. So, you could have instances with different behavior. How COOL is that!?
- become Yeah, yeah, yeah, I know...Every book tells you not to use it, but when you're developing, it comes in very handy. And I still contend it's good for proxies. It's something to use sparingly and I will always look for other solutions. But, it's nice to have it when you need to get rid of instances in your image.
- IDE is a running Smalltalk system Now, the Eclipse folks will say that this is true for it as well. But, can I change the way I look at classes and see my change immediately without restarting the environment? No is the answer in Eclipse and yes in Smalltalk. It's an amazing thing to taylor your IDE to you and do it while you're in it without shutting down.
Well, that's all I could add since Alan did such a great job. Go read his excellent post now!