Highlights of the release
- Bundle scala-cli in scala command (For RC1 requires JVM 17, further RCs will use native launchers)
- Introduce Best Effort compilation options #17582
- Add support for Pipelined builds #18880
- Add support for
var
in refinements #19982 - Implement SIP-42 - Support for binary integer literals #19405
Other changes and fixes
Backend
- Fix Closure span assignment in makeClosure #15841
Default parameters
Derivation
- Fix infinite loop in Mirror synthesis of unreducible match type #20133
Desugaring
- Add explanation to checkCaseClassInheritanceInvariant error msg #20141
Exports
Implicits
- Fix implicitNotFound message for type aliases #19343
- Normalize types before collecting parts determining implicit scope #20077
- Better error diagnostics under -explain-cyclic #20251
- Update unreducible match types error reporting #19954
- Improve ConstraintHandling of SkolemTypes #20175
Incremental Compilation
- Retain default parameters with
export
#20167
Inline
- Fix by-name parameter in beta-reduction #20096
- Add warning for anonymous inline classes (#16723) #20291
- Avoid conversion of
Unit
type into()
term #20295 - Type desugared
transparent inline def unapply
call in the correct mode #20108 - Regression: fix compilation performance on Windows #20193
- Fix inline match on blocks with multiple statements #20125
- Inline
unapply
s in the inlining phase #19382 - Fix outerSelect in Inliner #20313
Linting
- Fix #20146: attach the original name if there is an import selection for an indent #20163
- Add regression test for issue 18632 #20308
Match Types
- Make aliases of
MatchAlias
es normalTypeAlias
es #19871 - Fix #19746: Do not follow param term refs in
isConcrete
. #20015 - Do match type reduction atPhaseNoLater than ElimOpaque #20017
- Do not flag match types as
Deferred
and amend #20077 #20147 - Always use baseType when constraining patternTp with scrutineeTp #20032
- Use
MirrorSource.reduce
result forcompanionPath
#20207 - Regression: Fix match type extraction of a MatchAlias #20111
Polyfunctions
- Discard poly-functions when trying to resolve overloading #20181
Presentation Compiler
- Stabilise returned completions by improving deduplication + extra completions for constructors #19976
- Fix active param index for empty param lists #20142
- Delias type members in hover #20173
- Interactive: handle context bounds in extension construct workaround #20201
- Fix: prefer non-export definition locations #20252
- Don't show enum completions in new keyword context #20304
- Chore: Backport changes for presentation compiler #20345
- Add custom matchers for completions (fuzzy search for presentation compiler) #19850
Quotes
- Fix TermRef prefixes not having their type healed #20102
- Improve reporting in staging about the possible use of an incorrect class loader #20137
- Introduce MethodTypeKind to quotes reflection API #20249
- Add quote ASTs to TASTy #20165
Reflection
- Allow to beta reduce curried function applications in quotes reflect #18121
- Set the inlining phase in the Context used for checking macro trees #20087
- Add Symbol.isSuperAccessor to reflection API #13388
- Stabilize reflect
SymbolMethods.isSuperAccessor
#20198
Repl
- Fix validity period of derived SingleDenotations #19983
- Fix #18383: Never consider top-level
import
s as unused in the repl. #20310
Reporting
- Warn if extension receiver already has member #17543
- Deprecation of case class elements #17911
- Support src filter in -WConf (Closes #17635) #18783
- Add note about type mismatch in automatically inserted apply argument #20023
- Make error reporting resilient to exception thrown while reporting #20158
- Remove duplicate comma from Matchable selector warning #20159
- Generalize warnings for top-level calls to Any or AnyRef methods #20312
- Make CheckUnused not slow. #20321
Rewrites
- Patch indentation when removing braces (and other bug fixes in
-indent -rewrite
) #17522 - Extra check to avoid converting block expressions on the rhs of an in… #20043
Scaladoc
- Fix scaladoc crash on Windows - illegal path character #20311
- Scaladoc: improve refined function types rendering #20333
- Relax font-weight reset #20348
Scala JS
- Optimize main.js #20093
Settings
- Lift Scala Settings from experimental to stabilized #20199
Tooling
- Detect macro dependencies that are missing from the classloader #20139
- Write pipelined tasty in parallel. #20153
- ConsoleReporter sends INFO to stdout #20328
Transform
- Fix overloaded default methods test in RefChecks #20218
- Fix handling of AppliedType aliases in outerPrefix #20190
- Elide unit binding when beta-reducing #20085
Typer
- Reduce projections of type aliases with class type prefixes #19931
- Re-lub also hard union types in simplify #20027
- Fix #19789: Merge same TypeParamRef in orDominator #20090
- Allow SAM types to contain match alias refinements #20092
- Don't dealias when deciding which arguments to defer #20116
- Avoid the TypeVar.inst trap #20160
- Avoid crash when superType does not exist after erasure #20188
- Refine overloading and implicit disambiguation #20084
- Refactor constant folding of applications #20099
- Rollback constraints if
isSameType
failed second direction #20109 - Suppress "extension method will never be selected" for overrides #20164
- Allow SAM types to contain multiple refinements #20172
- Normalize when verifying if TypeTestCasts are unchecked #20258
Experimental Changes
- Named tuples second implementation #19174
- Change rules for given prioritization #19300
- Enable experimental mode when experimental feature is imported #19807
- Add message parameter to
@experimental
annotation #19935 - Implement match type amendment: extractors follow aliases and singletons #20161
Capture Checking
- Carry and check universal capability from parents correctly #20004
- Make parameter types of context functions inferred type trees #20155
- Handle reach capabilities correctly in depedent functions #20203
- Fix the visibility check in
markFree
#20221 - Make inline proxy vals have inferred types #20241
- CC: Give more info when context function parameters leak #20244
- Plug soundness hole for reach capabilities #20051
- Tighten the screws a bit more to seal the soundness hole for reach capabilities #20056
- Drop retains annotations in inferred type trees #20057
- Allow @retains arguments to be context functions #20232
- Fix conversion of this.fld capture refs under separate compilation #20238
Erased definitions
- Fix "Compiler crash when using CanThrow" #20210
- Only allow erased parameters in erased definitions #19686
Initialization
- Deprecate
StandardPlugin.init
in favor ofinitialize
method taking implicit Context #20330 - Fix missing changesParents in PostTyper #20062
- Special case for next field of colon colon in global init checker #20281
- Extend whitelist in global initialization checker #20290
Macro Annotations
- Allow macro annotation to transform companion #19677
- Remove experimental
MainAnnotation
/newMain
(replaced withMacroAnnotation
) #19937
Nullability
- Add flexible types to deal with Java-defined signatures under -Yexplicit-nulls #18112
- Fix #20287: Add flexible types to Quotes library #20293
- Add fromNullable to Predef for explicit nulls #20222
Contributors
Thank you to all the contributors who made this release possible 🎉
According to git shortlog -sn --no-merges 3.4.2..3.5.0-RC1
these are:
137 Martin Odersky
51 Eugene Flesselle
32 Jamie Thompson
25 Nicolas Stucki
22 Sébastien Doeraene
18 noti0na1
16 Matt Bovel
12 Guillaume Martres
9 Paweł Marks
9 Yichen Xu
8 Jan Chyb
7 Hamza REMMAL
6 Jędrzej Rochala
6 Som Snytt
5 Fengyun Liu
5 dependabot[bot]
3 Mikołaj Fornal
2 Aviv Keller
2 EnzeXing
2 Wojciech Mazur
1 Chris Pado
1 Filip Zybała
1 Georgi Krastev
1 Hamza Remmal
1 Jisoo Park
1 Katarzyna Marek
1 Lucas Nouguier
1 Lucy Martin
1 Ola Flisbäck
1 Pascal Weisenburger
1 Quentin Bernet
1 Raphael Jolly
1 Stephane Bersier
1 Tomasz Godzik
1 Yoonjae Jeon
1 aherlihy
1 rochala
1 willerf