github scala/scala3 3.6.2-RC1

pre-release2 days ago

Note

Scala 3.6.2 would become the first official release for the Scala 3.6 series.
Versions 3.6.0 (a broken release) and 3.6.1 (a hotfix release) should never be used. For more information, refer to the Scala 3.6.0 Post Mortem blogpost

Scala 3.6.2 should effectively be regarded as "3.6.0" for all intents and purposes.
This includes also an exception in versioning of produced TASTy files by its release candidates - 3.6.2-RC*.
Scala compiler emits TASTy files in an experimental version for candidates of a new minor version (e.g. 3.x.0-RC1), contrary to release candidates of a new patch version (e.g. 3.x.1-RC1) that emit a non-experimental TASTy in version established by the first stable release of their respective minor version.
Libraries should never publish artifacts containing experimental TASTy files. Instead, authors should wait until the stabilization of the TASTy format in Scala 3.6.2.

Highlights of the release

  • Stabilise SIP-47 (Adding Clause Interleaving to method definitions) #20861
  • Stablise SIP-64 #21668
  • Context Bounds for Polymorphic Functions #21643
  • Make named tuples a standard feature #21680
  • Switch mapping of context bounds to using clauses in 3.6 #21257
  • Enable betterMatchTypeExtractors in >= 3.6 #21198
  • Require named arguments for java defined annotations #21329
  • Refine the bounds of the Tuple.Filter type lambda predicate .. #21286
  • Add an infix shorthand for Tuple.{Append, Concat} #21288
  • Move NonEmptyTuple members into Tuple #21291
  • Add .msi artifacts to release assets #21834
  • Migration rewrites for infix arguments interpreted as named tuples #21949
  • Implement SIP-62 as experimental - For comprehension improvements #20522
  • Implement SIP-57 as experimental - add runtimeChecked method and annotation #20987

Other changes and fixes

Annotations

  • Tighten java annot value parsing #21650

Erasure

  • Fixes IllegalAccessError with Java package protected class #21362

Experimental: Capture Checking

  • Fix setup of CapSet arguments. #21309
  • Check all top-level covariant capture sets in checkNotUniversal #21428
  • Charge also dcs of local reaches to capture set of enclosing method #21443
  • No need to unbox if expected type is LhsProto #21508
  • Treat more closure parameter types as inferred #21583
  • Existential Capabilities #20566
  • Fixes for cleanup retains scheme #21350
  • Improve Contains handling #21361
  • Expand Capability types T to T^ only if no explicit capture set is given #21375
  • Tighten closure extractor in TreeInfo #21621

Experimental: Global Initialization

  • Analyze object when selecting from package #21511
  • Fix bug in init checker while compiling scodec-bits community project #21574

Experimental: Strict Equality

  • Fix #21392: Adjust canComparePredefined(Nothing, T) in explicit nulls #21504
  • Add tracking of NotNullInfo for Match, Case, Try trees (fix #21380) #21389

Experimentals

  • [experimental feature] Support HOAS pattern with type variables for quote pattern matching #18271

Exports

  • Re-use attachment in exportForwarders to handle ambiguous overloads #21518
  • Allow export statements in AnyVal #21653

Extension Methods

  • Make right assoc ext method fwd refs error #21641

Inline

  • Fix: throw an error before assigning ErrorType when expanding constValue #21364

Implicits

  • Fix prioritization of givens over implicits #21226

JVM Backend

  • Backend computes line number from source of position #21763

Linting

  • CheckUnused checks type param annotations #20549

Match Types

  • Fix #21295: Restrict provablyDisjoint with Nothings in invariant type params. #21891
  • Do not propagate TypeErrors of ops from TypeComparer#tryAlso #21070
  • Fix #21402: Always allow type member extraction for stable scrutinees in match types. #21700
  • Add a 3.6-migration warning for MT lubbing #21336
  • Always interpret underscores inside patterns as type bounds #21718

Opaque Types

  • Capture the kse3 issue in test cases and close it #21260

Parser

  • Guard against recursive lower bounds in constraints #21587
  • Handle old given syntax where identifier and type are seperated by new line #21957
  • Fix: Allow as as an infix type in non context bound types #21849
  • Revised given syntax #21208

Pattern Matching

  • Optimise SpaceEngine.signature #21791
  • Fix a bundle of patmat issues #21000

Pickling

  • Some fixes for AnnotatedTypes mapping #19957

Polyfunctions

  • Fix: Check if a PolyFunction TypeTree has no ByName parameters #21671

Presentation Compiler

  • Add regression test for issue 18726 #20318
  • Remove artificial CURSOR added to code in the completions #20899
  • Fix autoimports with using directives #21590

Quotes

  • Handle suspension due to macro call in arbitrary phases #21651
  • Have a better error message when healing types #21711
  • Bound TypeRepr by Matchable in Quotes #21377
  • Expr#show: Don't crash when the expression contains an unsupported type (like a SkolemType) #20494

Reflection

  • Add the possibility to create a typeSymbol in the Quotes API #20347
  • Fix stale symbols connected to lazy vals in macros #21559

Reporting

  • Add better error reporting for inlined non-immutable paths #21639
  • Only replace new errors by warnings under -migration #21289
  • Warn when named tuples resemble assignments #21823

REPL

  • REPL: JLine 3.27.0 (was 3.25.1) #21752
  • Ignore best effort settings in repl and update docs #21540

Rewrites

  • Remove empty argument lists for classes with only context bounds #21513
  • Fix rewrite logic for old <function> _ syntax #21715
  • Remove the -rewrite option for typechecks methods in Quotes #21547
  • Add migration rewrite for non-named arguments in Java annotations #21397

Scaladoc

  • Only trim one newline when preprocessing the content of a markdown code snippet #21519
  • Filter opaque modifier from object documentation #21640
  • Bump Inkuire version to fix it for the new Scala versions #21611

Standard Library

  • Scala 2.13.15 (was .14) #21648
  • Define binary symbolic compiletime ops as infix #21683
  • Finalize named tuples #21710
  • Move NamedTuple.head to NamedTupleDecomposition #21308

Transform

  • Fix treatment of separately compiled @native methods in FirstTransform #21593
  • Three fixes to SAM type handling #21596
  • Always rewrite empty List() to Nil #21689
  • Add support for clauseInterleaving in JVM generic signatures #21709

Typeclass Derivation

  • Nicer error message in case a derived method has an explicit term param #21332

Typer

  • Calm param autotupling for overloads #21552
  • Survive inaccessible types when computing implicit scope #21589
  • Avoid cyclic errors forcing default arg types #21597
  • Allow autotupling if fn's param is a type param #21741
  • Fix extending protected nested java classes #21857
  • Fix incorrect caching with dependent method parameters #21699

Contributors

Thank you to all the contributors who made this release possible 🎉

According to git shortlog -sn --no-merges 3.5.2..3.6.2-RC1 these are:

   128 Martin Odersky
    44 Dale Wijnand
    42 Wojciech Mazur
    35 Hamza REMMAL
    33 Kacper Korban
    31 Eugene Flesselle
    22 Hamza Remmal
    11 Katarzyna Marek
    10 Matt Bovel
     9 noti0na1
     9 rochala
     8 Jamie Thompson
     8 Jan Chyb
     7 Adrien Piquerez
     7 Som Snytt
     7 Sébastien Doeraene
     7 dependabot[bot]
     6 Yichen Xu
     5 EnzeXing
     5 Guillaume Martres
     4 Fengyun Liu
     4 kasiaMarek
     3 Martin Duhem
     3 Oliver Bracevac
     3 Piotr Chabelski
     2 Aleksander Rainko
     2 David Hua
     2 Florian3k
     2 HarrisL2
     2 Joel Wilsson
     2 Jędrzej Rochala
     2 Kenji Yoshida
     1 Eugene Yokota
     1 Kavin Satheeskumar
     1 Lorenzo Gabriele
     1 Michel Charpentier
     1 Ondrej Lhotak
     1 Raphael Jolly
     1 Tomasz Godzik
     1 Yuito Murase
     1 crunchyfrog
     1 philippus

Don't miss a new scala3 release

NewReleases is sending notifications on new releases.