Questions regarding Dotty's position in the ecosystem

These are great questions (and thanks for explaining the reasoning behind the reddit account!). Let me try to answer the questions one-by-one:

Is it decided that Dotty will become Scala 3, or is it an experimental sandbox from which Scala 3’s features will be cherry-picked from ?

It’s decided that Dotty will become Scala 3. This was announced last year at ScalaDays.

What is a relationship between the SIP commitee and Dotty ?

The SIP committee reviews all new features that will be part of the Scala 3 language. Dotty is the implementation platform for these features. When Scala 3 is released, the Dotty compiler will become
the reference compiler for Scala 3.

What is the relationship between the Scalacenter and Dotty ?

The Scala Center participates in the design and implementation of tooling for Dotty/Scala 3. The center’s director Sebastien Douraene is on the SIP committee.

Apart from binary compatibility between Dotty and Scala 2 via the TASTY format, is source compatibility (to an extent) a concern of Dotty ?

Very much so, in the sense that

  • we invest in rewrite tools to migrate source automatically,
  • we want to keep source breakage after automatic rewriting as rare as reasonably possible.

Regarding the controversial “signficant-whitespace” PR :
I understand that the PR is meant to act as a support for an experiment as to whether it’s a good idea or not. What will be the factors against which the experiment will be declared a success or a failure ? Who decides on those factors ?

The experiment is open-ended, we have to see what comes up when people use the new syntax, and the new syntax is also still subject to change. I will make a recommendation once more experience is gained. In the end the SIP committee decides whether this will be part of the language standard or not. As is the case for all other new language features there will be a consultation period where everyone is invited to comment on https://contributors.scala-lang.org/.

Are the two syntaxes meant to cohabitate, or is there going to be a decision as to which one will remain ? Who will make that decision ?

There are four things thrown into one pot here which should be treated separately.

  1. New “quiet” control syntax (Dotty PR #7024). For the time being all combinations of old and new syntax are supported. My personal expectation (which is not shared by everyone) is that the new syntax is so much better that the community will move to it quickly. The old syntax will nevertheless be kept around for the foreseeable future.

  2. Enforcing well-indentation: There will be some (fairly flexible) rules that catch indentation mistakes in programs (assuming the current syntax). These will issue warnings at first but I expect that they will be turned into errors at some point.

  3. Optional braces. Depending on the outcome of the experiment, braces { … } might become optional in more situations than now. For instance: Right now, braces around a single statement branch in an if-else are optional. In the future, they might also be optional around a branch consisting of multiple indented statements. This part is really not as dramatic as people make it now. Braces are already optional today in some situations. Coding styles differ as to where braces are put. Nobody has a problem with that, and I do not expect this to cause problems in the future.

  4. Using : (or something else) at ends of lines as a replacement for {...}. This seems to be the most contentious issue. If we introduce it at all, it will clearly have to co-exist with current syntax, and it will likely be put under a language extension flag.

If the two syntaxes not meant to cohabitate, will the non-default one remain as an opt-in ?

This would be an issue only if “noisy” control syntax would be phased out at some point in the far future. We’ll think about the question if and when that issue arises.

Is there a plan for the Dotty built-in editor support and Metals to converge ?

Yes. I will personally work with other people on the Dotty team, with Scala Center and with VirtusLabs to integrate Metals with Tasty and the Dotty presentation compiler.

Are dotty-developers going to participate in any way in the upgrade of scalameta so that it can support Dotty’s syntax ?

I don’t know. This might not be necessary for Metals to work. The current plan is to pull the necessary meta-information out of Tasty, so no source file parsing is needed. Syntax highlighting is already shared between Dotty and Metals.

Are dotty-developers going to help with porting the SemanticDB plugin to Dotty ?

I don’t know that yet either. I believe we have to find out first to what degree a Tasty → ScalaMeta export is feasible and whether something else is needed. Once we know that, we can start planning who does what.

15 Likes