Scala is an excellent language with a terrible implementation.
Stuff that is awesome about scala:
- vObj calculus is the best type structure out there
- Implicits provide a reasonable encoding for typeclasses
- Unrestricted nesting of language constructs
- Reasonably terse
- Fairly complete
Stuff that sucks about scala:
- 5s to spin up repl
- 5s to eval simple statements in repl
- The compiler is dog slow
- Preponderance of weird proprietary build systems.
- Culture problems: "tour of scala" examples use the word "monoid"
- It only runs reasonably on the JVM, and the JVM is awful.
- Uses C#/Java/C style method calls with (), negating many of the benefits of being "functional"
- Type inference is unreasonably limited when compared to, say, OCaml.
- Symbol Soup.
- Braces are used to delimit control flow. Layout is much more elegant.
- Remove all JVM-ness
- Build a fast compiler
- Make it simple enough to drive via make without performance concessions
- Fix type inference to make it a little bit less local. At the very least, should support local helper functions with no annotations as well as OCaml does.