Dotty is a platform to try out new language concepts and compiler technologies for Scala. The focus is mainly on simplification. We remove extraneous syntax (e.g. no XML literals), and try to boil down Scala’s types into a smaller set of more fundamental constructors. The theory behind these constructors is researched in DOT, a calculus for dependent object types.
Is it the future Scala?
Yes, it will be - eventually.
Can I use it?
You can! But it currently comes with no guarantees of stability.
Is there Scala 2 interop?
Dotty currently interops with libraries compiled with Scala 2.11 - but not 2.12
How do I migrate my code to Dotty?
An automated rewriting tool is planned for Dotty, more on this to come. Scala 2 sources can be compiled to some degree by issuing:
./bin/dotc -language:Scala2 file.scala
when compiling your program.
Who’s working on it?
And a long line of contributors!
|Union, intersection and literal singleton types||Implemented|
|Fast compilation (phase fusion)||Implemented|
|@static methods and fields||Implemented|
|Improved REPL with colors||Implemented|
|Sbt incremental build||Implemented|
|Non-blocking lazy vals||Implemented|
|Option-less pattern matching (based on name-based patmat)||Implemented|
|Function arity adaptation||Implemented|
|Non-boxed arrays of value classes||In progress|
|Working contravariant implicits||In progress|
|Whole program optimizer||In progress|
|HList & HMaps/Record types||Considered|
|Auto-completion in repl||Considered|
|Spec Option-less pattern matching||Considered|
|Exhaustivity checks in pattern matching||Considered|
The complete list is available here.
Talks on Dotty?
- Compilers are Databases by Martin Odersky (slides)
- Exploring the future of Scala by Dmitry Petrashko (slides)
I have more questions!
Using Dotty to compile your project is now pretty simple. Create the following structure:
. ├── build.sbt ├── project │ ├── build.properties │ └── plugins.sbt └── src
name := "application" version := "0.1" enablePlugins(DottyPlugin)
addSbtPlugin("com.felixmulder" % "sbt-dotty" % "0.1.1")
This plugin is based on the dotty-example-project, but let’s you skip building dotty from scratch.