Scala 3.0.0-RC2 – getting ready for 3.0.0
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.
Significance and further steps
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.
Changes for 3.0.0-RC2
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.
Restrict experimental features to unstable releases only
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.
New unsafeNulls
language feature
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.
Treat Scala.js pseudo-unions as real unions
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.
Other API changes
-Ycheck-init
was renamed to -Ysafe-init
. This flag is used to check safe initialization, more about which you can read in the documentation. See also PR #11920.
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.
Metaprogramming
The following are some notable metaprogramming changes included into this release:
Let us know what you think!
If you have questions or any sort of feedback, feel free to send us a message on our Gitter channel. If you encounter a bug, please open an issue on GitHub.
Contributors
Thank you to all the contributors who made this release possible 🎉
According to 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.