Comparison to Scala
The main goal of the Kotlin team is to create a pragmatic and productive programming language, rather than to advance the state of the art in programming language research. Taking this into account, if you are happy with Scala, you most likely do not need Kotlin.
What Scala has that Kotlin does not
- Implicit conversions, parameters, etc
- In Scala, sometimes it's very hard to tell what's happening in your code without using a debugger, because too many implicits get into the picture
- To enrich your types with functions in Kotlin use Extension functions.
- Overridable type members
- Path-dependent types
- Macros
- Existential types
- Type projections are a very special case
- Complicated logic for initialization of traits
- Custom symbolic operations
- Built-in XML
- Structural types
- Value types
- We plan to support Project Valhalla once it is released as part of the JDK
- Yield operator
- Actors
- Kotlin supports Quasar, a third-party framework for actor support on the JVM
- Parallel collections
- Kotlin supports Java 8 streams, which provide similar functionality
What Kotlin has that Scala does not
- Zero-overhead null-safety
- Scala has Option, which is a syntactic and run-time wrapper
- Smart casts
- Kotlin's Inline functions facilitate Nonlocal jumps
- First-class delegation. Also implemented via 3rd party plugin: Autoproxy
- Member references (also supported in Java 8).