Python has one thing going for it that Smalltalk does not: modules.
As jwz said of Java, "I have to admit right off that, after that, all else is gravy. That one point makes me able to forgive just about anything else, no matter how egregious. Given this one point, everything else in this document fades nearly to insignificance."
Smalltalk systems, though there are many moves away from this in progress right now, are each one huge monolithic be-the-world environment with no modularity model, poor support for collaborative development and a very limited culture of software distribution. In general, everything is spot-welded together so you can't pry the server infrastructure loose from the GUI, or the wigdets loose from the full-screen windowing system.
This makes it unusable for a wide array of applications.
Python has enough of the really cool things about Smalltalk to still be fun, even if it's occasionally annoying that you have to deal with obscure consequences of attribute access overriding or funky syntax or inconvenient scope rules.
Also, python works with emacs, and smalltalk tends not to. GST is a notable exception to many of these problems, but in my experience it's got plenty of its own. (It's incredibly buggy, for one.)
Modularity is also a small part of the greater concession to the fact that not everything is written in Python, and it integrates VERY well into the traditional UNIX/C world using extension modules.
But...
There are a few small reasons that one wishes Python were Smalltalk:
Smalltalk generally has a better and more advanced virtual machine layout: it's almost always at least an order of magnitude faster.
The smalltalk garbage collector is the mother of all garbage collectors, both in terms of functionality and performance. There is no way that Python can ever gain parity with it given the level of native integration Python currently provides.
Smalltalk has fewer primitive operations. Only one, really: send a message. A few other ops bottom out in primitives but it's hard to see them as an average applications programmer. Smaller numbers of primitives also means that things like capability security are easier to implement.
Smalltalk includes the notion of a "block", which is very powerful, and has often been extended to be a full lexical closure.
Smalltalk's method syntax is just ... cute :-). It maps very naturally into english and there's no ambiguity. A method name specifies an exact number of arguments.
Smalltalk has more robust introspection.
Smalltalk's development environment is just ORGASMIC. There is no other word to describe the experience of debugging an ST application. Give it a try sometime: I can't even explain why it's so great, since I'm not really a Smalltalk expert.
This is all my opinion, really, and I'm a python expert who has only dabbled with smalltalk, so I tend to know a lot more about Python's flaws :-). There may be other reasons why people don't use Smalltalk.
|