As you will notice if you read through my last few posts, I’ve been exploring Scala, a relatively new programming language that combines most of the nice features of languages like Ruby and ML, with the ease of deployment of Java.
I’ve been evaluating it with respect to a new project I’ve been pondering, and have concluded that its not ready yet. There are two key reasons.
The first is that the implementation of Scala’s standard libraries is still unstable. Within days of first discovering Scala, I’d found my first bug, a rather fundamental flaw in Scala’s JSON parser. This suggests to me that Scala’s standard API lacks even basic unit testing (this despite the existence of a variety of seemingly powerful testing technologies, such as Specs). I filed a bug for this problem here.
Its hard to justify basing a project on a language where the standard libraries cannot be relied upon to work. I’m afraid that Scala really need to establish some better quality control for the code that makes it into the standard library.
Secondly, the tool support isn’t there. This may seem like an unfair criticism, but I strongly suspect that most potential Scala users are Java refugees, and said refugees are accustomed to powerful IDEs like Eclipse, with features like code completion. You get addicted to features like this, and regardless of its merits, a language that requires you to forego them is starting with a big negative.
Scala has two Eclipse plugins, a more stable one without proper code completion (which crashes on me about once a day), and a less stable beta plugin with code completion, which crashes more often. This beta is more promising, but development seems to have stalled since its last release a few months ago, and the developer is working hard to lower people’s expectations. The bottom line is that neither is production quality, and they will waste your time with mis-reported errors and regular crashes.
Scala has incredible potential, it is the natural migration path for those frustrated with Java’s verbosity and inflexibility, but its not ready for mainstream usage yet. Anyone that opts to use it for a large project today is thinking with their heart, not their head, and is jeopardizing their project.