- Complex syntax: semicolon inference, optional parenthesis, optional braces, arbitrary infix operators, associativity rules...
- Complex semantics: classes, case classes, traits, mixins, implicits, function objects, lambdas, currying, generics, variance, view bounds, context bounds, type parameters, multiple packages, relative imports, pattern matching...
- Standard library is EXTREMELY bloated. Simple classes have dozens of supertypes and hundreds of methods. Documentation is also lacking: a lot non-obvious methods and even entire classes have no comments or scaladocs.
- Implicits are nice in theory, but in practice they lead to nasty spaghetti code which is difficult to follow. They also hide errors which would be caught be more more robust type systems. So does type inference. So does the lack of checked exceptions.
- IDE support is still poor. The problem isn't that Scala is new; it's just very difficult to build a great IDE for such a complex language.
- Ugliness resulting from JVM compatibility: null, ClassManifest, Function/Tuple classes, nasty mangled names...
- Compilation is very slow, with or without fsc. Compiler is more stable than it was a few years ago, but it still does funny things and occasionally crashes.
- Huge memory overheads and lousy performance resulting resulting from all the indirection.