The H: So you are going 2.10, 2.11, 2.12... What's Scala 3 then?
MO: Scala 3 would be a version that would pose more migration challenges so we are reserving the name for a language version that would have some incompatibilities in the language, not in the libraries, that would require a migration tool that's automatic or programmer guided. So that means we are not even sure it would ever exist. The versioning scheme is sort of like that of Python. Python 3 or 3000, for that, that was a different language (from Python 2), it had completely different Unicode support, it was backwards incompatible. Scala has the same versioning scheme, so if there were to be a Scala 3 it would correspond to a Python 3.
The H: Does that mean there's a piece of paper with a list of "And we'd like to put this in 3" ... because that's how Python 3 grew.
MO: For the moment that dynamic hasn't started yet. For now we are one hundred per cent concentrated on 2.10 and then we will be concentrating on 2.11. In the back of my head I have a list of things that would be too difficult to change but if we ever get around to changing that... but I have no prediction.
The H: So have you reached a stage where you are happy with what you've evolved?
MO: Yes, from a usability standpoint, I am very happy with what evolved. What we've seen is that there are, in some of the corners of the type system – where we have innovated, like when we came out in 2003 with traits and things like that – some tweaks where now we would do a cleaner design than what we did at the time. Inevitably, you learn, you find a cleaner way to express things. So the scientist in me and the perfectionist in me would say well it would be cool if we could put that in. On the other hand I feel that there would be some breakage...
The H: From your point of view, is there a language you are looking at going "that's neat"?
MO: There are many other languages that are neat. It depends what constraints you have. The goal of Scala is that we want to combine functional and object-oriented programming in a statically typed language. If you do that then I think there's not much else around that has exactly the same goal. The next closest language I would name is F# which is also functional/object-oriented but its not as merged as in Scala. F# has the objective that you should be able to program functionally without using objects. In Scala, it explicitly has the other objective, to say that in everything you do, you want to use objects.
Other languages... there are many languages I admire for their elegance. I admire Haskell, its a very nice language for purely functional programming. Clojure is a cool language if you are willing to drop the static type system (which we are not willing to do). Java is a cool language if you are looking for compatibility and good performance. I think we learn from a lot of languages. I should mention my background comes from Modula 2 – I was a student of Niklaus Wirth – also a cool language too.
The H: And an old favourite of ours at The H. If someone comes to you and says they want to get started in Scala, where do you think they should start, assuming they are an experienced programmer? Where can you pick up the zen of Scala?
MO: One thing I can recommend is Scala for the Impatient by Cay Horstmann; the first part of that is actually available for free on the Typesafe site. That's a very fast paced intro. We assume you know Java. It's very tool oriented too.
The H: How about for a slow start, a more paced start?
MO: I should recommend my own book, Programming In Scala, that's both a reference and a very methodical step-by-step intro into the language. It also gives you a lot of information about why things are the way they are because it comes from the language designers.
The H: Thanks for chatting with The H for a half an hour.