Skip to content

Update Readme.md for ScalaDays #1248

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
May 10, 2016
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 65 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,29 +11,75 @@ theory behind these constructors is researched in
[DOT](http://www.cs.uwm.edu/~boyland/fool2012/papers/fool2012_submission_3.pdf),
a calculus for dependent object types.

The dotty compiler is largely a new design. It takes a more functional
approach than current scalac, paired with aggressive caching to
achieve good performance. Some parts, in particular those that have to
do with configuration and input/output are ported from the Scala
compiler. The compiler is fully functional, in particular it can
compile itself. But there's more work needed (and planned) on
polishing rough edges, improving diagnostics, improving compilation
speed, and embedding in other tools.

We expect that, over time, some of the new technologies explored in
this project will find their way into future versions of Scala. At
present it is too early to say which ones and when.

If you want to try it out, to get started have a look at
####Current status:
_Technology preview_: currently unsupported, may be functionally incomplete or unsuitable for production use.

####Is it going to be the future Scala?
Yes, eventually.

####Who's working on it?
See [github contributors page](https://github.com/lampepfl/dotty/graphs/contributors).

####What are the features that could make me consider trying it?
| Feature | Status |
|---------------------------------------------------------------------------------------------------------|---------------------|
| Union, Intersection and [Literal singleton types](http://docs.scala-lang.org/sips/pending/42.type.html) | Implemented |
| Fast compilation(phase fusion) | Implemented |
| [Trait parameters](http://docs.scala-lang.org/sips/pending/trait-parameters.html) | Implemented |
| [@Static methods and fields](https://github.com/scala/scala.github.com/pull/491) | Implemented |
| Colored Repl | Implemented |
| Sbt incremental build | Implemented |
| Non-blocking lazy vals | Implemented |
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There's an SIP for that but I don't know if it matches what's in Dotty: http://docs.scala-lang.org/sips/pending/improved-lazy-val-initialization.html

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Implementation in dotty is based on this sip, but there are some differences, eg we allow concurrent initialization of independent fields. Those differences may be small for someone, but maybe huge for others.

I do not want to create misconceptions by linking to a very technical sip that goes into deep details that does not match our details.

It would be good to update the sip one-day or to submit a new-one based on the old one.

| Option-less pattern matching(based on [name-based patmat](https://github.com/scala/scala/pull/2848)) | Implemented |
| Function arity adaptation | Implemented |
| | |
| Non-boxed arrays of value classes | In progress |
| Working contravariant implicits | In progress |
| [Auto-Specialization](https://github.com/dotty-linker/dotty) | In progress |
| [Whole program optimizer](https://github.com/dotty-linker/dotty) | In progress |
| [Library defined optimizations](https://github.com/dotty-linker/dotty) | 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 |
There are also plethora of small details such as [per-callsite @tailrec annotations](https://github.com/lampepfl/dotty/issues/1221)

####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.<br>
No existential types.<br>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd say "No existential types using the forSome syntax, most of the times these can be rewritten using wildcards (_) instead."

No macro support yet. We have big plans here.<br>
No early initializers. No scala.DelayedInit. Use trait parameters instead.<br>
Whole program optimizer will only work if all dependencies are compiled by Dotty.<br>


####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.<br>
It's not very hard, and the biggest thing that you will likely miss is using macros.

####How can I try it out?
https://github.com/lampepfl/dotty/wiki/Getting-Started.
Here’s an example sbt project and instructions on how to set it up: https://github.com/smarter/dotty-example-project/ <br>
We have colored REPL :-). You can invoke it by running `dotc -repl`.

Developers mailing list is https://groups.google.com/forum/#!forum/dotty-internals.
####We also have:
Basic support for Scala.js,<br>
[Prototype](https://github.com/scala-native/scala-native/tree/topic/dotty-support) of compilation to x86 native code(Shabalin)<br>

####What about scalac:
Scalac is the basis for stability in scala. We expect scalac & dotty to coexist for long time.

####Contributions are welcome!
We invite you to help us build the future of Scala.<br>
This is the best moment to participate, as everyone can make an impact.<br>

&nbsp;
####SI-2712?
If scalac will put it into 2.12, we’ll mimic their behaviour. But we have bigger plans for
HK-types.

&nbsp;

![YourKit](https://www.yourkit.com/images/yklogo.png) supports open source projects with its full-featured Java Profiler.

YourKit, LLC is the creator of [YourKit Java Profiler](https://www.yourkit.com/java/profiler/index.jsp).
Developers mailing list is https://groups.google.com/forum/#!forum/dotty-internals.