Well, with "Scala with its everything and the kitchen sink feature set" I mean that Scala incorporates almost all language features one can think of for a statically compiled programming language (I don't think it makes sense to distinguish if a certain feature is provided by the language itself or a library as in Scala that distinction is fuzzy):
- type inference
- classes
- interfaces (sort of: traits)
- methods
- variables (var)
- immutable values (val)
- higher order functions
- singletons
- functional programming: map, flatMap, reduce/fold, ...
- actors
- coroutines (I think there was a compiler plugin for that)
- implicits
- powerful type parameters
- Futures
- it even has a turing complete type system
That is good and bad. Good: you can probably find good use for every feature Scala has. Bad: On a sufficiently big project with one or more extra clever developers most probably every feature will be used and that will make it extra hard to understand for normal software developers that have to maintain it for long years after the original extra smart developer already left the company. See it a bit like that: On a hard to understand scale with 1 being easy to understand und 10 being extremely hard to understand Java projects can go from 1 to 6 and Scala projects can go from 1 to 10.
Personally I like simple languages more. And I don't need a compiler to catch errors that a unit test would also catch.
That is good and bad. Good: you can probably find good use for every feature Scala has. Bad: On a sufficiently big project with one or more extra clever developers most probably every feature will be used and that will make it extra hard to understand for normal software developers that have to maintain it for long years after the original extra smart developer already left the company. See it a bit like that: On a hard to understand scale with 1 being easy to understand und 10 being extremely hard to understand Java projects can go from 1 to 6 and Scala projects can go from 1 to 10.
Personally I like simple languages more. And I don't need a compiler to catch errors that a unit test would also catch.