> * Slow performance
For all practical purposes, Smalltalk is no slower than other popular languages like Python, PHP, Ruby, Perl, and R. These are all enormously useful languages, despite being “slow.”
The reason for this is simple: the vast majority of real-world applications run perfectly fine on today’s hardware. In the early days, even Java and C# were “slow” but that didn’t prevent them from gaining in popularity.
There is no such thing as a perfect programming language. No language can do it all. If your particular application has high performance demands, then choose a more appropriate language like C++, Fortran, or Go. The fact is, you are never going to stick with only one programming language throughout your entire career.
I should also mention that the Pharo VM has undergone massive speed improvement in the last few years. It’s not yet competitive with the JVM, but it’s headed in the right direction.
> * Many dialects
Yes, this has been an issue, not unlike in the Linux world. That’s why I generally propose Pharo as the Smalltalk of choice (just as Ubuntu and its derivatives are the Linux of choice). Pharo is the most actively developed and innovative Smalltalk and unless you have special requirements, there’s no need to look at other dialects.
> * Dynamically typed with dynamic method dispatch
Historically, Smalltalk has been used to write massive enterprise-scale applications. Have you forgotten that IBM once chose Smalltalk as the centrepiece of their VisualAge enterprise initiative to replace COBOL?
Smalltalk has been used by large enterprises around the globe, including JPMorgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Orient Overseas Container Lines, Siemens AG, Thales, etc. It’s been used by governments, including the U.S. military to write a million-line battle simulation program called JWARS.
Smalltalk has proven time and again that it is perfectly capable of writing large, scalable systems. Let’s put this issue to bed already.
If you want static typing, Elixir is not a candidate. Haskell is good if you’re into functional programming, but it has a wicked learning curve.
I like Go. I would recommend Go as an alternative to Smalltalk.