Scala 3 as a new Programming Language
Dear Scala, I have found another whom I think the world of. I think the only way out is for us to get a divorce. — Old Klangian love letter.
After 6 years of commercial Scala and doing a few things in the public interest, I am moving on: thank you to everybody whom I’ve had the pleasure of hacking with, I’ve had a blast. I’ll wrap up
#fpmortals before focusing on other things.
Scala is now a hugely successful industrial language. An experienced Scala developer can be assured of a job within a few weeks of arriving in any major city in the world. Scala is on the cutting edge when compared to Java or C++, but is also trusted enough to be used in highly critical systems.
Scala 3 is an innovation step change. There are more language features and tooling changes than I’ve ever seen in a language upgrade: I especially like union types, the move towards dependent types and I’m pleased to see that the presentation compiler is being taken seriously (although I’m not sure if it is good news for everybody).
At work and FLOSS projects, I’ve touched around 5 million lines of Scala code. Unfortunately, I cannot see any of the projects I’ve worked on (public or private) being able to migrate. Therefore, I believe the community will fracture into “Legacy Scala 2” and “Innovative Scala 3” camps:
- the “legacy” road will be a much slower pace, more like Java.
- the “innovator” path means hunting for a greenfield project and rebooting my FLOSS projects.
Perhaps going legacy could be good: an opportunity to double down on stability, performance and tooling. Commercial investment in the Reasonable Scala Compiler, with its mission of reducing the language footprint, would address the concerns of many Scala developers. Combine with Fury, the simple source-dependency build tool, and dependency hell problems become tractable.
But taking a step back, Scala 3 is actually more like a new programming language. It has forced me to consider alternatives:
- Rust, allegedly the most friendly programming language community (I have my doubts), and a lot of consideration for tooling.
- Haskell, notoriously principled with passionate contributors.
- Go, able to spin up a REST service and achieve ridiculously high performance in a short space of time. Go developers Get Shit Done.
- Kotlin, a simplified Scala with superior tooling that I believe will become a powerful force on the JVM and Android.
I’ve gone for Haskell. It is higher performance than Scala, although not quite Rust or Go levels, instead emphasising correctness, which is the kind of software I like to write. The community is highly biased towards intellectual curiosity and there are plenty of FLOSS tooling challenges remaining to be solved. It’s ticking all the boxes for me. Maybe see you there :-)