Scala 3.6.0 and 3.6.1 artifacts are now ready for tests of the new upcoming minor release.
Please, don’t upgrade to either 3.6.0 or 3.6.1.
Why no 3.6.0-RC1?
During the release of 3.6.0-RC1 error occurred that led to publishing its artifacts under version 3.6.0, and was followed by hotfix release 3.6.1 to mitigate damage that might have been introduced to tools using the latest version of Scala from Maven repositories.
You can read more about this accident in a dedicated blog post - Postmortem of Scala 3.6.0 | The Scala Programming Language
Which version of 3.6 should I use for tests?
As postmortem explains currently both 3.6.0 and 3.6.1 versions are available. The only difference between the 2 is usage of stable TASTy version in 3.6.1. Both of these versions should be treated as 3.6.0-RC1. We recommend using 3.6.1 for testing.
Which version would be stable?
We would prepare bug fixes in 3.6.2-RC versions and would release stable 3.6.2 no earlier than 18th November.
If no bug fixes would be required 3.6.1 might be announced as stable. However, it is a very unlikely scenario - it would be the first occurrence of a new minor release without the need for a subsequent RC version).
What’s new in Scala 3.6
Named tuples as now a standard (non-experimental) feature
New givens syntax
Clause Interleaving is now a stable feature
New experimental feature enabling improved for-comprehensions
OK, so we wait for 3.6.2. I assume these two (3.6.0 and 3.6.1) won’t be available on SDKMAN right?
I was confused about this. Then I read the announcement, it says:
Note: It is important not to confuse changes under SIP-64 with the experimental modularity improvements available under -language:experimental.modularity and -source:future. These changes are still being developed in the experimental phase and would require SIP committee acceptance before stabilisation.
OK that makes sense… but this means given syntax will likely change again? Am I understanding this right?
Currently, both of these versions are treated as RC, so no, these won’t be published to SDKMAN. We’ve never published RCs to either SDKMAN, Chocolatey or any other package manager
One of the key changes under -language:experimental.modularity is access to the type Self instead of viral type parameter. The exact semantics or syntax may or may not change in the future (thus it’s experimental feature). It’s still too early to decide when it can be stabilized - it would require a SIP proposal and approval. I would not expect it being standarized before next 2-3 minor versions.
SIP-64 - Improve Syntax for Context Bounds and Givens focued mostly on improving syntax. Most of the changes could be treated as improved desugering that could have been obtained using other techniques. Most of these changes are inline with preperation for -language:experimental.modularity and are unlikely to change.
However, there is 1 change releated to SIP-64 that has not made it until 3.6.0 cutoff - Context Bounds for Polymorphic Functions by KacperFKorban · Pull Request #21643 · scala/scala3 · GitHub, it is to be decided if it would be included in 3.7 or 3.6.2 (unlikely)
OK, that clears things up; I thought they would conflict, or experimental-modularity would override SIP-64 changes.
I thought that because of the as keyword I see in the SIP-64 changes mentioned here, which was discussed in the pre-SIP discussion, and I was under the impression that as was decided against (I was involved in that discussion)… But I think I’m confusing asfor context bounds with asfor named givens.
One more confusion is that this (which I thought was more “up-to-date”) seems different than this. But now I understand that they are related but separate (one is a follow-up to the other).
I’m still confused, I’ll probably wait until 3.7 for the dust to settle to fully understand it.