Hello! We are happy to announce Scala 3.0.0-RC2. With this release, we are getting ready for 3.0.0. The significance of it is to give the community the chance and time to test all the changes meant for 3.0.0 final. A lot of bug fixes found their way into this release to ensure stability for 3.0.0 – more than 250 PRs were merged after the 3.0.0-RC1 release and until today!
Read more about this release below.
The 3.0.0-RC releases are release candidates for the 3.0.0 final. This means we aim to pack all the features meant for 3.0.0 into these releases and ensure their stability. After a grace period during which the community tests the latest release candidate, if no major problems are discovered, that release candidate becomes 3.0.0 stable.
3.0.0-RC2 is the next iteration of this release model. Its primary objective is to get tested by the community and generate feedback. If no major issues are discovered, we are planning to release 3.0.0 stable in 4 weeks from now. If there are indeed major issues discovered with RC2, we will have to release RC3 in between – possibly earlier than 4 weeks from now to speed up the way to 3.0.0.
Only critical issue fixes will find their way into 3.0.0 from now on, and any such fix will mean RC3. In the meanwhile, all the non-critical commits will appear only in 3.0.1. The way it will work is that we have a separate branch for 3.0.0, and we are going to backport the critical issue fixes into that branch from the main, 3.0.1, branch.
Post-3.0.0, we are planning to proceed with the release cycle we have had before 3.0.0. That is, we bump the stable patch version every 6 weeks and make an RC for that version. Simultaneously we make the RC of the previous patch version into a stable version.
Concretely, this means in 6 weeks from now we'll have 3.0.1-RC1, and in 12 weeks, we'll promote 3.0.1-RC1 into 3.0.1 stable and release 3.0.2-RC1.
As mentioned above, we are currently in an issue-fixing mode. So a lot of those 200+ PRs for this release were about issue fixing.
There are some notable changes worth mentioning.
PR #11920 restricts usage of experimental features only to nightlies and snapshots. This change ensures that changes deemed experimental will not propagate into the wider ecosystem provided that the wider ecosystem depends on stable releases. This is needed so that if an experimental feature is modified or removed from the language, the ecosystem will not be impacted.
PR #9884 adds a new language feature which enables unsafe null operations under explicit nulls. This is a tool to help projects migrating to full explicit nulls gradually. From now on, you can use an import
import scala.language.unsafeNulls to create an unsafe scope. For discussion, see the PR linked above, and for more information on the feature, see the documentation.
In PR #11671, we now treat the
scala.scalajs.js.|[A, B] as if it was a real Scala 3 union
A | B, which further boosts the support for Scala.js in Scala 3.
PR #11745 changes the
compiletime package API a bit.
compiletime.S was moved to
compiletime.ops.int.S and the package object
compiletime was removed in favor of top-level definitions.
The following are some notable metaprogramming changes included into this release:
- Add quotes.Type.valueOfConstant #11715
- Remove compiletime.Widen #11569
- Add -Xcheck-macros scalac option #11655
Thank you to all the contributors who made this release possible 🎉
git shortlog -sn --no-merges 3.0.0-RC1..3.0.0-RC2 these are:
150 Martin Odersky 83 Liu Fengyun 44 Nicolas Stucki 40 Guillaume Martres 17 Tom Grigg 14 Paweł Marks 12 Andrzej Ratajczak 11 Aleksander Boruch-Gruszecki 11 Yichen Xu 10 Phil 10 Filip Zybała 10 bjornregnell 10 Michał Pałka 9 Jamie Thompson 9 Raphael Jolly 8 Krzysztof Romanowski 7 Lan, Jian 6 Sébastien Doeraene 6 Adrien Piquerez 5 Olivier Blanvillain 5 Alex Merritt 4 Lukas Rytz 4 Anatolii Kmetiuk 3 Stéphane Micheloud 3 Ruslan Shevchenko 3 Jakob Odersky 3 Eric K Richardson 2 Som Snytt 2 xhudik 2 Ayush 2 noti0na1 1 Jonathan Brachthäuser 1 Ivano Pagano 1 Hanns Holger Rutz 1 Mathias 1 Guillaume Raffin 1 Miles Sabin 1 Fengyun Liu 1 Ben Hutchison 1 Roberto Bonvallet 1 Alexandre Archambault 1 Jakub Kozłowski
If you want to get your hands dirty and contribute to Dotty, now is a good time to get involved! Head to our Getting Started page for new contributors, and have a look at some of the good first issues. They make perfect entry points into hacking on the compiler.
We are looking forward to having you join the team of contributors.
Dotty now has a set of widely-used community libraries that are built against every nightly Dotty snapshot. Currently, this includes shapeless, ScalaPB, algebra, scalatest, scopt and squants. Join our community build to make sure that our regression suite includes your library.