Introduction
In this post, I'm going to talk about "Dotty" in brief. Will try to deliver more and more posts about it soon.
What is Dotty?
Dotty is a Next Generation Compiler for Scala Programming Language.Why Dotty?
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.
What are the complications that I can have If I start using Dotty?
Dotty can use libraries compiled by scalac 2.11, but Scala scalac can't use libraries compiled by Dotty.
No existential types.
No macro support yet. We have big plans here.
No early initializers. No scala.DelayedInit. Use trait parameters instead.
Whole program optimizer will only work if all dependencies are compiled by Dotty.
No existential types.
No macro support yet. We have big plans here.
No early initializers. No scala.DelayedInit. Use trait parameters instead.
Whole program optimizer will only work if all dependencies are compiled by Dotty.
Can I write my code in a way that is going to be compatible with Scalac & Dotty?
Yes, Dotty itself is a project that can be compiled by both Dotty and Scalac.
It's not very hard, and the biggest thing that you will likely miss is using macros.
It's not very hard, and the biggest thing that you will likely miss is using macros.
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.
What about scalac:
Scalac is the basis for stability in scala. We expect scalac & dotty to coexist for long time.
What are the features that could make me consider trying it?
Feature | Status |
---|---|
Union, Intersection and Literal singleton types | Implemented |
Fast compilation(phase fusion) | Implemented |
Trait parameters | Implemented |
@Static methods and fields | Implemented |
Colored Repl | 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 |
Auto-Specialization | In progress |
Whole program optimizer | In progress |
Library defined optimizations | In progress |
HList & HMaps\Record types | Under consideration |
Implicit functions | Under consideration |
Effects | Under consideration |
Auto-completion in repl | Under consideration |
Spec Option-less pattern matching | Under consideration |
Multiverse equality | Under consideration |
Exhaustivity checks in pattern matching | Under consideration |
Thank you for reading my posts.
Please drop me a comment if you have any questions/suggestions/issues.
No comments:
Post a Comment