Highlights of the release
- Make polymorphic functions more efficient and expressive #17548
- SIP-56: Better foundations for match types #18262
- Make SIP 54 (Multi-Source Extension Overloads) a standard feature #17441
- Value parameter inference for polymorphic lambdas #18041
- Add
@publicInBinary
annotation and-WunstableInlineAccessors
linting flag #18402 - Stabilize Quotes
defn.PolyFunction
#18480 - Stabilize Quotes
Flags.AbsOverride
#18482 - Add
-experimental
compiler flags #18571 - Stabilize SIP-53 (quote pattern explicit type variable syntax) #18574
- Add reflect TypeRepr.dealiasKeepOpaques #18583
- Add attributes section to TASTy and use it for Stdlib TASTy #18599
- Error when reading class file with unknown newer jdk version #18618
- Add support for xsbti.compile.CompileProgress #18739
- Improve type inference for functions like fold #18780
- Improve error message for mismatched tasty versions, allow configuration of header unpickler #18828
- In 3.4 make refutable patterns in a for comprehension an error #18842
- Disallow use of PolyFunction in user code #18920
- Store source file in TASTY attributes #18948
- First step to pipelining support - enable reading Java symbols from TASTy #19074
- Activate constrainResult fix in 3.4 #19253
- Parallelise JVM backend - Scala 2 port #15392
Deprecation warnings for old syntax
_
type wildcards #18813private[this]
#18819var x = _
#18821with
as a type operator #18837xs: _*
varargs #18872- trailing
_
to force eta expansion #18926
Other changes and fixes
Backend
- Count size of parameters for platform limit check #18464
- Don't emit line number for synthetic unit value #18717
- Avoid too eager transform of $outer for lhs & accessor rhs #18949
- Make more anonymous functions static #19251
- Fix deadlock in initialization of CoreBTypes using Lazy container #19298
- Fix #18769: Allow HK type args in Java signatures. #18883
- Loading symbols from TASTy files directly #17594
- Use dedicated equals method for univerval equality of chars #18770
Erasure
- Get generic signature of fields entered after erasure from their accessor #19207
- Detect case where two alternatives are the same after widening ExprTypes #18787
- Improve erased params logic #18433
Experimental: Capture Checking
- Fix capture set variable installation in Setup #18885
- Don't follow opaque aliases when transforming sym info for cc #18929
- Reset
comparersInUse
to zero inContextState.reset
#18915 - Special handling of experimental.captureChecking import #17427
- Change handling of curried function types in capture checking #18131
- Fix #18246: correctly compute capture sets in
TypeComparer.glb
#18254 - New capture escape checking based on levels #18463
- A more robust scheme for resetting denotations after Recheck #18534
- A more flexible scheme for handling the universal capability #18699
- Fix potential soundness hole when adding references to a mapped capture set #18758
- Alternative scheme for cc encapsulation #18899
- Make reach refinement shallow #19171
F-bounds
- Don't check bounds of Java applications in Java units #18054
GADTs
- Avoid embedding SelectionProtos in Conversions #17755
- Freeze constraints while calculating GADT full bounds #18222
Implicits
- Followup fix to transparent inline conversion #18130
- Select local implicits over name-imported over wildcard imported #18203
- Fix how implicit candidates are combined #18321
- Improve error message about missing type of context function parameter #18788
- Support implicit arguments before extractor method #18671
- Tweak convertible implicits fix #18727
Incremental Compilation
- Make incremental compilation aware of synthesized mirrors #18310
Inference
- Honour hard unions in lubbing and param replacing #18680
Infrastructure
- Use -Yscala2-library-tasty to add Scala 2 lib TASTY to scalac (internal only) #18613
- Rename
stdlib-bootstrapped-tasty
toscala2-library-tasty
#18615 - Fix #19286: Freeze rubygems-update at < 3.5.0. #19288
Initialization
- Fix #17997: Handle intersection type as this type of super type #18069
- Add test for issue #17997 affecting the global object initialization checker #18141
- Fix i18624 and add test case for it #18859
- Treat new Array(0) as immutable #19192
- Fix #18407: Ignore Quote/Slice in init checker #18848
- Check safe initialization of static objects #16970
- Pattern match support in checking global objects #18127
- Fix crash in global object initialization checker when select target has no source #18627
- Fix warning underlining in global init checker #18668
- Fix i18629 #18839
- I18628 #18841
- Make safe init checker skip global objects #18906
- Handle local lazy vals properly #18998
Inline
- Fix regression: inline match crash when rhs uses private inlined methods #18595
- Add structural classes of dynamicApply before inlining #18766
- Set missing expansion span for copied inlined node #18229
- Fix
callTrace
of inlined methods #18738
Linting
- Keep tree of type ascriptions of quote pattern splices #18412
- Fix false positive in WUnused for renamed path-dependent imports #18468
- Fix false positive in WUnused for renamed path-dependent imports (2) #18617
- Fix wunused false positive on CanEqual #18641
- Implement -Xlint:private-shadow, type-parameter-shadow #17622
- Fix: reversed wconf parsing order to mirror scala 2 #18503
- Revert Fix false positive in WUnused for renamed path-dependent imports #18514
Macro Annotations
- Enter missing symbols generated by the MacroAnnotation expansion #18826
Match Types
- Allow Tuple.Head and Tuple.Tail to work with EmptyTuple #17189
- Fix match type reduction with avoided types #18043
- Strip LazyRef before calling simplified, in MT reduction #18218
- Fix MT separate compilation bug #18398
- Do not show deprecation warning for
_
in type match case #18887
Nullability
- Improve logic when to emit pattern type error #18093
- Allow nullability flow typing even in presence of pattern match #18206
- Fix #11967: flow typing nullability in pattern matches #18212
- Fix #18282: consider Predef.eq/ne in nullability flow typing #18299
- Make
this.type
nullable again (unless under -Yexplicit-nulls). #18399
Opaque Types
- Type ascribe trees that require opaque type usage #18101
Parser
- Fix selecting terms using root #18335
- Tweak java getlitch not to skip zero #18491
- Fix i18518 #18520
- Only apply
future
patches onfuture-migration
#18820 - Parser simple expression error recovery change from
null
to???
#19103
Pattern Matching
- Fix syntax and parsing of vararg patterns #18055
- Avoid over widening in SpaceEngine #18252
- Fix regression in exhaustivity of HK types #18303
- Fix missing case in isSubspace, which broke reachablility #18326
- Unsuppress unchecked warnings #18377
- Consider extension methods in Space isSameUnapply #18642
- Fix unreachable warning in deeply nested sealed hierarchy #18706
- Remove unnecessary and recursive Space decomposition #19216
- Prioritise sequence-matches over product-sequence-matches #19260
- Propagate constant in result of inline match #18455
- Disable match anaylsis in inlined trees #19190
- Teach provablyDisjoint about AnyKind #18510
- Warn about unchecked type tests in primitive catch cases #19206
- Reprioritise seq-match over product-seq-match #19277
- Fix exhaustivity due to separate TypeVar lambdas #18616
Presentation Compiler
- Support completions for extension definition parameter #18331
- Fix: Don't collect map, flatMap, withFilter in for-comprehension #18430
- Bugfix: Catch exception from the compiler for broken shadowed pickles #18502
- Bugfix: highlight for enum type params #18528
- Bugfix: No signature help for local methods #18594
- Bugfix: add
moduleClass
imported symbols inIndexedContext
#18620 - Bugfix: Named args completions with default values #18633
- Fix: match completions for type aliases #18667
- Bugfix: add multiline comment completion #18703
- Bugfix: Backticked named arguments #18704
- Bugfix: [metals] Case completions for tuple type #18751
- Completions should prepend, not replace as it is for Scala 2 #18803
- Bugfix: rename end marker #18838
- Presentation compiler: Bugfix for semantic tokens and synthetic decorations #18955
- Show documentation for value forwarders in completions #19200
- Bugfix: Document highlight on class constructors #19209
- Bugfix: Completions for extension methods with name conflict #19225
Polyfunctions
- Check user defined PolyFunction refinements #18457
- Support polymorphic functions with erased parameters #18293
- Use
PolyFunction
instead ofErasedFunction
#18295
Quotes
- Support type variable with bounds in quoted pattern #16910
- Add new EXPLICITtpt to TASTy format #17298
- Inhibit typer to insert contextual arguments when it is inside arguments of HOAS patterns #18040
- Compile quote patterns directly into QuotePattern AST #18133
- Add missing span to synthesized product mirror #18354
- Improve non-static macro implementation error message #18405
- Fix scala 2 macros in traits with type parameters #18663
- Patch
underlyingArgument
to avoid mapping into modules #18923 - Fallback erasing term references #18731
- Fix ignored type variable bound warning in type quote pattern #18199
- Splice hole with singleton captures #18357
- Fix macros with erased arguments #18431
- Deprecate 3-arg
FunctionClass
constructor #18472 - Deprecate
Quotes
{MethodType,TermParamClause}.isErased
#18479 - Avoid crashes on missing positions #19250
Reflection
- Add reflect.ValOrDefDef #16974
- Check New tree for ill-formed module instantiations #17553
- Add reflect
TypeLambda.paramVariances
#17568 - Make check flags for
newMethod
,newVal
andnewBind
in Quotes API less restrictive #18217 - Normalise mirrorType for mirror Synthesis #19199
- Add reflect
defn.FunctionClass
overloads #16849 - Stabilize reflect flag
JavaAnnotation
#19267 - Stabilize reflect
paramVariance
#19268
Reporting
- Take into account the result type of inline implicit conversions unless they are transparent #17924
- Check if a fatal warning issued in typer is silenced, before converting it into an error #18089
- Elide companion defs to a
object
extendingAnyVal
#18451 - Add regression test for issue i18493 #18497
- Add better explanation to error message #18665
- Better error message when accessing private members #18690
- Improve message for discarded pure non-Unit values #18723
- Better error message when a pattern match extractor is not found. #18725
- Give "did you mean ...?" hints also for simple identifiers #18747
- Better error for definition followed by keyword #18752
- Better explain message for 'pattern expected' #18753
- Improve failure message of enum
fromOrdinal
/valueOf
#19182 - Fix type mismatch error confusion between types with same simple name #19204
- Add hint for nested quotes missing staged
Quotes
#18755 - Better error messages for missing commas and more #18785
- Fix imported twice error messages #18102
- Improve error message for inaccessible types #18406
- Future migration warning for
with
type operator #18818 - Improve assertion error message for
Apply
andTypeApply
#18700 - Shorten traces for TypeMismatch errors under -explain [#18742](https://gi
- Improve
with
in type migration warning #18852
hub.com//pull/18742) - Future migration warning for alphanumeric infix operator #18908
- Make sure that trace is shown correctly in the presence of invalid line numbers #18930
- Add migration warning for XML literals in language future #19101
- Avoid diagnostic message forcing crashing the compiler #19113
- Make sure that the stacktrace is shown with
-Ydebug-unpickling
#19115 - Improve
asExprOf
cast error formatting #19195 - Do not warn on underscore wildcard type in pattern #19249
Scala-JS
Scaladoc
- Fix incorrect comment parser used in nightly scaladoc #18523
SemanticDB
- Export diagnostics (including unused warnings) to SemanticDB #17835
- Bugfix: Incorrect semanticdb span on Selectable #18576
- Bugfix: in semanticdb make synthetic apply disambiguator consistent w/ Scala 2 implicit #17341
Standard Library
- Intrinsify
constValueTuple
andsummonAll
#18013 - Fix #18609: Add language.
3.4
and language.3.4-migration
. #18610
TASTy format
- Eliminate FromJavaObject from TASTy of Java sources #19259
- Add new HOLETYPES to TASTy format #17225
- Add capture checking attributes to TASTy #19033
- Add TASTyInfo abstraction #19089
- Add UTF8 abstraction in the TASTy format #19090
Tooling
- Don't add explanation twice #18779
- ExtractDependencies uses more efficient caching #18403
- Introduce the SourceVersions 3.4 and 3.4-migration; make 3.4 the default. #18501
- Bugfix: Completions for named args in wrong order #18702
- Align unpickled Scala 2 accessors encoding with Scala 3 #18874
- Reinterpret Scala 2 case accessors
xyz$access$idx
#18907 - Presentation-compiler: Add synthetic decorations #18951
- Add compilation unit info to
ClassSymbol
#19010 - Make sure that patches for 3.0 are also applied in later versions #19018
Transform
- Also consider @targetName when checking private overrides #18361
- Teach PostTyper to handle untupled context closures #17739
- Properly dealias tuple types when specializing #18724
- Fix condition in prefixIsElidable to prevent compiler crash #18924
- Fix #18816: Transfer the span of rewired
This
nodes infullyParameterizedDef
. #18840 - List(...) optimization to avoid intermediate array #17166
- Make Array.apply an intrinsic #18537
- Add missing span to extension method select #18557
Tuples
- Handle TupleXXL in match analysis #19212
- Add
reverse
method toNonEmptyTuple
#13752 - Refine handling of pattern binders for large tuples #19085
- Introduce
Tuple.ReverseOnto
and use it inTuple.reverse
#19183
Typeclass Derivation
- Consider all parents when checking access to the children of a sum #19083
Typer
- Fix logic when comparing var/def bindings with val refinements #18049
- Fix variance checking in refinements #18053
- Fix accessibleType for package object prefixes #18057
- Refix avoid GADT casting with ProtoTypes #18085
- Avoid shadowing by private definitions in more situations #18142
- Refine infoDependsOnPrefix #18204
- Fix spurious subtype check pruning when both sides have unions #18213
- Reimplement support for type aliases in SAM types #18317
- Fix adaptation of constants to constant type aliases #18360
- Issue "positional after named argument" errors #18363
- Deprecate
ops.long.S
#18426 - Tweak selection from self types #18467
- Use the unwidened type when casting structural calls #18527
- Fix #18649: Use loBound of param types when materializing a context function. #18651
- Identify structural trees on Match Type qualifiers #18765
- Tweak approximation of type variables when computing default types #18798
- Admit parametric aliases of classes in parent typing #18849
- Also add privateWithin when creating constructor proxies #18893
- Revert part of
Simplify defn.FunctionOf.unapply
#19012 - Check @targetName when subtyping Refined Types #19081
- Record failures to adapt application arguments #18269
- Improve handling of AndTypes on the LHS of subtype comparisons #18235
- Allow inferred parameter types always, when eta-expanding #18771
- Fix failing bounds check on default getter #18419
- Use constructor's default getters in case class synthetic
apply
methods #18716 - Keep qualifier of Ident when selecting setter #18714
- Retract SynthesizeExtMethodReceiver mode when when going deeper in overloading resolution #18759
- Constant fold all the number conversion methods #17446
- Refine criterion when to widen types #17180
- Run all MatchType reduction under Mode.Type #17937
- Force consistent MT post-redux normalisation, disallow infinite match types #18073
- Fix #17467: Limit isNullable widening to stable TermRefs; remove under explicit nulls. #17470
- Disallow naming the root package, except for selections #18187
- Contextual varargs parameters #18186
- Encode the name of the attribute in Selectable.selectDynamic #18928
- Remove linearization requirement for override ref checks from java classes #18953
- Fix type inferencing (constraining) regressions #19189
- Repeated params must correspond in override #16836
- Convert SAM result types to function types #17740
- Disallow
infix
objects #17966 - Fix hasMatchingMember handling NoDenotation #17977
- Fix: disallow toplevel infix definitions for vals, vars, givens, methods and implicits #17994
- Curried methods are not valid SAM methods #18110
- Fix #17115: Try to normalize while computing
typeSize
. #18386 - Add default arguments to derived refined type #18435
- Handle dependent context functions #18443
- Fix variance loophole for private vars #18693
- Avoid crash arising from trying to find conversions from polymorphic singleton types #18760
- Allow inner classes of universal traits #18796
- Prevent crash when extension not found #18830
Contributors
Thank you to all the contributors who made this release possible 🎉
According to git shortlog -sn --no-merges 3.3.1..3.4.0-RC1
these are:
458 Martin Odersky
291 Nicolas Stucki
132 Fengyun Liu
118 Dale Wijnand
77 Jamie Thompson
69 Sébastien Doeraene
49 Paweł Marks
32 Chris Kipp
27 Guillaume Martres
26 Rikito Taniguchi
21 Yichen Xu
19 EnzeXing
14 Szymon Rodziewicz
13 Lucas Leblanc
12 Jakub Ciesluk
12 Jędrzej Rochala
12 Katarzyna Marek
11 Carl
10 David Hua
9 Florian3k
9 Wojciech Mazur
8 Eugene Flesselle
8 ghostbuster91
7 Hamza Remmal
7 Ondrej Lhotak
7 Quentin Bernet
6 Jan Chyb
6 Julien Richard-Foy
6 Kacper Korban
6 Seth Tisue
5 Lorenzo Gabriele
5 Matt Bovel
5 Som Snytt
5 Yuito Murase
5 dependabot[bot]
3 David
3 Lucas
3 Pascal Weisenburger
3 Tomasz Godzik
2 Aleksander Rainko
2 Decel
2 Guillaume Raffin
2 Ondřej Lhoták
2 Oron Port
2 danecek
2 rochala
1 Adam Dąbrowski
1 Aleksey Troitskiy
1 Arnout Engelen
1 Ausmarton Zarino Fernandes
1 Bjorn Regnell
1 Daniel Esik
1 Eugene Yokota
1 François Monniot
1 Jakub Cieśluk
1 John Duffell
1 John M. Higgins
1 Justin Reardon
1 Kai
1 Kisaragi
1 Lucas Nouguier
1 Lukas Rytz
1 LydiaSkuse
1 Martin Kucera
1 Martin Kučera
1 Matthew Rooney
1 Matthias Kurz
1 Mikołaj Fornal
1 Nicolas Almerge
1 Preveen P
1 Shardul Chiplunkar
1 Stefan Wachter
1 philippus
1 q-ata
1 slim