I have been writing #Scala professionally for three years now. My conclusion is it’s terrible for almost everything. The compiler is slow. Most of its features are half-documented and change between versions. Compilation errors are incomprehensible and sometimes spurious. The syntax is cumbersome, the language somehow bad at being OO, FP, *and* imperative. Writing deterministic code is hard. Debugging unreliable. Runtime system is…the JVM. Build system absolutely byzantine.
Akkoma

That said the language of Scala 3 seems to be a lot better than 2, and if someone doggedly improves the compiler for maybe ten years or so and shores up Scala Native to be actually usable it might be an OK language.

@amanda Turns out it's not. 😂

It's like they took all the criticism of Scala 2, then said "you know what? you are all wrong!" and then doubled down on everything that was criticized.

Too many features?
Guess, what, we added a few more!

Too many pointless syntactic variations?
Hope you like the two new indentation-based syntax options we added!

Lossy implicit conversions wreaking havoc?
Here are some additional conversion rules we invented!

#Scala

Update: I had another fairly typical experience today. I logged on as usual and attempted to compile my project, which suddenly produced about two screens of cryptic red text and no JARs despite me having changed no build configuration.

Turns out Homebrew had updated its internal JVM that it links to SBT to OpenJDK 20, which doesn’t work with any released version of Scala. There’s no fix as far as I can tell, except installing SBT from somewhere else.
Most of this is of course on the Homebrew package maintainers (who apparently tested nothing), but this also says something about how janky the infrastructure is. This sort of thing happens to me a lot.
@amanda but other than that?
@vance_maverick other than that it’s great!
@vance_maverick a senior researcher on OO languages said about Scala (after I complained) that “it’s a great paper mill though!”
@amanda modern javascript code bases compile slower than some of the bigger scala projects I have worked on, so everything is relative. Haskell is a nicer language and it still compiles equally slow (or may be even slower), but it does not have the Java interoperability (unfortunately) and you have to write your own batteries or rely in obscure abandoned projects in github.
My biggest scala disappointment is that you are vulnerable to NPE due to Java/JVM interoperability.
@amanda I forgot to mention - scala 3 has many improvements over scala 2 (type unions) which make the language enjoyable, but the tools are lacking 😩
@lachezar yeah, I ported my entire project only to realise elisions and a few other things don’t work yet
@lachezar also when I upgraded from 2.12 to 2.13 got worse runtime performance (???) so I’m a bit worried about what the 3.x upgrade would do. Oh, and it also breaks my tests because they use implicits a lot and there doesn’t seem to be auto-translation (and I’m not spending time refactoring tests)
@lachezar @amanda Just a note that the latest drop of Intellij's Scala plugin now has MUCH improved Scala 3 support.
@Schlining @lachezar nice! I might try that. I’ll look into the other stuff you recommended too.
@lachezar I think slow compile times are acceptable if everything is at least ok, and more or less no problem if there’s a way to reliably split projects into components that compile fast. Scala has, as far as I know, no easy way of defining subunits of compilation; it sometimes guesses while doing incremental compilation but that’s a bit wonky in my experience.

However I don’t see why virtually all Scala code I’ve written couldn’t have been eg Rust, or even Java for that matter.
@amanda And yet after switching to Elixir I find myself yearning for the power of Scala’s type system 😅
@amanda Hi Amanda, I've been writing #Scala professionally for 13 years myself. When I first started, I felt much like you do. But after using it for a while, I find it sooooo much more flexible, concise and effective than pretty much any other language. With recent tooling, like scala--cli, I can deploy small self-contained apps without worrying about CPU architecture, dependencies or dealing with docker. That's a pretty big deal. (but yeah, I feel ya, sbt is pretty byzantine). Peace