Scala Changelog

What's new in Scala 3.4.2 RC 1

Mar 29, 2024
  • Highlights of the release:
  • Bump JLine 3.19.0 -> 3.24.1 & sbt 1.9.7 -> 1.9.9 #19744
  • Refactor settings & improve dx #19766
  • Publish scala2-library-tasty-experimental #19588
  • Repl - method signatures in autocomplete #19917
  • Other changes and fixes:
  • Annotations:
  • Attempt implicit search for old style implicit parameters in Application matchArgs #19737
  • Backend:
  • Fix(#17255): cannot find Scala companion module from Java #19773
  • Change isStatic to isStaticOwner in hasLocalInstantiation #19803
  • Coverage:
  • Port coverage filter options for packages and files #19727
  • Default parameters:
  • Lift all non trivial prefixes for default parameters #19739
  • Doctool:
  • Prevent HTML/XSS Injection in Scala Search #19980
  • Parse search query param in Scaladoc #19669
  • Experimental: Capture Checking:
  • Disallow covariant caps in the lower bound of type members #19624
  • Ignore orphan parameters inside a retains annotation during Ycheck #19684
  • Fix the pickling of This inside capture sets #19797
  • Add updated to SeqViewOps #19798
  • Fix Function tree copier #19822
  • Drop FreeSeqFactory from stdlib-cc #19849
  • Fix i19859 #19860
  • Various fixes to stdlib-cc #19873
  • Add more methods in SeqViewOps #19993
  • Check This references in refersToParamOf #20005
  • Exports:
  • Fix the tparam bounds of exported inherited classes #18647
  • Implicits:
  • Prefer extensions over conversions for member selection #19717
  • Don't allow implicit conversions on prefixes of type selections #19934
  • Make sure typeParams returns a stable result even in the presence of completions #19974
  • Incremental Compilation:
  • Fix undercompilation upon ctor change #19911
  • Load but not enter case accessors fields in Scala2Unpickler #19926
  • Initialization:
  • Add supports for type cast and filtering type for field and method owner in global initialization checker #19612
  • Added a second trace for global init checker showing creation of mutable fields #19996
  • Suppressing repetitive warnings in the global initialization checker #19898
  • Inline:
  • Specialized retained inline FunctionN apply methods #19801
  • Avoid crash after StopMacroExpansion #19883
  • Check deprecation of inline methods #19914
  • Inline transparent implicit parameters when typing Unapply trees #19646
  • Restore pre-3.3.2 behavior of inline implicit def #19877
  • Match Types:
  • Cover patterns using reflect.TypeTest in isMatchTypeShaped #19923
  • Rework MatchType recursion in collectParts #19867
  • Nullability:
  • Fix #19808: Don't force to compute the owner of a symbol when there is no denotation #19813
  • Parser:
  • Add support for JEP-409 (sealed classes) + Add javacOpt directive #19080
  • Fix(#16458): regression in xml syntax parsing #19522
  • Fix parsing of conditional expressions in parentheses #19985
  • Presentation Compiler:
  • Allow range selection on function parameter to select a parameter list #19777
  • Quotes:
  • Disallow ill-staged references to local classes #19869
  • Add regression test for #19909 #19915
  • Detect non Expr[..] splice patterns #19944
  • Avoid spurious val binding in quote pattern #19948
  • Add regression test and imporve -Xprint-suspension message #19688
  • REPL:
  • Repl truncation copes with null #17336
  • Catch stackoverflow errors in the highlighter #19836
  • Fix a REPL bad symbolic reference #19786
  • Reflection:
  • Fix TypeTreeTypeTest to not match TypeBoundsTrees #19485
  • Improve message when tree cannot be shown as source #19906
  • Fix #19732: quotes.reflect.Ref incorrectly casting This to RefTree #19930
  • Add check for parents in Quotes (#19842) #19870
  • Reporting:
  • Improve error reporting for missing members #19800
  • Avoid repetitions in name hints #19975
  • Improve error message when using experimental definitions #19782
  • Make -Xprompt work as desired under -Werror #19765
  • Fix #19402: emit proper error in absence of using in given definitions #19714
  • Bugfix: Choose correct signature is signatureHelp for overloaded methods #19707
  • Unify completion pos usage, fix presentation compiler crash in interpolation #19614
  • Scaladoc:
  • Fix(#16610): warn ignored Scaladoc on multiple enum cases #19555
  • TASTy format:
  • Add patch for undefined behavior with object $ #19705
  • Fix(#19806): wrong tasty of scala module class reference #19827
  • Used derived types to type arguments of dependent function type #19838
  • Tooling:
  • Java TASTy: use new threadsafe writer implementation #19690
  • Remove -Yforce-inline-while-typing #19889
  • Cleanup unnecessary language flag #19865
  • Bugfix: Auto imports in worksheets in Scala 3 #19793
  • Refine behavior of -Yno-experimental #19741
  • Transform:
  • Short-circuit isCheckable with classSymbol #19634
  • Avoid eta-reduction of (..., f: T => R, ...) => f.apply(..) into f #19966
  • Tweak parameter accessor scheme #19719
  • Typer:
  • Update phrasing for NotClassType explain error message #19635
  • Fix java typer problems with inner class references and raw types #19747
  • Approximate MatchTypes with lub of case bodies, if non-recursive #19761
  • Revert broken changes with transparent inline #19922
  • Delay hard argument comparisons #20007
  • Fix #19607: Allow to instantiate wildcard type captures to TypeBounds. #19627
  • Fix #19907: Skip soft unions in widenSingle of widenInferred #19995
  • Fix untupling of functions in for comprehensions #19620

New in Scala 3.4.1 (Mar 29, 2024)

  • Highlights of the release:
  • Add support for @deprecatedInheritance #19082
  • Other changes and fixes:
  • Coverage:
  • Correctly prettify names in coverage info #18542
  • Desugaring:
  • Make apply proxies work with overloaded ctors #19464
  • Fix possible crash in Desugar #19567
  • Documentation:
  • Update private[this] deprecation warning and documentation #19393
  • Erasure:
  • Make eraseInfo work for classes with EmptyScopes #19550
  • Exports:
  • Do not propagate @tailrec to exported methods #19509
  • Fix retained flags in exports #19636
  • GADTs:
  • Only cache base types when gadt state is empty #19562
  • Add GADT symbols when typing typing-ahead lambda bodies#19644
  • Implicits:
  • Run CheckStatic after UncacheGivenAliases #19318
  • Add tests to verify that crash is fixed elsewhere. Fixes #19328 #19329
  • Don't search for implicit conversions to NoType #19563
  • Instantiate argument type vars before implicit search #19096
  • Adjust owner in Interactive.contextOfPath causing crash in ImplicitSearch #19875
  • Java Interop:
  • Classfile reader: handle JDK 9+ constant types in constant pool #19533
  • Linting:
  • Make fatal warnings not fail compilation early & aggregate warns #19245
  • Macro Annotations:
  • Check and enter missing symbols in MacroAnnotations only for definitions #19579
  • Match Types:
  • Normalize MatchAlias in unrollTupleTypes #19565
  • Fix #19445: Remove too-strict test in match type matching. #19511
  • Opaque Types:
  • Fix problems with cycle checks #19453
  • Parser:
  • Fix(#18265): crash on extension method without type nor RHS #18743
  • Warn when @volatile is used on vals #19462
  • Fix(#16459) xml parse regression #19531
  • Pattern Matching:
  • Fix false unreachable due to opaqueness #19368
  • Improve recursive decompose prefix fix #19375
  • Allow constraining a parameter to Nothing #19397
  • Add a test case, proving i15661 is fixed #19432
  • Presentation Compiler:
  • Improvement: Support completions for implicit classes #19314
  • Chore: Backport changes from Metals #19410
  • Fix goto-def on exported forwarders #19494
  • Backport pc changes from metals #19617
  • Chore: Backport changes from Metals #19592
  • Use comma counting for all signature help types #19520
  • Make PC more resilient to crashes #19488
  • Make order of renames and missing imports deterministic #19468
  • Chore: backport changes from metals #19452
  • Improve signature help by more stable position calculation + better named arg support #19214
  • Instantiate Type Vars in completion labels of extension methods #18914
  • Quotes:
  • Only evaluate transparent inline unapply once #19380
  • Update staging.Compiler.make documentation #19428
  • Error instead of StaleSymbol crash for certain cyclic macro dependencies #19549
  • Refine handling of StaleSymbol type errors #19605
  • Fix module symbol recovery from NoClassDefFoundError #19645
  • Fix HOAS pattern example and error message #19655
  • Set the correct type when copying reflect Inlined trees #19409
  • Reporting:
  • Don't explain erroneous bounds #19338
  • Better error diagnostics for cyclic references #19408
  • Properly identify empty bounds in error message #19310
  • Scala-JS:
  • Fix #19528: Actually remove Dynamic from interfaces of native JS classes. #19536
  • Consider static and non-static methods as non-double def #19400
  • Scaladoc:
  • Scaladoc - add option for dynamic side menu #19337
  • Scaladoc: Fix "case case Foo" in enum's cases #19519
  • Fix(#19377): show inherited abstract members in dedicated section #19552
  • Jsoup: 1.14.3 → 1.17.2 #19564
  • Extend copyright into 2024 #19367
  • Tooling:
  • Prioritize TASTy files over classfiles on classpath aggregation #19431
  • Transform:
  • Fix purity check for val inside of object #19598
  • Drop special treatment of function types in overloading resolution #19654
  • Add checks for the consistency of the parents in TreeChecker #18935
  • Type Inference:
  • More careful type variable instance improvements #19659
  • Typer:
  • Reject wildcard types in using clauses #19459
  • Don't leave underspecified SAM types in the code #19461
  • Also compute base classes of wildcardTypes #19465
  • Fix(#15784): ident rule for pat match was too strict #19501
  • Heal occurrences of => T between ElimByName and Erasure #19558
  • Fix(#i18645): overload ext method body in braces didn't compile #19651
  • Fix #19202: Passing NotNullInfos to a mutable field of a Completer #19463
  • Fix Java record problems (#19578) and (#19386) #19583
  • Improve when deprecation warnings are emitted #19621
  • Space: Replace showType & make Space Showable #19370

New in Scala 3.4.1 RC 2 (Mar 27, 2024)

  • Backported fixes:
  • Adjust owner in Interactive.contextOfPath causing crash in ImplicitSearch #19875
  • Add GADT symbols when typing typing-ahead lambda bodies #19644

New in Scala 3.4.1 RC 1 (Feb 29, 2024)

  • Add support for @deprecatedInheritance #19082

New in Scala 3.4.0 (Feb 29, 2024)

  • 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
  • Avoid generating given definitions that loop #19282

New in Scala 3.4.0 RC 4 (Feb 15, 2024)

  • Backported fixes:
  • Update jsoup dependency of Scaladoc to 7.2 #19584

New in Scala 3.4.0 RC 2 (Jan 25, 2024)

  • Fix expandParam's use of argForParam/isArgPrefixOf. #19412
  • Remove ascriptionVarargsUnpacking as we never used it #19399
  • Make explicit arguments for context bounds an error from 3.5 #19316
  • Avoid generating given definitions that loop #19282
  • Turn given loop prevention on for -source future #19392
  • Fix algorithm to prevent recursive givens #19411

New in Scala 3.4.0 RC 1 (Jan 19, 2024)

  • 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 #18813
  • private[this] #18819
  • var x = _ #18821
  • with as a type operator #18837
  • xs: _* 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 in ContextState.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 to scala2-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 on future-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 in IndexedContext #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 of ErasedFunction #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 and newBind 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 extending AnyVal #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 and TypeApply #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:
  • Fix #18658: Handle varargs of generic types in JSExportsGen. #18659
  • 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 and summonAll #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 in fullyParameterizedDef. #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 to NonEmptyTuple #13752
  • Refine handling of pattern binders for large tuples #19085
  • Introduce Tuple.ReverseOnto and use it in Tuple.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

New in Scala 3.3.2 RC 1 (Dec 20, 2023)

  • Highlights of the release:
  • Improvements to the Coverage (detailed list below)
  • Add Stable Presentation Compiler #17528
  • Other changes and fixes:
  • Backend:
  • Make sure synthetic apply methods are generated in deterministic order #18210
  • Coverage:
  • Only lift inner expressions when lifting repeated Typed arguments #18424
  • Fix: scoverage statement's line number should be 1-base #18932
  • Do not lift applications of context functions #18498
  • Don't lift the argument of a synchronized block in scoverage #16941
  • Fix the issue with coverage inside of a TypeApply #18420
  • Coverage: mark case bodies as branches; don't ignore branches with synthetic spans #18437
  • Documentation:
  • Compiler plugin Scaladoc: document phase requirement #18394
  • Exports:
  • Refine override exclude criterion for export forwarders #17590
  • Incremental Compilation:
  • Fix overcompilation due to unstable context bound desugaring #18280
  • Inline:
  • Don't generate a super accessor for an inline method call #17598
  • Linting:
  • Wunused: Only use type treverser for checking refinements in refined type trees #17929
  • Parser:
  • Add examples taken from reference page #18066
  • Test for #18345 #18349
  • Pattern Matching:
  • Properly refine type of inlined unapply pattern #18292
  • Presentation Compiler:
  • Bugfix: suggest correct arg name completions for lambda expressions #18379
  • Improvement: print better bracket suffix in completion item label #18380
  • Fix presentation compiler autoimports, update presentation compiler dependencies #18264
  • Update scala3-presentation-compiler to 39e349e #18296
  • Update presentation compiler with changes from PR 5287 #18301
  • Update presentation compiler to a829a6a #18347
  • Bugfix: highlight enum cases correctly #18362
  • Quotes:
  • Do not beta-reduce/eta-expand pattern splices with contextual function types #18198
  • XcheckMacro types of Block expression and Apply/TypeApply function #18242
  • Fix owner of splices in class statements #18359
  • Handle macro dependencies through class of this #18396
  • Add missing span in QuoteMatcher #18178
  • Fix stale symbol crashes in some path depended types in macro contexts #18077
  • Simplify avoidance of local types of Hole #17571
  • Reporting:
  • Detail "not a constant type" message #17626
  • Suggest imports for the expected type of the underlying implicit not found error #17976
  • Fix: report correct location on a repeat modifier #17982
  • Warn when calling synchronized on AnyVal #18021
  • Fix compile error message in wildcard exports #18189
  • Improve parameter type inference error messaging #18190
  • Don't report warnings in migration when performing rewrites #15589
  • Fix crash reporter, units and phases #17754
  • Omit more prefixes in non-package module printing #17758
  • Fix pretty printer to handle using and erased modifier #17952
  • Add -Yprint-tasty compiler flag #17986
  • Add actionable item to PatternMatchExhaustivity diagnostic #18314
  • Scaladoc:
  • Fix: -no-link-warnings does not work #17028
  • Fix: Validation for API link #17099
  • Scaladoc: type rendering fixes and improvements #17213
  • Feat: Add a custom icon #17241
  • Fix: Correction of the siteRoot path #17297
  • Fix: Correct the navigation to anchor #17910
  • Fix: Style for wiki syntax #18079
  • Fix NoSuchElementException in scaladoc #18184
  • SemanticDB:
  • Check for primary constructor in namePresentInSource #18325
  • Add -semanticdb-text compiler option #18307
  • Typer:
  • Fix pattern generation in "ordinal" mirror method #17570
  • Fix superType of SuperType #17574
  • Avoid crash in erasure when reference cannot be emitted #18056
  • Disallow overloading from breaking stable patterns #18327
  • Fix widen types before checking an implicit view exists #18719
  • Properly handle SAM types with wildcards #18201
  • Handle recursion in collectParts #18214
  • Allow eta-expansion of inline defs #18249
  • Stable names for lambda lifted methods #18281

New in Scala 3.3.1 (Sep 7, 2023)

  • Highlights of the release:
  • Support records in JavaParsers #16762
  • Port JVM backend refactor from Scala 2 #15322
  • Other changes and fixes:
  • Backend:
  • Disallow mixins where super calls bind to vals #16908
  • Fix #15107: Avoid re-emitting a LineNumber after only LabelNodes. #16813
  • Coverage:
  • Fix #17042: Preserve the shape of secondary ctors in instrumentCoverage. #17111
  • Default parameters:
  • Dupe fix when finding default arg getters #17058
  • Documentation:
  • Fix: ensure syntax blocks for ebnf are marked as such #16837
  • Erasure:
  • Handle @companionClass and @companionMethod meta-annotations #17091
  • Extension Methods:
  • Support extension methods imported from different objects #17050
  • GADTs:
  • Fix tuple member selection so it works with GADT healing #16766
  • Fix upper bound constraints, that are higher-kinded #16744
  • Split out immutable GadtConstraint #16602
  • Implicits:
  • Improve subtyping check for not yet eta-expanded higher kinded types #17139
  • Harden tpd.Apply/TypeApply in case of errors #16887
  • Try to be more subtle when inferring type parameters of class parents #16896
  • Include P in the implicit scope of P.this.type #17088
  • Incremental Compilation:
  • Fix under-compilation when the method type in a SAM changes #16996
  • Infrastructure:
  • Set reference version to 3.3.0-RC6 #17504
  • Fix #17119: Download Coursier from GitHub directly #17141
  • Inline:
  • Remove NamedArg from inlined arguments #17228
  • Don't generate a Select for a TermRef with NoPrefix #16754
  • Prepare bodies of inline forwarders eagerly #16757
  • Do not remove inline method implementations until PruneErasedDefs #17408
  • Java Interop:
  • ClassfileParser: allow missing param names (for JDK 21) #17536
  • Linting:
  • Improve -Wunused: locals, privates with unset vars warning #16639 #17160
  • Fix wunused false positive when deriving alias type #17157
  • Port -Wnonunit-statement setting for dotty #16936
  • Match Types:
  • Normalize match type usage during implicit lookup #17457
  • Fix #13757: Explicitly disallow higher-kinded scrutinees of match types. #17322
  • Fix match type reduction with wildcard type arguments #17065
  • Fix check whether classtag can be generated for match types #16708
  • Parser:
  • Allow lines starting with . to fall outside previous indentation widths #17056
  • Pattern Matching:
  • Fix #11541: Specialize ClassTag[T] in exhaustivity check #17385
  • Check outer class prefixes in type projections when pattern matching #17136
  • Make unchecked cases non-@unchecked and non-unreachable #16958
  • Fix #16899: Better handle X instanceOf P where X is T1 | T2 #17382
  • Pickling:
  • ClassfileParser: Avoid cycle when accessing companion in inner class lookup #16882
  • Polyfunctions:
  • Fix type aliases in beta-reduction of polyfunctions #17054
  • Quotes:
  • Register paramProxy and thisProxy in Quote type #17541
  • Only check newVal/newMethod privateWithin on -Xcheck-macros #17437
  • Unencode quote and splice trees #17342
  • Correctly type Expr.ofTupleFromSeq for arity > 22 #17261
  • Use TermRef to distinguish distinct Type[T] instances #17205
  • Check level consistency of SingletonTypeTree as a type #17209
  • Fix splice type variable pattern detection #17048
  • Avoid creation of @SplicedType quote local refrences #17051
  • Dealias type references when healing types in quotes #17049
  • Replace quoted type variables in signature of HOAS pattern result #16951
  • Beta-reduce directly applied PolymorphicFunction #16623
  • Use Object.toString for quoted.{Expr, Type} #16663
  • Fix Splicer.isEscapedVariable #16838
  • Fix references to class members defined in quotes #17107
  • Handle pickled forward references in pickled expressions #16855
  • Fix #16615 - crashes of path dependent types in spliced Type.of #16773
  • Disallow local term references in staged types #16362
  • Refactor level checking / type healing logic #17082
  • Dealias quoted types when staging #17059
  • Fix quotes with references to path dependent types #17081
  • Make arguments order in quote hole deterministic #17405
  • Only transform the body of the quote with QuoteTransformer #17451
  • Place staged type captures in Quote AST #17424
  • Add SplicePattern AST to parse and type quote pattern splices #17396
  • Reflection:
  • -Xcheck-macros: add hint when a symbol in created twice #16733
  • Assert that symbols created using reflect API have correct privateWithin symbols #17352
  • Fix reflect.LambdaType type test #16972
  • Improve New/Select -Ycheck message #16746
  • Improve error message for CyclicReference in macros #16749
  • Add reflect defn.FunctionClass overloads #16849
  • REPL:
  • Always load REPL classes in macros including the output directory #16866
  • Reporting:
  • Improve missing argument list error #17126
  • Improve implicit parameter error message with aliases #17125
  • Improve "constructor proxy shadows outer" handling #17154
  • Clarify ambiguous reference error message #16137
  • Hint about forbidden combination of implicit values and conversions #16735
  • Attach explanation message to diagnostic message #16787
  • Propagate implicit search errors from implicit macros #16840
  • Detail UnapplyInvalidReturnType error message #17167
  • Add way to debug -Xcheck-macros tree checking #16973
  • Enrich and finesse compiler crash reporting #17031
  • Allow @implicitNotFound messages as explanations #16893
  • Include top-level symbols from same file in outer ambiguity error #17033
  • Do not issue deprecation warnings when declaring deprecated case classes #17165
  • Scala-JS:
  • Fix #17344: Make implicit references to this above dynamic imports explicit. #17357
  • Fix #12621: Better error message for JS trait ctor param. #16811
  • Fix #16801: Handle Closure's of s.r.FunctionXXL. #16809
  • Fix #17549: Unify how Memoize and Constructors decide what fields need storing. #17560
  • Scaladoc:
  • Feat: Add a blog configuration with yaml #17214
  • Don't render the "$" for module #17302
  • Fix: Add scrollbar to the sidebar #17203
  • Scaladoc: fix crash when processing extends call #17260
  • Fix: Modify the CSS so that the logo of the generated documentation is adaptive #17172
  • Fix: Remove the duplicate parameter when generating the scaladoc. #17097
  • Fix: padding top in mobile version #17019
  • Fix: tap target of the menu in Mobile version #17018
  • Scaladoc: Fix expand icon not changing on anchor link #17053
  • Scaladoc: fix inkuire generation for PolyTypes #17129
  • Re port scroll bar #17463
  • Handle empty files and truncated YAML front matter #17527
  • SemanticDB:
  • Make sure symbol exists before calling owner #16860
  • Support LambdaType (convert from HKTypeLambda) #16056
  • Specification:
  • Apply class-shadowing.md to the Spec #16839
  • Adding base for future Spec into the compiler repo #16825
  • Standard Library:
  • Optimization: avoid NotGiven allocations #17090
  • Tooling:
  • Disable ExtractSemanticDB phase when writing to output directory defined as JAR. #16790
  • Print owner of bind symbol with -Yprint-debug-owners #16854
  • Small fixes to allow using Metals with scaladoc with sbt #16816
  • Transform:
  • Move CrossVersionChecks before FirstTransform #17301
  • Fix needsOuterIfReferenced #17159
  • Drop incorrect super accessor in trait subclass #17062
  • Generate toString only for synthetic companions of case classes #16890
  • Check trait constructor for accessibility even if not called at Typer #17094
  • Fix #17435: A simpler fix #17436
  • Typer:
  • Preserve type bounds for inlined definitions in posttyper #17190
  • Change logic to find members of recursive types #17386
  • Recognize named arguments in isFunctionWithUnknownParamType #17161
  • Better comparisons for type projections #17092
  • Allow selectDynamic and applyDynamic to be extension methods #17106
  • Fix use of accessibleFrom when finding default arg getters #16977
  • Map class literal constant types #16988
  • Always use adapted type in withDenotation #16901
  • Restrict captureWildcards to only be used if needed #16799
  • Don't capture wildcards if in closure or by-name #16732
  • Infer: Don't minimise to Nothing if there's an upper bound #16786
  • Perform Matchable check only if type test is needed #16824
  • Don't eta expand unary varargs methods #16892
  • Fix beta-reduction with Nothing and null args #16938
  • Generate kind-correct wildcards when selecting from a wildcard #17025
  • Fix #16405 ctd - wildcards prematurely resolving to Nothing #16764
  • Test: add regression test for #7790 #17473
  • Properly handle AnyVals as refinement members of Selectables #16286

New in Scala 3.3.1 RC 7 (Aug 30, 2023)

  • Backported fixes:
  • Tweak selection from self types #18467
  • Revert "Add reflect defn.FunctionClass overloads" #18473

New in Scala 3.3.1 RC 6 (Aug 30, 2023)

  • Backported fixes:
  • Refine infoDependsOnPrefix #18204
  • FDo not compute protoFormal if param.tpt is empty #18288
  • Revert "Normalize match type usage during implicit lookup" #18440

New in Scala 3.3.1 RC 5 (Aug 22, 2023)

  • Backported fixes:
  • Heal stage inconsistent prefixes of type projections #18239
  • Fix regression #17245: Overloaded methods with ClassTags #18286
  • Disallow taking singleton types of packages again #18232
  • A slightly more conservative version of #14218 #18352
  • Record failures to adapt application arguments #18269
  • Fix regression in exhaustivity of HK types #18303

New in Scala 3.3.1 RC 4 (Aug 10, 2023)

  • Backported fixes:
  • Revert "Include top-level symbols from same file in outer ambiguity error" #17438

New in Scala 3.3.1 RC 3 (Jul 7, 2023)

  • Backported fixes:
  • Add clause for protected visibility from package objects #18134

New in Scala 3.3.1 RC 2 (Jun 29, 2023)

  • Dealias types in `New`` before matching quotes #17615
  • Fix accessibleType for package object prefixes #18057

New in Scala 3.3.1 RC 1 (May 30, 2023)

  • Highlights of the release:
  • Support records in JavaParsers #16762
  • Port JVM backend refactor from Scala 2 #15322
  • Other changes and fixes:
  • Backend:
  • Disallow mixins where super calls bind to vals #16908
  • Fix #15107: Avoid re-emitting a LineNumber after only LabelNodes. #16813
  • Coverage:
  • Fix #17042: Preserve the shape of secondary ctors in instrumentCoverage. #17111
  • Default parameters:
  • Dupe fix when finding default arg getters #17058
  • Documentation:
  • Fix: ensure syntax blocks for ebnf are marked as such #16837
  • Erasure:
  • Handle @companionClass and @companionMethod meta-annotations #17091
  • Extension Methods:
  • Support extension methods imported from different objects #17050
  • GADTs:
  • Fix tuple member selection so it works with GADT healing #16766
  • Fix upper bound constraints, that are higher-kinded #16744
  • Split out immutable GadtConstraint #16602
  • Implicits:
  • Improve subtyping check for not yet eta-expanded higher kinded types #17139
  • Harden tpd.Apply/TypeApply in case of errors #16887
  • Try to be more subtle when inferring type parameters of class parents #16896
  • Include P in the implicit scope of P.this.type #17088
  • Incremental Compilation:
  • Fix under-compilation when the method type in a SAM changes #16996
  • Infrastructure:
  • Set reference version to 3.3.0-RC6 #17504
  • Fix #17119: Download Coursier from GitHub directly #17141
  • Inline:
  • Remove NamedArg from inlined arguments #17228
  • Don't generate a Select for a TermRef with NoPrefix #16754
  • Prepare bodies of inline forwarders eagerly #16757
  • Do not remove inline method implementations until PruneErasedDefs #17408
  • Java Interop:
  • ClassfileParser: allow missing param names (for JDK 21) #17536
  • Linting:
  • Improve -Wunused: locals, privates with unset vars warning #16639 #17160
  • Fix wunused false positive when deriving alias type #17157
  • Port -Wnonunit-statement setting for dotty #16936
  • Match Types:
  • Normalize match type usage during implicit lookup #17457
  • Fix #13757: Explicitly disallow higher-kinded scrutinees of match types. #17322
  • Fix match type reduction with wildcard type arguments #17065
  • Fix check whether classtag can be generated for match types #16708
  • Parser:
  • Allow lines starting with . to fall outside previous indentation widths #17056
  • Pattern Matching:
  • Fix #11541: Specialize ClassTag[T] in exhaustivity check #17385
  • Check outer class prefixes in type projections when pattern matching #17136
  • Make unchecked cases non-@unchecked and non-unreachable #16958
  • Fix #16899: Better handle X instanceOf P where X is T1 | T2 #17382
  • Pickling:
  • ClassfileParser: Avoid cycle when accessing companion in inner class lookup #16882
  • Polyfunctions:
  • Fix type aliases in beta-reduction of polyfunctions #17054
  • Quotes:
  • Register paramProxy and thisProxy in Quote type #17541
  • Only check newVal/newMethod privateWithin on -Xcheck-macros #17437
  • Unencode quote and splice trees #17342
  • Correctly type Expr.ofTupleFromSeq for arity > 22 #17261
  • Use TermRef to distinguish distinct Type[T] instances #17205
  • Check level consistency of SingletonTypeTree as a type #17209
  • Fix splice type variable pattern detection #17048
  • Avoid creation of @SplicedType quote local refrences #17051
  • Dealias type references when healing types in quotes #17049
  • Replace quoted type variables in signature of HOAS pattern result #16951
  • Beta-reduce directly applied PolymorphicFunction #16623
  • Use Object.toString for quoted.{Expr, Type} #16663
  • Fix Splicer.isEscapedVariable #16838
  • Fix references to class members defined in quotes #17107
  • Handle pickled forward references in pickled expressions #16855
  • Fix #16615 - crashes of path dependent types in spliced Type.of #16773
  • Disallow local term references in staged types #16362
  • Refactor level checking / type healing logic #17082
  • Dealias quoted types when staging #17059
  • Fix quotes with references to path dependent types #17081
  • Make arguments order in quote hole deterministic #17405
  • Only transform the body of the quote with QuoteTransformer #17451
  • Place staged type captures in Quote AST #17424
  • Add SplicePattern AST to parse and type quote pattern splices #17396
  • Reflection:
  • -Xcheck-macros: add hint when a symbol in created twice #16733
  • Assert that symbols created using reflect API have correct privateWithin symbols #17352
  • Fix reflect.LambdaType type test #16972
  • Improve New/Select -Ycheck message #16746
  • Improve error message for CyclicReference in macros #16749
  • Add reflect defn.FunctionClass overloads #16849
  • REPL:
  • Always load REPL classes in macros including the output directory #16866
  • Reporting:
  • Improve missing argument list error #17126
  • Improve implicit parameter error message with aliases #17125
  • Improve "constructor proxy shadows outer" handling #17154
  • Clarify ambiguous reference error message #16137
  • Hint about forbidden combination of implicit values and conversions #16735
  • Attach explanation message to diagnostic message #16787
  • Propagate implicit search errors from implicit macros #16840
  • Detail UnapplyInvalidReturnType error message #17167
  • Add way to debug -Xcheck-macros tree checking #16973
  • Enrich and finesse compiler crash reporting #17031
  • Allow @implicitNotFound messages as explanations #16893
  • Include top-level symbols from same file in outer ambiguity error #17033
  • Do not issue deprecation warnings when declaring deprecated case classes #17165
  • Scala-JS:
  • Fix #17344: Make implicit references to this above dynamic imports explicit. #17357
  • Fix #12621: Better error message for JS trait ctor param. #16811
  • Fix #16801: Handle Closure's of s.r.FunctionXXL. #16809
  • Fix #17549: Unify how Memoize and Constructors decide what fields need storing. #17560
  • Scaladoc:
  • Feat: Add a blog configuration with yaml #17214
  • Don't render the "$" for module #17302
  • Fix: Add scrollbar to the sidebar #17203
  • Scaladoc: fix crash when processing extends call #17260
  • Fix: Modify the CSS so that the logo of the generated documentation is adaptive #17172
  • Fix: Remove the duplicate parameter when generating the scaladoc. #17097
  • Fix: padding top in mobile version #17019
  • Fix: tap target of the menu in Mobile version #17018
  • Scaladoc: Fix expand icon not changing on anchor link #17053
  • Scaladoc: fix inkuire generation for PolyTypes #17129
  • Re port scroll bar #17463
  • Handle empty files and truncated YAML front matter #17527
  • SemanticDB:
  • Make sure symbol exists before calling owner #16860
  • Support LambdaType (convert from HKTypeLambda) #16056
  • Specification:
  • Apply class-shadowing.md to the Spec #16839
  • Adding base for future Spec into the compiler repo #16825
  • Standard Library:
  • Optimization: avoid NotGiven allocations #17090
  • Tooling:
  • Disable ExtractSemanticDB phase when writing to output directory defined as JAR. #16790
  • Print owner of bind symbol with -Yprint-debug-owners #16854
  • Small fixes to allow using Metals with scaladoc with sbt #16816
  • Transform:
  • Move CrossVersionChecks before FirstTransform #17301
  • Fix needsOuterIfReferenced #17159
  • Drop incorrect super accessor in trait subclass #17062
  • Generate toString only for synthetic companions of case classes #16890
  • Check trait constructor for accessibility even if not called at Typer #17094
  • Fix #17435: A simpler fix #17436
  • Typer:
  • Preserve type bounds for inlined definitions in posttyper #17190
  • Change logic to find members of recursive types #17386
  • Recognize named arguments in isFunctionWithUnknownParamType #17161
  • Better comparisons for type projections #17092
  • Allow selectDynamic and applyDynamic to be extension methods #17106
  • Fix use of accessibleFrom when finding default arg getters #16977
  • Map class literal constant types #16988
  • Always use adapted type in withDenotation #16901
  • Restrict captureWildcards to only be used if needed #16799
  • Don't capture wildcards if in closure or by-name #16732
  • Infer: Don't minimise to Nothing if there's an upper bound #16786
  • Perform Matchable check only if type test is needed #16824
  • Don't eta expand unary varargs methods #16892
  • Fix beta-reduction with Nothing and null args #16938
  • Generate kind-correct wildcards when selecting from a wildcard #17025
  • Fix #16405 ctd - wildcards prematurely resolving to Nothing #16764
  • Test: add regression test for #7790 #17473
  • Properly handle AnyVals as refinement members of Selectables #16286

New in Scala 3.3.0 (May 30, 2023)

  • Highlights of the release:
  • Stabilize new lazy vals #16614
  • Experimental Macro annotations #16392 #16454 #16534
  • Fix stability check for inline parameters #15511
  • Make fewerBraces a standard feature #16297
  • Add new front-end phase for unused entities and add support for unused imports #16157
  • Implement -Wvalue-discard warning #15975
  • Introduce boundary/break control abstraction. #16612
  • Other changes and fixes:
  • Annotations:
  • Support use-site meta-annotations #16445
  • Desugaring:
  • Reuse typed prefix for applyDynamic and applyDynamicNamed #16552
  • Fix object selftype match error #16441
  • Erasure:
  • Dealias before checking for outer references in types #16525
  • Fix generic signature for type params bounded by primitive #16442
  • Avoid EmptyScope.cloneScope crashing, eg on missing references #16314
  • GADTs:
  • Inline GADT state restoring in TypeComparer #16564
  • Add extension/conversion to GADT selection healing #16638
  • Split out immutable GadtConstraint #16602
  • Avoid bidirectional GADT typebounds from fullBounds #15683
  • Incremental compilation:
  • Unpickle arguments of parent constructors in Templates lazily #16688
  • Initialization:
  • Fix #16438: Supply dummy args for erroneous parent call in init check #16448
  • Inline:
  • Dealias in ConstantValue, for inline if cond #16652
  • Set Span for top level annotations generated in PostTyper #16378
  • Interpolate any type vars from comparing against SelectionProto #16348
  • Handle binding of beta reduced inlined lambdas #16377
  • Do not add dummy RHS to abstract inline methods #16510
  • Warn on inline given aliases with functions as RHS #16499
  • Support inline overrides in value classes #16523
  • Java interop:
  • Represent Java annotations as interfaces so they can be extended, and disallow various misuses of them #16260
  • Linting:
  • Fix -Wunused:import registering constructor instead of its owner (also fix false positive for enum) #16661
  • Fix #16675 : -Wunused false positive on case class generated method, due to flags used to distinguish case accessors. #16683
  • Fix #16682: CheckUnused missed some used symbols #16690
  • Fix "-Wunused: False positive on parameterless enum member" #16927
  • Register usage of symbols in non-inferred type trees in CheckUnused #16939
  • Traverse annotations instead of just registering in -Wunused #16956
  • Ignore parameter of accessors in -Wunused #16957
  • Ignore parameter of accessors in -Wunused #16957
  • Improve override detection in CheckUnused #16965
  • WUnused: Fix unused warning in synthetic symbols #17020
  • Fix WUnused with idents in derived code #17095
  • WUnused: Fix for symbols with synthetic names and unused transparent inlines #17061
  • Skip extension method params in WUnused #17178
  • Fix wunused false positive when deriving alias type #17157
  • Fix WUnused for accessible symbols that are renamed #17177
  • Fix WUnused false positive in for #17176
  • Make CheckUnused run both after Typer and Inlining #17206
  • Disable WUnused for params of non-private defs #17223
  • Wunused: Check if symbol exists before isValidMemberDef check #17316
  • Wunused: Include import selector bounds in unused checks #17323
  • Fix compiler crash in WUnused #17340
  • Opaque Types:
  • Delay opaque alias checking until PostTyper #16644
  • Overloading:
  • Handle context function arguments in overloading resolution #16511
  • Parser:
  • Improve support for Unicode supplementary characters in identifiers and string interpolation (as in Scala 2) #16278
  • Require indent after colon at EOL #16466
  • Help givens return refined types #16293
  • Pattern Matching:
  • Tweak AvoidMap's derivedSelect #16563
  • Space: Use RHS of & when refining subtypes #16573
  • Freeze constraints in a condition check of maximiseType #16526
  • Restrict syntax of typed patterns #16150
  • Test case to show that #16252 works with transparent #16262
  • Support inline unapplySeq and with leading given parameters #16358
  • Handle sealed prefixes in exh checking #16621
  • Detect irrefutable quoted patterns #16674
  • Patmat: Use less type variables in prefix inference #16827
  • Pickling:
  • Allow case classes with up to 254 parameters #16501
  • Correctly unpickle Scala 2 private case classes in traits #16519
  • Polyfunctions:
  • Fix #9996: Crash with function accepting polymorphic function type with singleton result #16327
  • Quotes:
  • Remove contents of inline methods #16345
  • Fix errors in explicit type annotations in inline match cases #16257
  • Handle macro annotation suspends and crashes #16509
  • Fix macro annotations spliceOwner #16513
  • Fix HK quoted pattern type variables #16907
  • REPL:
  • REPL: Fix crash when printing instances of value classes #16393
  • Attempt to fix completion crash #16267
  • Fix REPL shadowing bug #16389
  • Open up for extensibility #16276
  • Don't crash if completions throw #16687
  • Reflection:
  • Fix reflect typeMembers to return all members #15033
  • Deprecate reflect Flags.Static #16568
  • Reporting:
  • Suppress follow-on errors for erroneous import qualifiers #16658
  • Fix order in which errors are reported for assignment to val #16660
  • Fix class name in error message #16635
  • Make refined type printing more source compatible #16303
  • Add error hint on local inline def used in quotes #16572
  • Fix Text wrapping #16277
  • Fix #16680 by registering Ident not containing a symbol #16689
  • Fix the non-miniphase tree traverser #16684
  • Just warn on type ascription on a pattern #17454
  • Scala-JS:
  • Fix #14289: Accept Ident refs to js.native in native member rhs. #16185
  • Scaladoc:
  • Added jpath check to ClassLikeSupport getParentsAsTreeSymbolTuples #16759
  • Standard Library:
  • Add CanEqual instance for Map #15886
  • Refine Tuple.Append return type #16140
  • Remove experimental from Mirror#fromProductTyped #16829
  • TASTy format:
  • Make it a fatal error if erasure cannot resolve a type #16373
  • Tooling:
  • Add -Yimports compiler flag #16218
  • Allow BooleanSettings to be set with a colon #16425
  • Add support for disabling redirected output in the REPL driver for usage in worksheets in the Scala Plugin for IntelliJ IDEA #16810
  • Fix #17187: allow patches with same span #17366
  • Transform:
  • Avoid stackoverflow in ExplicitOuter #16381
  • Make lazy vals run on non-fallback graal image - remove dynamic reflection #16346
  • Patch to avoid crash in #16351 #16354
  • Don't treat package object's methods as package members #16667
  • Space: Refine isSubspace property & an example #16574
  • Fix static lazy field holder for GraalVM #16800
  • Fix race condition in new LazyVals #16975
  • Typer:
  • Drop requirement that self types are closed #16648
  • Disallow constructor params from appearing in parent types for soundness #16664
  • Don't search implicit arguments in singleton type prefix #16490
  • Don't rely on isProvisional to determine whether atoms computed #16489
  • Support signature polymorphic methods (MethodHandle and VarHandle) #16225
  • Prefer parameterless alternatives during ambiguous overload resolution #16315
  • Fix calculation to drop transparent classes #16344
  • Test case for issue 16311 #16317
  • Skip caching provisional OrType atoms #16295
  • Avoid cyclic references due to experimental check when inlining #16195
  • Track type variable dependencies to guide instantiation decisions #16042
  • Two fixes to constraint solving #16353
  • Fix regression in cyclic constraint handling #16514
  • Sharpen range approximation for applied types with capture set ranges #16261
  • Cut the Gordian Knot: Don't widen unions to transparent #15642
  • Fix widening logic to keep instantiation within bounds #16417
  • Skip ambiguous reference error when symbols are aliases #16401
  • Avoid incorrect simplifications when updating bounds in the constraint #16410
  • Take @targetName into account when resolving extension methods #16487
  • Improve ClassTag handling to avoid invalid ClassTag generation and inference failure #16492
  • Fix extracting the elemType of a union of arrays #16569
  • Make sure annotations are typed in expression contexts #16699
  • Throw a type error when using hk-types in unions or intersections #16712
  • Add missing criterion to subtype check #16889
  • Fix caching issue caused by incorrect isProvisional check #16989

New in Scala 3.3.0 RC 6 (May 25, 2023)

  • Patmat: Use less type variables in prefix inference #16827
  • Just warn on type ascription on a pattern #17454
  • Fix #17187: allow patches with same span #17366

New in Scala 3.3.0 RC 5 (May 12, 2023)

  • Remove experimental from Mirror#fromProductTyped #16829
  • Wunused: Check if symbol exists before isValidMemberDef check #17316
  • Wunused: Include import selector bounds in unused checks #17323
  • Fix compiler crash in WUnused #17340

New in Scala 3.3.0 RC 4 (Apr 27, 2023)

  • Fix HK quoted pattern type variables #16907
  • Fix caching issue caused by incorrect isProvisional check #16989
  • Fix race condition in new LazyVals #16975
  • Fix "-Wunused: False positive on parameterless enum member" #16927
  • Register usage of symbols in non-inferred type trees in CheckUnused #16939
  • Traverse annotations instead of just registering in -W #16956
  • Ignore parameter of accessors in -Wunused #16957
  • Improve override detection in CheckUnused #16965
  • WUnused: Fix unused warning in synthetic symbols #17020
  • Fix WUnused with idents in derived code #17095
  • WUnused: Fix for symbols with synthetic names and unused transparent inlines #17061
  • Skip extension method params in WUnused #17178
  • Fix wunused false positive when deriving alias type #17157
  • Fix WUnused for accessible symbols that are renamed #17177
  • Fix WUnused false positive in for #17176
  • Make CheckUnused run both after Typer and Inlining #17206
  • Disable WUnused for params of non-private defs #17223

New in Scala 3.3.0 RC 3 (Mar 24, 2023)

  • Added jpath check to ClassLikeSupport getParentsAsTreeSymbolTuples #16759
  • Split out immutable GadtConstraint #16602
  • Avoid bidirectional GADT typebounds from fullBounds #15683
  • Fix static lazy field holder for GraalVM #16800
  • Add support for disabling redirected output in the REPL driver for usage in worksheets in the Scala Plugin for IntelliJ IDEA #16810
  • Add missing criterion to subtype check #16889

New in Scala 3.3.0 RC 2 (Feb 3, 2023)

  • Highlights of the release:
  • Stabilize new lazy vals #16614
  • Experimental Macro annotations #16392 #16454 #16534
  • Fix stability check for inline parameters #15511
  • Make fewerBraces a standard feature #16297
  • Add new front-end phase for unused entities and add support for unused imports #16157
  • Implement -Wvalue-discard warning #15975
  • Introduce boundary/break control abstraction. #16612
  • Other changes and fixes:
  • Annotations:
  • Support use-site meta-annotations #16445
  • Desugaring:
  • Reuse typed prefix for applyDynamic and applyDynamicNamed #16552
  • Fix object selftype match error #16441
  • Erasure:
  • Dealias before checking for outer references in types #16525
  • Fix generic signature for type params bounded by primitive #16442
  • Avoid EmptyScope.cloneScope crashing, eg on missing references #16314
  • GADTs:
  • Inline GADT state restoring in TypeComparer #16564
  • Add extension/conversion to GADT selection healing #16638
  • Incremental compilation:
  • Unpickle arguments of parent constructors in Templates lazily #16688
  • Initialization:
  • Fix #16438: Supply dummy args for erroneous parent call in init check #16448
  • Inline:
  • Dealias in ConstantValue, for inline if cond #16652
  • Set Span for top level annotations generated in PostTyper #16378
  • Interpolate any type vars from comparing against SelectionProto #16348
  • Handle binding of beta reduced inlined lambdas #16377
  • Do not add dummy RHS to abstract inline methods #16510
  • Warn on inline given aliases with functions as RHS #16499
  • Support inline overrides in value classes #16523
  • Java interop:
  • Represent Java annotations as interfaces so they can be extended, and disallow various misuses of them #16260
  • Opaque Types:
  • Delay opaque alias checking until PostTyper #16644
  • Overloading:
  • Handle context function arguments in overloading resolution #16511
  • Parser:
  • Improve support for Unicode supplementary characters in identifiers and string interpolation (as in Scala 2) #16278
  • Require indent after colon at EOL #16466
  • Help givens return refined types #16293
  • Pattern Matching:
  • Tweak AvoidMap's derivedSelect #16563
  • Space: Use RHS of & when refining subtypes #16573
  • Freeze constraints in a condition check of maximiseType #16526
  • Restrict syntax of typed patterns #16150
  • Test case to show that #16252 works with transparent #16262
  • Support inline unapplySeq and with leading given parameters #16358
  • Handle sealed prefixes in exh checking #16621
  • Detect irrefutable quoted patterns #16674
  • Pickling:
  • Allow case classes with up to 254 parameters #16501
  • Correctly unpickle Scala 2 private case classes in traits #16519
  • Polyfunctions:
  • Fix #9996: Crash with function accepting polymorphic function type with singleton result #16327
  • Quotes:
  • Remove contents of inline methods #16345
  • Fix errors in explicit type annotations in inline match cases #16257
  • Handle macro annotation suspends and crashes #16509
  • Fix macro annotations spliceOwner #16513
  • REPL:
  • REPL: Fix crash when printing instances of value classes #16393
  • Attempt to fix completion crash #16267
  • Fix REPL shadowing bug #16389
  • Open up for extensibility #16276
  • Don't crash if completions throw #16687
  • Reflection:
  • Fix reflect typeMembers to return all members #15033
  • Deprecate reflect Flags.Static #16568
  • Reporting:
  • Suppress follow-on errors for erroneous import qualifiers #16658
  • Fix order in which errors are reported for assignment to val #16660
  • Fix class name in error message #16635
  • Make refined type printing more source compatible #16303
  • Add error hint on local inline def used in quotes #16572
  • Fix Text wrapping #16277
  • Fix -Wunused:import registering constructor instead of its owner (also fix false positive for enum) #16661
  • Fix #16675 : -Wunused false positive on case class generated method, due to flags used to distinguish case accessors. #16683
  • Fix #16680 by registering Ident not containing a symbol #16689
  • Fix #16682: CheckUnused missed some used symbols #16690
  • Fix the non-miniphase tree traverser #16684
  • Scala-JS:
  • Fix #14289: Accept Ident refs to js.native in native member rhs. #16185
  • Standard Library:
  • Add CanEqual instance for Map #15886
  • Refine Tuple.Append return type #16140
  • TASTy format:
  • Make it a fatal error if erasure cannot resolve a type #16373
  • Tooling:
  • Add -Yimports compiler flag #16218
  • Allow BooleanSettings to be set with a colon #16425
  • Transform:
  • Avoid stackoverflow in ExplicitOuter #16381
  • Make lazy vals run on non-fallback graal image - remove dynamic reflection #16346
  • Patch to avoid crash in #16351 #16354
  • Don't treat package object's methods as package members #16667
  • Space: Refine isSubspace property & an example #16574
  • Typer:
  • Drop requirement that self types are closed #16648
  • Disallow constructor params from appearing in parent types for soundness #16664
  • Don't search implicit arguments in singleton type prefix #16490
  • Don't rely on isProvisional to determine whether atoms computed #16489
  • Support signature polymorphic methods (MethodHandle and VarHandle) #16225
  • Prefer parameterless alternatives during ambiguous overload resolution #16315
  • Fix calculation to drop transparent classes #16344
  • Test case for issue 16311 #16317
  • Skip caching provisional OrType atoms #16295
  • Avoid cyclic references due to experimental check when inlining #16195
  • Track type variable dependencies to guide instantiation decisions #16042
  • Two fixes to constraint solving #16353
  • Fix regression in cyclic constraint handling #16514
  • Sharpen range approximation for applied types with capture set ranges #16261
  • Cut the Gordian Knot: Don't widen unions to transparent #15642
  • Fix widening logic to keep instantiation within bounds #16417
  • Skip ambiguous reference error when symbols are aliases #16401
  • Avoid incorrect simplifications when updating bounds in the constraint #16410
  • Take @targetName into account when resolving extension methods #16487
  • Improve ClassTag handling to avoid invalid ClassTag generation and inference failure #16492
  • Fix extracting the elemType of a union of arrays #16569
  • Make sure annotations are typed in expression contexts #16699
  • Throw a type error when using hk-types in unions or intersections #16712

New in Scala 3.2.2 (Feb 3, 2023)

  • Highlights of the release:
  • Make truncation by characters in REPL configurable #16167
  • New (experimental for now) lazy vals implementation #15296
  • Other changes and fixes:
  • Coverage:
  • Make coverage instrumentation more robust #16235
  • Default parameters:
  • Resolve overloading: keep track of prefix and indices of all default getters #16009
  • Experimentals:
  • Let accessors inherit @experimental annotations from accessed symbols #16099
  • Extension Methods:
  • Fix i14451 #16010
  • GADTs:
  • Add fixed GADT exhaustivity test cases #16169
  • Eliminate class hierarchy in GadtConstraint #16194
  • Initialization:
  • Code refactoring of initialization checker #16066
  • Inline:
  • Refine checking for outer references #16122
  • Java interoperability:
  • Parse native in Java bytecode as @native #16232
  • Opaque Types:
  • Disallow opaque type aliases of context functions #16041
  • Overloading:
  • Fix curried overloading resolution for polymorphic methods #16485
  • Parser:
  • Align implementation with spec of soft modifiers #15961
  • Pattern Matching:
  • Fix redundancy (unreachability) warning #16179
  • Teach SpaceEngine that generic tuples are irrefutable #16051
  • Fix exhaustivity warning #16168
  • Polyfunctions:
  • Avoid checking purity of Apply without symbols #16221
  • Reporting:
  • Expose reason for unchecked warning #16086
  • Refine AsSeenFrom approximation scheme #15957
  • Better output under -Ydetailed-stats #15950
  • Fix crash in -Vprofile code #16007
  • Name stripped of module suffix must not be empty #15597
  • Fix InlineMatch pos for summonFrom #16025
  • Rewrites:
  • Rewrites are UTF-8 #15622
  • Scala-JS:
  • Fix the detection of inferred types of = js.native. #16184
  • Do not elide fields required for Scala.js interop semantics. #16187
  • Scaladoc:
  • Update quick links for new UI #15912
  • Avoid parsing code comment twice #16154
  • Make footer text configurable #16064
  • Add typography fallback fonts #16063
  • SemanticDB:
  • Emit SymbolInformation and Occurrence for anonymous class #15865
  • Fix regression in type apply synthetics #16031
  • Transform:
  • Fix creating forwarders for simple alias givens #16193
  • Only check for Scala2LocalSuffix in methods on Scala 2.x classes #16014
  • Fix mapping TypeMaps over annotations #15948
  • Peephole optimization to drop .apply from partially applied methods #16022
  • Typer:
  • Fix approximateOr of (A & Double) | Null #16241
  • Create boxed environments only for references and function values #16136
  • Fix higher-order unification incorrectly substituting tparams #16181
  • Handle copies of constrained type lambdas when determining an implicit scope #16159
  • Create message for missing arguments #16158
  • Make singleton types subtypes of their refined type #16135
  • Disallow overriding val parameters #16096
  • Avoid crash where creator proxies are referenced indirectly #16098
  • Refine estimation of default arguments in overloading resolution #15962
  • Harden canAssign #15963
  • Fix isSubType for static objects filling in type projections #15959
  • Fix expected type of TupleXXL unapply #16248
  • Drop lazy recursive application in approximateParent #16073
  • Type match with a match type when a match type is expected #15599
  • Compute completions at typerPhase #16371
  • Only include accessible base classes in orDominator #16477

New in Scala 3.2.2 RC 2 (Dec 23, 2022)

  • Backported fixes:
  • Compute completions at typerPhase #16371
  • Only include accessible base classes in orDominator #16477
  • Fix curried overloading resolution for polymorphic methods #16485
  • Teach SpaceEngine that generic tuples are irrefutable #16051
  • Fix exhaustivity warning #16168

New in Scala 3.2.2 RC 1 (Nov 8, 2022)

  • Highlights of the release:
  • Make truncation by characters in repl configurable #16167
  • New (experimental for now) lazy vals implementation #15296
  • Other changes and fixes:
  • Coverage:
  • Make coverage instrumentation more robust #16235
  • Default parameters:
  • Resolve overloading: keep track of prefix and indices of all default getters #16009
  • Experimentals:
  • Let accesors inherit @experimental annotations from accessed symbols #16099
  • Extension Methods:
  • Fix i14451 #16010
  • GADTs:
  • Add fixed GADT exhaustivity test cases #16169
  • Eliminate class hierarchy in GadtConstraint #16194
  • Initialization:
  • Code refactoring of initialization checker #16066
  • Inline:
  • Refine checking for outer references #16122
  • Java interoperability:
  • Parse native in Java bytecode as @Native #16232
  • Opaque Types:
  • Disallow opaque type aliases of context functions #16041
  • Parser:
  • Align implementation with spec of soft modifiers #15961
  • Pattern Matching:
  • Fix redundancy (unreachability) warning #16179
  • Polyfunctions:
  • Avoid checking purity of Apply without symbols #16221
  • Reporting:
  • Expose reason for unchecked warning #16086
  • Refine AsSeenFrom approximation scheme #15957
  • Better output under -Ydetailed-stats #15950
  • Fix crash in -Vprofile code #16007
  • Name stripped of module suffix must not be empty #15597
  • Fix InlineMatch pos for summonFrom #16025
  • Rewrites:
  • Rewrites are UTF-8 #15622
  • Scala-JS:
  • Fix the detection of inferred types of = js.native. #16184
  • Do not elide fields required for Scala.js interop semantics. #16187
  • Scaladoc:
  • Update quick links for new ui #15912
  • Avoid parsing code comment twice #16154
  • Make footer text configurable #16064
  • Add typography fallback fonts #16063
  • SemanticDB:
  • Emit SymbolInformation and Occurrence for anonymous class #15865
  • Fix regression in type apply synthetics #16031
  • Transform:
  • Fix creating forwarders for simple alias givens #16193
  • Only check for Scala2LocalSuffix in methods on Scala2x classes #16014
  • Fix mapping TypeMaps over annotations #15948
  • Peephole optimization to drop .apply from partially applied methods #16022
  • Typer:
  • Fix approximateOr of (A & Double) | Null #16241
  • Create boxed environments only for references and function values #16136
  • Fix higher-order unification incorrectly substituting tparams #16181
  • Handle copies of constrained type lambdas when determining an implicit scope #16159
  • Create message for missing arguments #16158
  • Make singleton types subtypes of their refined type #16135
  • Disallow overriding val parameters #16096
  • Avoid crash where creator proxies are referenced indirectly #16098
  • Refine estimation of default arguments in overloading resolution #15962
  • Harden canAssign #15963
  • Fix isSubType for static objects filling in type projections #15959
  • Fix expected type of TupleXXL unapply #16248
  • Drop lazy recursive application in approximateParent #16073
  • Type match with a match type when a match type is expected #15599

New in Scala 3.2.1 (Nov 8, 2022)

  • Highlights of the release:
  • Add experimental capture checking #15877
  • Scaladoc: New UI design #15697
  • Other changes and fixes:
  • Backend:
  • Set ACC_FINAL access flag to final variable accessors #15707
  • Coverage:
  • Avoid instrumentation of inline and erased definitions #15504
  • Erasure:
  • Fix #15199: Exclude JavaDefined Modules from bridge generation. #15499
  • Extension Methods:
  • Merge nested polytypes in more cases in resolveOverloaded #15636
  • GADTs:
  • Fix GADT casting when typing if expressions #15646
  • Use GADT constraints in maximiseType #15544
  • Add the expected type to Poly's desugaring #15570
  • Allow refineUsingParent to infer GADT bounds #15706
  • Avoid leaking internal types in GadtConstraint.approximation #15558
  • Improve GADT usage tracing for MatchType reduction #15872
  • Add gadtAddBound to ExplainingTypeComparer tracing #15819
  • Avoid adding NoSymbol to gadt constraints in TypeOps.instantiateToSubType #15965
  • IDE Support:
  • Recover from TypeErrors in isErroneous #15442
  • Add a guard against empty ident #15542
  • Initialization:
  • Fix #15465: Use resolveThis for outerSelect resolution #15606
  • Fix #15459: Display uninitialized fields in promotion error #15488
  • Fix #15363: Improve error messages for leaking of this #15364
  • Make sure inner classes are checked first #15527
  • Handle super accessors in initialization checker #15703
  • Inline:
  • Check is inline unapply has leading implicits #15583
  • Fix #15374: Make sure prefix of outer select has the correct class symbol #15592
  • Java Interoperability:
  • Don't check import selectors for Java code #15617
  • JS Interoperability:
  • Fix #15701: Implement js.dynamicImport for dynamic module loading. #15720
  • Implement support for js.new.target. #15734
  • Fix #14488: Scala.js: Add compiler support for scala.Enumeration. #15770
  • Match Types:
  • Avoid null types when reducing match types #15748
  • Avoid references to unbound parameters in applied type patterns #15710
  • Nullability:
  • Fix checking ctx to carry correct modes #15350
  • Pattern Matching:
  • Teach provablyDisjoint to handle FromJavaObject #15769
  • Don't trust case class extractors with explicit type arguments #15669
  • Space: Fix how sealed abstract classes decompose #15553
  • Local classes are uncheckable (type tests) #15134
  • Fix ValDef span assignment in PatternMatcher #15783
  • Reject all explicitly written type references with bad bounds #15577
  • Pickling:
  • Make simplify replace type parameters inside method types #15430
  • Quotes:
  • Ignore types in macro runtime dependencies #15529
  • REPL:
  • ReplDriver.run and :load take complete input #15811
  • REPL goes through a phase #15663
  • Avoid assertion failure for illegal trait inheritance #15631
  • Reporting:
  • Underline assignment correctly in error message #15584
  • Better error message for "implicit search must be more specific" #15747
  • Provide better info on compiler crashes #15890
  • SemanticDB:
  • Handle colons in file names when producing SemanticDB #15863
  • Standard Library:
  • Fix throwReturn of NonLocalReturns to allow wider usage #15495
  • Update Scala 2 library dependency to 2.13.10 #16074
  • Tooling:
  • Fix scala runner exit codes #15604
  • Command line parser respects outer escaped quote #15497
  • Added quotes to Scala home paths in scala and scalac scripts #15824
  • Retain partial type params typying information on error #15825
  • Transform:
  • Implementation restriction: No partial functions with CFT results #15744
  • Fix treatment of parameter selections via this in constructors. #15737
  • Fix expansion and unexpansion of mixin qualified names #15712
  • Fix #15514 in Parser #15524
  • Check type arguments for bad bounds #15571
  • Typer:
  • Fix swapKey #15894
  • Insert GADT casts for needy match types #15851
  • Add missing dealias in isContextFunctionRef #15742
  • Look for synthetic applies also under type applications #15572
  • Optimize isSameType for invariant applied types with the same structure #15556
  • Fix cycle detection for type aliases with wildcard arguments #15508
  • Handle recursions in isFullyDefined #15443
  • Do level checking on instantiation #15746
  • Use fullyDefinedType for mirror synthesis #15814
  • Instantiate more type variables to hard unions #15632
  • Simplify level fixing scheme #15936
  • Don't normalize in AppliedType#superType #15453
  • Try promotion while widening arguments #15467
  • Check import selectors at Typer #15477
  • Turn some calls to underlying into superType. #15455
  • Find more looping implicits #15481
  • Fix findFunctionType for OrTypes #15478
  • Fix looping implicits check #15655
  • Try to avoid static symbols if leaving them would make a leak #15548
  • Do not fold IsConst applied to dependent parameters #15759
  • Only look for synthetic applies under TypeApply with inferred arguments #15970
  • Improvements for implicit searches with top-level type variables #16001
  • Better types for class type parameters #15951
  • Fix tuple casting #16113
  • Be even more careful when combining argument and info in computeAsSeenFrom #16070
  • Be still more careful when computing denotations of class parameters #16112

New in Scala 3.2.1 RC 4 (Oct 19, 2022)

  • Backported fixes:
  • Update Scala 2 library dependency to 2.13.10 #16074

New in Scala 3.2.1 RC 3 (Oct 19, 2022)

  • Backported fixes:
  • Fix tuple casting #16113
  • Be even more careful when combining argument and info in computeAsSeenFrom #16070
  • Be still more careful when computing denotations of class parameters #16112

New in Scala 3.2.1 RC 2 (Sep 16, 2022)

  • Backported fixes:
  • Only look for synthetic applies under TypeApply with inferred arguments #15970
  • Improvements for implicit searches with top-level type variables #16001
  • Better types for class type parameters #15951
  • Avoid adding NoSymbol to gadt constraints in TypeOps.instantiateToSubType #15965

New in Scala 3.2.1 RC 1 (Sep 16, 2022)

  • Highlights of the release:
  • Add experimental capture checking #15877
  • Scaladoc: New UI design #15697
  • Other changes and fixes:
  • Backend:
  • Set ACC_FINAL access flag to final variable accessors #15707
  • Coverage:
  • Avoid instrumentation of inline and erased definitions #15504
  • Erasure:
  • Fix #15199: Exclude JavaDefined Modules from bridge generation. #15499
  • Extension Methods:
  • Merge nested polytypes in more cases in resolveOverloaded #15636
  • GADTs:
  • Fix GADT casting when typing if expressions #15646
  • Use GADT constraints in maximiseType #15544
  • Add the expected type to Poly's desugaring #15570
  • Allow refineUsingParent to infer GADT bounds #15706
  • Avoid leaking internal types in GadtConstraint.approximation #15558
  • Improve GADT usage tracing for MatchType reduction #15872
  • Add gadtAddBound to ExplainingTypeComparer tracing #15819
  • IDE Support:
  • Recover from TypeErrors in isErroneous #15442
  • Add a guard against empty ident #15542
  • Initialization:
  • Fix #15465: Use resolveThis for outerSelect resolution #15606
  • Fix #15459: Display uninitialized fields in promotion error #15488
  • Fix #15363: Improve error messages for leaking of this #15364
  • Make sure inner classes are checked first #15527
  • Handle super accessors in initialization checker #15703
  • Inline:
  • Check is inline unapply has leading implicits #15583
  • Fix #15374: Make sure prefix of outer select has the correct class symbol #15592
  • Java Interoperability:
  • Don't check import selectors for Java code #15617
  • JS Interoperability:
  • Fix #15701: Implement js.dynamicImport for dynamic module loading. #15720
  • Implement support for js.new.target. #15734
  • Fix #14488: Scala.js: Add compiler support for scala.Enumeration. #15770
  • Match Types:
  • Avoid null types when reducing match types #15748
  • Avoid references to unbound parameters in applied type patterns #15710
  • Nullability:
  • Fix checking ctx to carry correct modes #15350
  • Pattern Matching:
  • Teach provablyDisjoint to handle FromJavaObject #15769
  • Don't trust case class extractors with explicit type arguments #15669
  • Space: Fix how sealed abstract classes decompose #15553
  • Local classes are uncheckable (type tests) #15134
  • Fix ValDef span assignment in PatternMatcher #15783
  • Reject all explicitly written type references with bad bounds #15577
  • Pickling:
  • Make simplify replace type parameters inside method types #15430
  • Quotes:
  • Ignore types in macro runtime dependencies #15529
  • REPL:
  • ReplDriver.run and :load take complete input #15811
  • REPL goes through a phase #15663
  • Avoid assertion failure for illegal trait inheritance #15631
  • Reporting:
  • Underline assignment correctly in error message #15584
  • Better error message for "implicit search must be more specific" #15747
  • Provide better info on compiler crashes #15890
  • SemanticDB:
  • Handle colons in file names when producing SemanticDB #15863
  • Standard Library:
  • Fix throwReturn of NonLocalReturns to allow wider usage #15495
  • Tooling:
  • Fix scala runner exit codes #15604
  • Command line parser respects outer escaped quote #15497
  • Added quotes to Scala home paths in scala and scalac scripts #15824
  • Retain partial type params typying information on error #15825
  • Transform:
  • Implementation restriction: No partial functions with CFT results #15744
  • Fix treatment of parameter selections via this in constructors. #15737
  • Fix expansion and unexpansion of mixin qualified names #15712
  • Fix #15514 in Parser #15524
  • Check type arguments for bad bounds #15571
  • Typer:
  • Fix swapKey #15894
  • Insert GADT casts for needy match types #15851
  • Add missing dealias in isContextFunctionRef #15742
  • Look for synthetic applies also under type applications #15572
  • Optimize isSameType for invariant applied types with the same structure #15556
  • Fix cycle detection for type aliases with wildcard arguments #15508
  • Handle recursions in isFullyDefined #15443
  • Do level checking on instantiation #15746
  • Use fullyDefinedType for mirror synthesis #15814
  • Instantiate more type variables to hard unions #15632
  • Simplify level fixing scheme #15936
  • Don't normalize in AppliedType#superType #15453
  • Try promotion while widening arguments #15467
  • Check import selectors at Typer #15477
  • Turn some calls to underlying into superType. #15455
  • Find more looping implicits #15481
  • Fix findFunctionType for OrTypes #15478
  • Fix looping implicits check #15655
  • Try to avoid static symbols if leaving them would make a leak #15548
  • Do not fold IsConst applied to dependent parameters #15759

New in Scala 3.2.0 (Sep 2, 2022)

  • Highlights of the release:
  • Add runtime.TupleMirror to avoid anonymous classes for mirrors of tuples #15404
  • Fix TupleXXL.productPrefix #15411
  • Synthesize mirrors for small generic tuples #15250
  • Fix #14150: Constrain refinements to type parameters #15014
  • Gradual warning for deprecated nonlocal return #15303
  • Restrict mirrors of any union type #15279
  • Stabilize 3.2 APIs #15197
  • Add error reporting for mirror synthesis #15164
  • Fix #14432: Check if scala 2 case class is accessible #15008
  • Fix #12919: Summon anonymous mirror when companion is a case object #14986
  • Erase Int | Nothing signatures types into Int #14971
  • Allow exports in extension clauses #14497
  • Fix Scala Wart about implicit () class parameters #14840
  • Re-architecture quote pickling #12540
  • Add scala.annotation.MainAnnotation #14558
  • Add in initial support for code coverage #13880
  • Support tuple specialisation #15060
  • Remove support for -scala-output-version flag #15146
  • Make lazy vals and object native image friendly #14780
  • Allow return in tailrec position #14067
  • Other changes and fixes:
  • Backend:
  • Keep annotation order #15063
  • Update asm to 9.3 #14926
  • Fix #14773: Reuse the param slots for the tailrec local mutable vars. #14865
  • Better error messages in case of TooLarge* exceptions in GenBCode #14943
  • Coverage:
  • Fix relativizing paths in coverage serializer #15240
  • Fix lifting of arguments with -coverage-out #15530
  • Avoid instrumentation of inline and erased definitions #15504
  • Keep fun and args together when instrumenting TypeApply for coverage #15739
  • Erasure:
  • Handle & and | types when computing tuple arity #15330
  • Fix two problems related to match types as array elements #15625
  • Experimentals:
  • Fix check experimental inline references #15147
  • Exports:
  • Refine criterion when to skip identifiers in pattern constructors #15367
  • Simplify and harden duplicates checking in exports #14879
  • Fix isAbsType prediction in TreeUnpickler #14861
  • F-bounds:
  • Recursion brake for joins in TypeComparer #14880
  • GADTs:
  • Heal pattern-bound type by gathering constraints #15095
  • Consider GADT upper bounds when upcasting the scrutinee type #15351
  • Extract wildcard GADT constraints more directly #14832
  • Fix constraining against HKTypeLambda arguments #15688
  • IDE Support:
  • Docs: Add a comment to pathTo mentioning that it might return errorTermTree #15420
  • Fix completions to properly contain public fields if they were shadowed #15236
  • Add proper signatureHelp for unapply methods #15203
  • Fix signatureHelp to show enclosing apply instead of closest one. #15119
  • Fix implicit conversion type resolve in completions #15061
  • Fix type alias completion, unify completion tests style #15047
  • Support code completion for refined types #15283
  • Fix SourceFile.column method. #15209
  • Initialization:
  • Check method arguments with parametricity when static #14916
  • Add safe-init test to prevent adding cold elements to hot arrays #14895
  • Allow non-hot values in SeqLiterals #14794
  • Inline:
  • Make private inline accessors final #15324
  • Fix inlining when outer select is needed from inline call prefix #15327
  • Support inline methods calling private inline methods on this #15075
  • Types with only an abstract inline method are not SAMs #14874
  • Don't issue unreachable error messages for inlined code #14871
  • Dealias arg type to detect opaque types #15074
  • Fix dependency status calculation for refined type aliases in method result types #15390
  • Fix computation of class nesting level in inliner #15671
  • Always expand inline accessor names #15619
  • Java Compatibility:
  • Java generic signatures can't refer to type members #15093
  • Simplify and correctify calculation of the InnerClass attribute #15153
  • Fix #13523: Survive missing Java inner annotation classfiles #15094
  • Match Types:
  • Implement provablyDisjoint for refined types and type aliases #15375
  • Cache skolem types #14909
  • Refine Matchtype checking #15423
  • Nullability:
  • Speed up .nn #15418
  • Fix handling imports in TreeUnpickler #15137
  • Honor language imports when unpickling #14962
  • Remove special eq/ne in unsafeNulls #15186
  • Add eq/ne extension for AnyRef|Null to Scala3RunTime #14632
  • Parser:
  • Fix parser error for type arguments with trailing comma #15395
  • Change fewerbraces to always use a colon, even before lambdas #15273
  • Deprecate 3.1-migration, err on import #14978
  • Treat all incomplete ifs as statements #14960
  • Clarify and test rules for newline suppression #14877
  • Tweak assertion in withMods #14857
  • Fix loop in parser #15421
  • Parse unary operators as regular identifiers when backquoted #15198
  • Harden erasure of TermRefs #15658
  • Pattern Matching:
  • Preserve modifiers when desugaring for-comps #15403
  • Extract unapply types like typedUnApply #15254
  • Force Java enum children to be queried #15109
  • Enable stricter pattern binding warnings by default #14294
  • Irrefutable for generators don't require withFilter under -source:future #15593
  • Refutable extractor may be an Apply tree #15651
  • Pickling:
  • Survive unpickling crashes when completing from Tasty #14884
  • Quotes:
  • Transform RHS of captured assignment reference #15247
  • Properly look for inline methods #15072
  • Fix hash code of ExprImpl and TypeImpl #15281
  • Compute correct argument type in ExprMap #15269
  • Detect quoted pattern variables in alternatives #15073
  • Disallow old uses of quoted and spliced types #15012
  • Fix capturing conditions of HOAS quote patterns #14822
  • Reflection:
  • Add missing cases in SourceCode printer #15032
  • Add reflect AppliedType constructor #14923
  • Add regression test #14924
  • Reporting:
  • Case class must have at least one leading non-implicit parameter list #15382
  • Improve opaque type with no RHS error message #15285
  • Refine condition when to report errors in an inserted apply #15016
  • Accept soft modifiers separated by blank lines #14959
  • Fix warning with leaking this into Scala2 synthetic apply #15307
  • Refine error messages for early promotion #15263
  • Standardize -rewrite advertisements and suppress them in REPL #14955
  • Improve diagnostic for refutable extractors in pattern bindings #14988
  • Fix: correction to ClassTooLargeException message #14974
  • Scaladoc:
  • Fix rendering ThisType #15440
  • Add extension suffixes and fqName to scaladoc searchbar #15048
  • Fix implicit members resolution #15021
  • Fix windows paths handling in legacy external link provider #15023
  • Warn about special characters in filenames according to the default Jekyll rules #14657
  • Scaladoc annotations rework #15361
  • Fix expanding docstrings in Scaladoc #15045
  • Scripting:
  • Fix #13760: Running script compiled jar no longer restricted to java.base module #15103
  • SemanticDB:
  • Do not register SymbolOccurrence for non-symbol endmarker #15143
  • Standard Library:
  • Implement new main annotation #14841
  • Add compiletime.ops.string.CharAt #14431
  • Make EmptyTuple a case object #14972
  • Deprecate ToString type which should be deprecated at 3.2.0 #15645
  • Tasty Inspector:
  • Handle this prefix in classes (in quote patterns) #14800
  • Fix parameter untupling #14816
  • Tooling:
  • Add -Vprofile option #15406
  • Fix rewrite for type-ascribed refutable pattern binding #15314
  • Fix rewrites for refutable pattern bindings #14954
  • Transform:
  • Also hoist lifted arguments in super calls #14919
  • Add deprecated overriding checks #15432
  • Don't cast to a value class as self type #14885
  • Disallow @targetName on top-level class, trait, and object #15068
  • Handle case where abstract overrides miss an implementation #14893
  • Treat RecTypes as potentially uncheckable #14894
  • Allow multiple wildcard vals #14906
  • Handle non-specialized functions in EtaReduce #15498
  • Typeclass Derivation:
  • Support intersection types in mirrorCompanionRef #15192
  • Fix #15222: Recursively check for product ctor accessibility #15231
  • Fix 14025: Restrict curried type lambdas in mirror generation #15006
  • Make anonymous mirrors serializable #15391
  • Support Mirror synthesis for local and inner classes #15847
  • Typer:
  • Fix #15405: Dealias Or type constituents when finding its dominator #15416
  • Handle unconstrained TypeVars when synthesizing ClassTags #15376
  • Allow for unqualified apply as context functions #15417
  • Prevent crash when reporting an error #15320
  • Show a match type trace for "not a class type" errors #15218
  • Don't constrain type variables in normalize #15223
  • Eta expand CFTs in super accessors if needed #15092
  • Reject structural applications of polymorphic methods #15090
  • Hande clashes between same-named exports #14967
  • Fix outer reference detection in class parents #14961
  • Avoid redundant type test for irrefutable @unchecked patterns #14898
  • Detect clashes involving renamed exports #14831
  • Guard against stackoverflows when instantiating HK-Lambdas #14851
  • Don't try conversions or extensions on Java companion objects #14881
  • Revert #14452 and make compile-time operations on stable arguments stable #15268
  • Better handling of type parameters in constructor pattern #15356
  • Handle AvoidMap recursions #15393
  • Add missing condition in checking synthetic apply #15362
  • Harden type assignment of lambda trees #14887
  • Disallow package names as types #14888
  • Fix constToLiteral #14853
  • Survive TypeErrors in isMatchedBy #15675
  • Don't ignore expected types of New #15679
  • Better infos for dependent class parameter references #15667

New in Scala 3.2.0 RC 4 (Aug 22, 2022)

  • Backported fixes:
  • Refutable extractor may be an Apply tree #15651
  • Bump compiler-interface and capture the diagnosticCode #15565
  • Support Mirror synthesis for local and inner classes #15847

New in Scala 3.2.0 RC 3 (Aug 22, 2022)

  • Backported fixes:
  • Refutable extractor may be an Apply tree #15672
  • Fix coverage instrumentation of Java-defined and parameterless methods #15648
  • Keep fun and args together when instrumenting TypeApply for coverage #15739
  • Fix two problems related to match types as array elements #15625
  • Survive TypeErrors in isMatchedBy #15675
  • deprecate ToString type which should be deprecated at 3.2.0 #15645
  • Fix constraining against HKTypeLambda arguments #15688
  • Fix computation of class nesting level in inliner #15671
  • Don't ignore expected types of New #15679
  • Better infos for dependent class parameter references #15667
  • Always expand inline accessor names #15619
  • Harden erasure of TermRefs #15658

New in Scala 3.2.0 RC 2 (Jul 27, 2022)

  • Backported fixes:
  • Handle non-specialized functions in EtaReduce #15498
  • Refine Matchtype checking #15423
  • Fix lifting of arguments with -coverage-out #15530
  • Avoid instrumentation of inline and erased definitions #15504
  • Irrefutable for generators don't require withFilter under -source:future #15593

New in Scala 3.2.0 RC 1 (Jul 7, 2022)

  • Highlights of the release:
  • Add runtime.TupleMirror to avoid anonymous classes for mirrors of tuples #15404
  • Fix TupleXXL.productPrefix #15411
  • Synthesize mirrors for small generic tuples #15250
  • Fix #14150: Constrain refinements to type parameters #15014
  • Gradual warning for deprecated nonlocal return #15303
  • Restrict mirrors of any union type #15279
  • Stabilize 3.2 APIs #15197
  • Add error reporting for mirror synthesis #15164
  • Fix #14432: Check if scala 2 case class is accessible #15008
  • Fix #12919: Summon anonymous mirror when companion is a case object #14986
  • Erase Int | Nothing signatures types into Int #14971
  • Allow exports in extension clauses #14497
  • Fix Scala Wart about implicit () class parameters #14840
  • Re-architecture quote pickling #12540
  • Add scala.annotation.MainAnnotation #14558
  • Add in initial support for code coverage #13880
  • Support tuple specialisation #15060
  • Remove support for -scala-output-version flag #15146
  • Make lazy vals and object native image friendly #14780
  • Allow return in tailrec position #14067
  • Other changes and fixes:
  • Backend:
  • Keep annotation order #15063
  • Update asm to 9.3 #14926
  • Fix #14773: Reuse the param slots for the tailrec local mutable vars. #14865
  • Better error messages in case of TooLarge* exceptions in GenBCode #14943
  • Coverage:
  • Fix relativizing paths in coverage serializer #15240
  • Erasure:
  • Handle & and | types when computing tuple arity #15330
  • Experimentals:
  • Fix check experimental inline references #15147
  • Exports:
  • Refine criterion when to skip identifiers in pattern constructors #15367
  • Simplify and harden duplicates checking in exports #14879
  • Fix isAbsType prediction in TreeUnpickler #14861
  • F-bounds:
  • Recursion brake for joins in TypeComparer #14880
  • GADTs:
  • Heal pattern-bound type by gathering constraints #15095
  • Consider GADT upper bounds when upcasting the scrutinee type #15351
  • Extract wildcard GADT constraints more directly #14832
  • IDE Support:
  • Docs: Add a comment to pathTo mentioning that it might return errorTermTree #15420
  • Fix completions to properly contain public fields if they were shadowed #15236
  • Add proper signatureHelp for unapply methods #15203
  • Fix signatureHelp to show enclosing apply instead of closest one. #15119
  • Fix implicit conversion type resolve in completions #15061
  • Fix type alias completion, unify completion tests style #15047
  • Support code completion for refined types #15283
  • Fix SourceFile.column method. #15209
  • Initialization:
  • Check method arguments with parametricity when static #14916
  • Add safe-init test to prevent adding cold elements to hot arrays #14895
  • Allow non-hot values in SeqLiterals #14794
  • Inline:
  • Make private inline accessors final #15324
  • Fix inlining when outer select is needed from inline call prefix #15327
  • Support inline methods calling private inline methods on this #15075
  • Types with only an abstract inline method are not SAMs #14874
  • Don't issue unreachable error messages for inlined code #14871
  • Dealias arg type to detect opaque types #15074
  • Fix dependency status calculation for refined type aliases in method result types #15390
  • Java Compatibility:
  • Java generic signatures can't refer to type members #15093
  • Simplify and correctify calculation of the InnerClass attribute #15153
  • Fix #13523: Survive missing Java inner annotation classfiles #15094
  • Match Types:
  • Implement provablyDisjoint for refined types and type aliases #15375
  • Cache skolem types #14909
  • Nullability:
  • Speed up .nn #15418
  • Fix handling imports in TreeUnpickler #15137
  • Honor language imports when unpickling #14962
  • Remove special eq/ne in unsafeNulls #15186
  • Add eq/ne extension for AnyRef|Null to Scala3RunTime #14632
  • Parser:
  • Fix parser error for type arguments with trailing comma #15395
  • Change fewerbraces to always use a colon, even before lambdas #15273
  • Deprecate 3.1-migration, err on import #14978
  • Treat all incomplete ifs as statements #14960
  • Clarify and test rules for newline suppression #14877
  • Tweak assertion in withMods #14857
  • Fix loop in parser #15421
  • Parse unary operators as regular identifiers when backquoted #15198
  • Pattern Matching:
  • Preserve modifiers when desugaring for-comps #15403
  • Extract unapply types like typedUnApply #15254
  • Force Java enum children to be queried #15109
  • Enable stricter pattern binding warnings by default #14294
  • Pickling:
  • Survive unpickling crashes when completing from Tasty #14884
  • Quotes:
  • Transform RHS of captured assignment reference #15247
  • Properly look for inline methods #15072
  • Fix hash code of ExprImpl and TypeImpl #15281
  • Compute correct argument type in ExprMap #15269
  • Detect quoted pattern variables in alternatives #15073
  • Disallow old uses of quoted and spliced types #15012
  • Fix capturing conditions of HOAS quote patterns #14822
  • Reflection:
  • Add missing cases in SourceCode printer #15032
  • Add reflect AppliedType constructor #14923
  • Add regression test #14924
  • Reporting:
  • Case class must have at least one leading non-implicit parameter list #15382
  • Improve opaque type with no RHS error message #15285
  • Refine condition when to report errors in an inserted apply #15016
  • Accept soft modifiers separated by blank lines #14959
  • Fix warning with leaking this into Scala2 synthetic apply #15307
  • Refine error messages for early promotion #15263
  • Standardize -rewrite advertisements and suppress them in REPL #14955
  • Improve diagnostic for refutable extractors in pattern bindings #14988
  • Fix: correction to ClassTooLargeException message #14974
  • Scaladoc:
  • Fix rendering ThisType #15440
  • Add extension suffixes and fqName to scaladoc searchbar #15048
  • Fix implicit members resolution #15021
  • Fix windows paths handling in legacy external link provider #15023
  • Warn about special characters in filenames according to the default Jekyll rules #14657
  • Scaladoc annotations rework #15361
  • Fix expanding docstrings in Scaladoc #15045
  • Scripting:
  • Fix #13760: Running script compiled jar no longer restricted to java.base module #15103
  • SemanticDB:
  • Do not register SymbolOccurrence for non-symbol endmarker #15143
  • Standard Library:
  • Implement new main annotation #14841
  • Add compiletime.ops.string.CharAt #14431
  • Make EmptyTuple a case object #14972
  • Tasty Inspector:
  • Handle this prefix in classes (in quote patterns) #14800
  • Fix parameter untupling #14816
  • Tooling:
  • Add -Vprofile option #15406
  • Fix rewrite for type-ascribed refutable pattern binding #15314
  • Fix rewrites for refutable pattern bindings #14954
  • Transform:
  • Also hoist lifted arguments in super calls #14919
  • Add deprecated overriding checks #15432
  • Don't cast to a value class as self type #14885
  • Disallow @targetName on top-level class, trait, and object #15068
  • Handle case where abstract overrides miss an implementation #14893
  • Treat RecTypes as potentially uncheckable #14894
  • Allow multiple wildcard vals #14906
  • Typeclass Derivation:
  • Support intersection types in mirrorCompanionRef #15192
  • Fix #15222: Recursively check for product ctor accessibility #15231
  • Fix 14025: Restrict curried type lambdas in mirror generation #15006
  • Make anonymous mirrors serializable #15391
  • Typer:
  • Fix #15405: Dealias Or type constituents when finding its dominator #15416
  • Handle unconstrained TypeVars when synthesizing ClassTags #15376
  • Allow for unqualified apply as context functions #15417
  • Prevent crash when reporting an error #15320
  • Show a match type trace for "not a class type" errors #15218
  • Don't constrain type variables in normalize #15223
  • Eta expand CFTs in super accessors if needed #15092
  • Reject structural applications of polymorphic methods #15090
  • Hande clashes between same-named exports #14967
  • Fix outer reference detection in class parents #14961
  • Avoid redundant type test for irrefutable @unchecked patterns #14898
  • Detect clashes involving renamed exports #14831
  • Guard against stackoverflows when instantiating HK-Lambdas #14851
  • Don't try conversions or extensions on Java companion objects #14881
  • Revert #14452 and make compile-time operations on stable arguments stable #15268
  • Better handling of type parameters in constructor pattern #15356
  • Handle AvoidMap recursions #15393
  • Add missing condition in checking synthetic apply #15362
  • Harden type assignment of lambda trees #14887
  • Disallow package names as types #14888
  • Fix constToLiteral #14853

New in Scala 3.1.3 (Jul 7, 2022)

  • Highlights of the release:
  • f-interpolator: Scala 2 parity and bugfixes #13367
  • Show inlined positions with source code on errors #14002
  • Add reflect ClassDef.apply and Symbol.newClass #14124
  • Add experimental TupledFunction #14414
  • Other changes and fixes:
  • Backend:
  • Filter out static forwarders for Java package private methods #14662
  • Emit all classes as public to avoid object deserialization issues #14686
  • Upgrade to ASM 9.2 #14711
  • Desugaring:
  • Adapt function arguments to n-ary prototype #14651
  • Erasure:
  • Don't optimize explicitly written isInstanceOf tests away. #14715
  • Exports:
  • Fix use of exported prefix #14461
  • Export constructor proxies for parameterized classes #14681
  • GADT:
  • Fix #14726: call exclusiveLower before addLess during unification #14727
  • Avoid unsound GADT constraints derived from subtyping relations between singletons and refined types #14728
  • Keep correct kind when preparing constraint in stripParams #14761
  • Initialization:
  • Add special case to init checker to always allow certain methods #14352
  • Implicits:
  • Avoid unnecessary under-constrained implicit searches #14353
  • Prevent implicit conversion chaining #14750
  • Fix hasKnownMembers #14762
  • Match types:
  • Fix #13855: Chaining Match Types fails at value level #14354
  • Constrain pattern types when typing a match type case #14563
  • Fix bounds of match type cases #14645
  • More aggressive reduction of type selection (fixes parboiled2) #14987
  • Relax avoidance checks more for match type reduction #15036
  • Re-establish missing symbol from previous phase (in one specific case) #15295
  • Metaprogramming:
  • Allow nested Quotes with a different owners #13652
  • Add typed versions of Mirror.ProductOf#fromProduct #14114
  • Fix #14393: foldOver in default TreeAccumulator can't process Typed nodes #14396
  • Fix invariant quote type holes #14425
  • Make singleton operations covariant #14452
  • Find inline calls inserted in synthetic members #14480
  • Don't generate Mirror.Sum for simple enum cases #14525
  • Collect all local class definitions #14528
  • Only make the staged parts of a quote inlineable #14604
  • Tolerate some faults when copying trees in InlineTreeMap #14674
  • Handle this prefix in objects (in quote patterns) #14732
  • Detect when position is not in known source #14801
  • Handle SummonFrom in reflect TreeAccumulator #14809
  • Handle situation where an inline info cannot be computed #14827
  • Opaque Types:
  • Disallow overriding opaque type aliases #14665
  • Disallow private opaque type aliases #14666
  • Generate opaque proxies also for base classes #14668
  • Parser:
  • Accept supplementary Unicode characters #13136
  • Don't compute indents when in a string #14441
  • Parse empty arguments in (invalid) Apply more often #14463
  • Expand span errorTermTree to include skipped span. #14492
  • Fix lookahead logic in Scanner #14562
  • Add private inteface methods parsing in JavaParser #14643
  • Reject postfix ops already in Parser #14677
  • Syntax error recovery #14695
  • Pattern matching:
  • For generic tuples, call Tuples.apply instead of _1/_2/.. #14296
  • Preserve the intersection of disjoint numbers in match analysis #14550
  • Fix casting of generic tuple selection #14590
  • Ignore private/sealed abstract class/traits #14599
  • Drop special treatment for Scala-2 code in unapply #14766
  • Pickling:
  • Disable type simplify in unpickler #14506
  • Check if package names will be encoded in desugar #14597
  • Fix picking default syntax for comments #14725
  • Fix lack of type avoidance in argument lifting #15229
  • Refchecks:
  • Don't skip override tests when overridden is AbsOverride #14527
  • Extend "cannot override mutable variable" restriction to deferred var… #14724
  • Repl:
  • Avoid stale import context during REPL parsing #14493
  • Fix #11202: Incorrect highlight for type constructor #14518
  • Make empty catch an incomplete. #14519
  • Add in feedback when resetting REPL state #14521
  • Fix #14535: End marker now has the same color as its definition in repl #14555
  • Add backticks when needed in completions #14594
  • Autocomplete repl commands #14627
  • Harden REPL in presence of values that fail to initialize #14702
  • Reporting:
  • Change error message text from "fully-initialized" to "fully initialized" #14400
  • Improve -explain rendering #14357
  • Propagate unreported features when flushing a reporter #14503
  • Avoid using · character #14453
  • Fix explain rendering with Windows EOL #14456
  • Fix #14576: Ensure unreported warning summaries are also emitted via sbt-bridge #14602
  • Add context to safe-init warnings for inlined methods #14646
  • Show unique ids of pattern bound symbols #14716
  • Don't replace typevars by their f-bounds in error messages #14723
  • Error message improvement for illegal access extension methods #14730
  • Warn on misleading indentation in single-case catch #14738
  • Use correct ErrorMessageID for EmptyCatchOrFinallyBlock #14786
  • Correct highlight interpolation in explain message #14802
  • Don't issue implicit errors if parameter has default value #14849
  • Typer:
  • Fix approximating RefinedTypes (n>1) #14361
  • Allow override protected[C] in companion #14105
  • Hide apply generated for rotected case class constructor #14266
  • Infer parameters of eta applications with vararg parameters #14397
  • Keep softness when widening unions #14399
  • Fix #11008: Support generic tuples as a valid unapply result #14434
  • Fix TreeTypeMap to correctly substitute type parameters #14537
  • Handle ownership changes in InlineTyper #14568
  • Handle more corner cases in etaReduce #14628
  • Remove false unchecked warnings on refined types #14703
  • Fix hoisting local symbols #14714
  • Fix desugaring empty argument blocks in normArgs #14719
  • Improve overloading resolution if expected type is not FunProto #14733
  • Don't force LazyRefs when computing DepStatus #14774
  • Avoid NPE in simplify #15310
  • Eta expand export forwarders that have context function types #15217
  • Partially revert #14026 - Fixes 4 regressions #15343
  • Explicit nulls:
  • Fix override containing type param #13975
  • Fix case null on non-nullable type in unsafe null #13976
  • Thread context through block in transforms correctly and efficiently #14523
  • Fix intercept TypeApply #14617
  • Fix #14682: fix overriding check in mergeSingleDenot #14755
  • IDE Support:
  • Fix contextOfPath for Template #12783
  • Search all source trees for a given span #14436
  • Set zero span for synthetic enum import selector #14498
  • Set zero span for synthetic tuple type #14499
  • Set proper position for ValDefs generated from tuples #14513
  • Provide signature help for unapply methods #14611
  • Add completions for specific MatchType cases #14639
  • Support backticked imports in completions #14649
  • Change completions filtering to now include package module classes #14756
  • Scaladoc:
  • Correctly handle context functions #14371
  • Fix rendering dependent function types #14327
  • Unescaped special characters in Quotes documentation #14377
  • Refactor static site loading and directory structure #14378
  • Make member filtering case-insensitive #14430
  • Add member position IDs to anchors in searchbar #14454
  • Repair links #14475
  • Follow renames in content contributors script #14478
  • Change default blog directory to blog #14485
  • Refactor generation configuration in sbt. Generate reference documentation using Scaladoc #14489
  • Fix issues with incorrect external links and special characters #14516
  • Grouping entries in searchbar. Add hints to searchbar #14539
  • Fix #14481: certain functions not being shown in searchbar #14546
  • Fix function classpathArgs() #14559
  • Add necessary parentheses in function types #14565
  • Fix groupping entries using markdown syntax #14577
  • Add table of content to static sites #14607
  • Allow to set a comment syntax based on path to source #14650
  • Tweak Language Reference documentation #14669
  • Don't add extra newlines when there aren't extra sections in doc markdown #14734
  • Fix regression with extension methods not being shown in searchbar #14779
  • Fix snippets hiding and buttons animation #14839
  • SemanticDB:
  • Update generated semanticdb code with the latest scalapb #14591
  • Support MatchType#14608
  • Other:
  • Kotlin interop: Find nested class if InnerClass entry is missing #14426
  • Add 3.2 language mode internally, treat it like 3.0, 3.1 #14690
  • Add -h to alternatives for -help #14792
  • Avoid overeager completion of Java annotations in classfile parser #15185
  • Implement scalac script in Scala #15212
  • Fix #15220: Windows scripts do not delegate to MainGenericRunner #15325

New in Scala 3.1.3 RC 5 (Jun 11, 2022)

  • Avoid NPE in simplify #15310
  • Eta expand export forwarders that have context function types #15217
  • Fix #15220: Windows scripts do not delegate to MainGenericRunner #15325
  • Re-establish missing symbol from previous phase (in one specific case) #15295
  • Partially revert #14026 - Fixes 4 regressions #15343

New in Scala 3.1.3 RC 4 (May 25, 2022)

  • Fix lack of type avoidance in argument lifting #15229
  • Avoid overeager completion of Java annotations in classfile parser #15185
  • Implement scalac script in Scala #15212

New in Scala 3.1.2 (Apr 12, 2022)

  • Forward compatibility improvements:
  • Enable generation of TASTy files readable for older compilers #14156
  • General improvements:
  • Add eval (-e) expression evaluation to command line #14263
  • Format compiler crash stack traces #14269
  • Improve typer traces #14270
  • Add -Xmacro-settings option and API #14234
  • Add reflect TypeRepr.substituteTypes #13166
  • Expand compiletime.ops #13400
  • Cache isSubspace for a 3000% speedup #13637
  • lint trivially self-recursive extension methods #13709
  • add printTypesAndErasure test main method to compare typer and erasure #13745
  • Warning for infinite recursive lazy vals #13749
  • Provide scala.home setting for scripts #13759
  • Improve message when -Xmax-inlines limit reached #13783
  • Add append operator to Tuple #13786
  • Allow passing any JMH option to scala3-bench #13787
  • Warn on lossy conversion of literals & constants #13792
  • Consider minTargetVersion as always supported #13811
  • Add -Xmacro-check for Block constructors #13824
  • Navigate the AST within AnnotatedType and ImportType #13834
  • Refine handling of CanThrow capabilities #13866
  • Indicate name of classfile where leaky mapping of existential type happens #13879
  • Refine treatment of TypeBounds in patterns #13881
  • Impose implicit search limit #13886
  • Better handling of multiple exceptions for saferExceptions #13914
  • Complete when importing same symbol multiple times #13972
  • Implement :settings in the REPL #13982
  • Fixes and improvements to trace logging #13984
  • Fail compilation of attempting a 0-arity product extraction #14029
  • Traverse the types to find experimental references #14047
  • Retain HasDefaultParams flag on export. #14051
  • Also consider private symbols in implicit scope of type #14054
  • Allow return in tailrec position #14067
  • Make outer references Java-synthetic #14084
  • Add Reflect TypeRepr.typeArgs #14088
  • Reject empty target names #14090
  • Use =>> instead of => for printing a LambdaTypeTree #14107
  • REPL: Add compiler options to :reset #14139
  • Add hint on -Xcheck-macro scope extrusion failure #14203
  • Support quoted PolyFunction #14222
  • Update wording of uninitialized value error to be grammatically correct #14292
  • Rename -Yscala-release, -release and -Xtarget settings to make them more consistent #14606
  • Scaladoc:
  • Fix missing known subtypes #13794
  • Markdown preprocessor #13140
  • Add source position for errors from doc-root-content file #13908
  • Fix double implicit modifier #13909
  • Fix links to unexisting types sites #13917
  • Add support for tables in wiki syntax #13933
  • Improve features parity with old scaladoc/docs.scala-lang #13954
  • Add missing styles to snippets that are not Scala #13959
  • Fix filtering extensions. Better support for exports #14125
  • SemanticDB:
  • Add annotations #13818
  • Support TypeApply Synthetic #13481
  • Bug fixes:
  • Fix #13855: Chaining Match Types fails at value level #14354
  • Fix #12260: Add underscore to match type syntax #12261
  • Fix #11861 - hash nested calls to inline definitions #12931
  • Avoid shadowing of name 'name' #13442
  • Fix #13633: Can't reduce match types inside a type alias #13635
  • Fix erased context function types #13736
  • Widen qualifier skolems #13748
  • Change order of proxy evaluation when inlining #13755
  • Fix init checker on secondary constructor parameter access #13776
  • Add missing @experimental in Tuples #13778
  • Fix improper usage of constrained breaking type inference #13779
  • Fix error message when deriving an obstract type #13812
  • Handles Nothing when synthesizing CanEqual #13828
  • Fix #13026: No longer print VBAR and padding in the middle of the message #13829
  • Solves dotc assertion error on (non-sensical?) parameter type. #13769 #13830
  • Fix missing code-completion on standalone annotations #13831
  • Fix comparing AnyVal | Null to Null and selecting in UnsafeNulls #13837
  • Fix error summary printed twice #13843
  • Detect opaque aliases in inline val types #13857
  • Fix @experimental @main methods #13858
  • Fix #13860: Ignore bridges when looking for a default getter's attached method. #13870
  • Add missing position when expanding error #13872
  • Try to instantiate type variables in tryInsertImplicitOnQualifier #13884
  • Fix crasher for missing integer argument on command line #13894
  • Fix messages leaking via suspended messages #13911
  • Don't lift try-catch statements that are already in local functions #13944
  • Initialize quote cache on tasty inspector run #13953
  • Tighten product match logic in irrefutable check #13962
  • Fix Mirror.Product for type lambdas #14003
  • Sound type avoidance (hopefully!) #14026
  • Fix REPL clashing with CWD artefacts #14021
  • Don't retypecheck erroneous arguments when fixing function #14043
  • Fix #13994: initialise inline ctx in lateEnter #14050
  • Inline inlined private methods before checking accessibility #14049
  • Handle hoisted super arguments correctly in elimByName #14057
  • Check variance of RHS of opaque type #14058
  • Don't insert INDENT/UNINDENT without anything in between #14066
  • Don't generate illegal types when clarifying implicit errors #14068
  • Allow import to show completions #14069
  • Bypass eligible caches for implicit search under GADT constraints #14072
  • Fix passing jvm options #14073
  • Harden erasure of PolyFunction apply's #14075
  • Test for non-open classes warning #14079
  • Avoid field/field clashes #14081
  • Fix reachability of unapplySeq of non-List sequences #14112
  • Check for splices in quoted macro parameters #14117
  • Fix reachability by retaining spaces of Prod params #14118
  • Extract GADT constraints from wildcard type arguments #14132
  • Fix derivedPolyProto to use the correct result type #14148
  • Remove reflect TypeApply TypeVars #14201
  • Clear temp var for captured var expr to permit GC #14205
  • Re-type implicit candidate if expected type is context function #14219
  • Adapt generic tuples to be able to access members #14242
  • Fix Scala.JS source map URIs #14243
  • Disallow erased inline definitions #14250
  • Fix #7512: Normalize type arguments before instantiation #14259
  • Disallow bottom types in erased implementations #14267
  • Fix checkNoModuleClash & avoid types with less precision loss #14274
  • Parse splices inside quoted patterns as patterns #14277
  • Make initialization checker see through synthetic applys #14283
  • Fix byte code generation for by-name parameters #14310
  • Avoid misleading error message #14331
  • Set context when reporting summonInline errors #14405
  • Fix #14541: Problem running @main methods with command line arguments #14543
  • Check defined in src for cache in companion #14557

New in Scala 3.1.2 RC 3 (Apr 12, 2022)

  • Revert #14067: "Allow return in tailrec position" - the change was breaking tasty compatibility.

New in Scala 3.1.2 RC 2 (Mar 14, 2022)

  • Set context when reporting summonInline errors #14405
  • Fix #14541: Problem running @main methods with command line arguments #14543
  • Check defined in src for cache in companion #14557
  • Rename -Yscala-release, -release and -Xtarget settings to make them more consistent #14606

New in Scala 3.1.2 RC 1 (Mar 14, 2022)

  • Forward compatibility improvements:
  • Enable generation of TASTy files readable for older compilers #14156
  • General improvements:
  • Add eval (-e) expression evaluation to command line #14263
  • Format compiler crash stack traces #14269
  • Improve typer traces #14270
  • Add -Xmacro-settings option and API #14234
  • Add reflect TypeRepr.substituteTypes #13166
  • Expand compiletime.ops #13400
  • Cache isSubspace for a 3000% speedup #13637
  • lint trivially self-recursive extension methods #13709
  • add printTypesAndErasure test main method to compare typer and erasure #13745
  • Warning for infinite recursive lazy vals #13749
  • Provide scala.home setting for scripts #13759
  • Improve message when -Xmax-inlines limit reached #13783
  • Add append operator to Tuple #13786
  • Allow passing any JMH option to scala3-bench #13787
  • Warn on lossy conversion of literals & constants #13792
  • Consider minTargetVersion as always supported #13811
  • Add -Xmacro-check for Block constructors #13824
  • Navigate the AST within AnnotatedType and ImportType #13834
  • Refine handling of CanThrow capabilities #13866
  • Indicate name of classfile where leaky mapping of existential type happens #13879
  • Refine treatment of TypeBounds in patterns #13881
  • Impose implicit search limit #13886
  • Better handling of multiple exceptions for saferExceptions #13914
  • Complete when importing same symbol multiple times #13972
  • Implement :settings in the REPL #13982
  • Fixes and improvements to trace logging #13984
  • Fail compilation of attempting a 0-arity product extraction #14029
  • Traverse the types to find experimental references #14047
  • Retain HasDefaultParams flag on export. #14051
  • Also consider private symbols in implicit scope of type #14054
  • Allow return in tailrec position #14067
  • Make outer references Java-synthetic #14084
  • Add Reflect TypeRepr.typeArgs #14088
  • Reject empty target names #14090
  • Use =>> instead of => for printing a LambdaTypeTree #14107
  • REPL: Add compiler options to :reset #14139
  • Add hint on -Xcheck-macro scope extrusion failure #14203
  • Support quoted PolyFunction #14222
  • Update wording of uninitialized value error to be grammatically correct #14292
  • Scaladoc:
  • Fix missing known subtypes #13794
  • Markdown preprocessor #13140
  • Add source position for errors from doc-root-content file #13908
  • Fix double implicit modifier #13909
  • Fix links to unexisting types sites #13917
  • Add support for tables in wiki syntax #13933
  • Improve features parity with old scaladoc/docs.scala-lang #13954
  • Add missing styles to snippets that are not Scala #13959
  • Fix filtering extensions. Better support for exports #14125
  • SemanticDB:
  • Add annotations #13818
  • Support TypeApply Synthetic #13481
  • Bug fixes:
  • Fix #13855: Chaining Match Types fails at value level #14354
  • Fix #12260: Add underscore to match type syntax #12261
  • Fix #11861 - hash nested calls to inline definitions #12931
  • Avoid shadowing of name 'name' #13442
  • Fix #13633: Can't reduce match types inside a type alias #13635
  • Fix erased context function types #13736
  • Widen qualifier skolems #13748
  • Change order of proxy evaluation when inlining #13755
  • Fix init checker on secondary constructor parameter access #13776
  • Add missing @experimental in Tuples #13778
  • Fix improper usage of constrained breaking type inference #13779
  • Fix error message when deriving an obstract type #13812
  • Handles Nothing when synthesizing CanEqual #13828
  • Fix #13026: No longer print VBAR and padding in the middle of the message #13829
  • Solves dotc assertion error on (non-sensical?) parameter type. #13769 #13830
  • Fix missing code-completion on standalone annotations #13831
  • Fix comparing AnyVal | Null to Null and selecting in UnsafeNulls #13837
  • Fix error summary printed twice #13843
  • Detect opaque aliases in inline val types #13857
  • Fix @experimental @main methods #13858
  • Fix #13860: Ignore bridges when looking for a default getter's attached method. #13870
  • Add missing position when expanding error #13872
  • Try to instantiate type variables in tryInsertImplicitOnQualifier #13884
  • Fix crasher for missing integer argument on command line #13894
  • Fix messages leaking via suspended messages #13911
  • Don't lift try-catch statements that are already in local functions #13944
  • Initialize quote cache on tasty inspector run #13953
  • Tighten product match logic in irrefutable check #13962
  • Fix Mirror.Product for type lambdas #14003
  • Sound type avoidance (hopefully!) #14026
  • Fix REPL clashing with CWD artefacts #14021
  • Don't retypecheck erroneous arguments when fixing function #14043
  • Fix #13994: initialise inline ctx in lateEnter #14050
  • Inline inlined private methods before checking accessibility #14049
  • Handle hoisted super arguments correctly in elimByName #14057
  • Check variance of RHS of opaque type #14058
  • Don't insert INDENT/UNINDENT without anything in between #14066
  • Don't generate illegal types when clarifying implicit errors #14068
  • Allow import to show completions #14069
  • Bypass eligible caches for implicit search under GADT constraints #14072
  • Fix passing jvm options #14073
  • Harden erasure of PolyFunction apply's #14075
  • Test for non-open classes warning #14079
  • Avoid field/field clashes #14081
  • Fix reachability of unapplySeq of non-List sequences #14112
  • Check for splices in quoted macro parameters #14117
  • Fix reachability by retaining spaces of Prod params #14118
  • Extract GADT constraints from wildcard type arguments #14132
  • Fix derivedPolyProto to use the correct result type #14148
  • Remove reflect TypeApply TypeVars #14201
  • Clear temp var for captured var expr to permit GC #14205
  • Re-type implicit candidate if expected type is context function #14219
  • Adapt generic tuples to be able to access members #14242
  • Fix Scala.JS source map URIs #14243
  • Disallow erased inline definitions #14250
  • Fix #7512: Normalize type arguments before instantiation #14259
  • Disallow bottom types in erased implementations #14267
  • Fix checkNoModuleClash & avoid types with less precision loss #14274
  • Parse splices inside quoted patterns as patterns #14277
  • Make initialization checker see through synthetic applys #14283
  • Fix byte code generation for by-name parameters #14310
  • Avoid misleading error message #14331

New in Scala 3.1.1 (Feb 2, 2022)

  • You can use using clauses to introduce subtyping relations between types in the function body.
  • Mirrors can be correctly summoned for hierarchical sum types compiled by Scala 3.0.x. It is now safe to derive a type class for a type dependency that was compiled with a pre-3.1.0 compiler. (PR #14100).
  • Dual Scala 2/3 macros can be now declared in non-experimental scopes (PR #13795).
  • Scaladoc documentation has an improved UI.

New in Scala 3.1.0 (Oct 18, 2021)

  • Notable changes:
  • New experimental feature: safer exceptions #11721
  • Emit efficient code for switch over strings #11937
  • Add reflect SourceFile.{getJPath,name,path} #13177
  • Support -Wconf and @nowarn #12857
  • Fix #9482: simplified Manifest synthesis #13142
  • Scaladoc: Integrate Scastie into Scaladoc #13258
  • Add reflect Unapply.apply #13298
  • Change @experimental spec #13305
  • Update the tasty inspector returned value #13316
  • Add Wildcard in reflection #13363
  • Add TypedOrTest as super type of Typed in reflection #13362
  • Stabilized API:
  • scala.Selectable.WithoutPreciseParameterTypes #13315
  • Symbol member methods in reflection API #13314
  • scala.quoted.Type.valueOfTuple #13313
  • Quotes abort API #13312
  • Quotes.reflect.TermParamClause.isErased #13311
  • Other improvements:
  • Language and compiler:
  • Add CanEqual typeclass instances of Option, Either and Tuple for strictEquality #12419
  • Synthesise Mirror.Sum for nested hierarchies #11686
  • Added better explanation for tree, that cannot be typed #12717
  • Allowing local variables to be initialized with non-hot values in initialization checker #12867
  • Use StringConcatFactory for string concatenation on JDK 9+ #12929
  • Add explanation to "already defined" message #13090
  • Do not require @experimental on anonymous classes #13155
  • Make body of quotes inlinable #13188
  • REPL: display the compiler + Java version on startup #13193
  • Teach backend to emit iinc instructions #13214
  • Allow IntSetting's to be set with a colon #13267
  • Add CanEqual typeclass instance for Seq to match Nil case#13265
  • Simplify & clarify TASTy isVersionCompatible #13280
  • Allow semicolon between type match cases #13338
  • Allow experimental erased in experimental scopes #13394
  • Add TypeRepr.isTupleN to reflection API #13384
  • Allow experimental language imports in experimental scopes #13417
  • Allow -source 3.1 as a version #13617
  • Documentation:
  • Update the docs, change sidebar url property to page/index #13004
  • Inkuire search engine UI improvements #13052
  • Generate flat documentation structure for API rather than putting everything in api directory #13130
  • Add heuristic to support Context Bounds #13172
  • Add snippet includes feature. Introduce new snippet UX/UI. #13217
  • Add version browsing for nightlies #13244
  • Fetch Inkuire at scaladoc build instead of documentation generation #13287
  • SemanticDB:
  • Signature information #12885
  • Support new Scala3 modifiers #13239
  • Support synthetics: implicit params, context params, and implicit conversions #13288
  • Support overridden_symbols#13295
  • Other bug fixes:
  • Fix parsing Java annotation values #11809
  • Fix #11318: Assertion failed when not adding prefix to extension method in method body #11882
  • Fix #10900: Avoid loop for F-bounds in checkCanEqual #12747
  • Fix regression in provablyDisjoint #12786
  • Do no widen constant type on selector type in inline matches #12902
  • Make def generated from givens not synthetic #12979
  • Fix non-determinism in -Ysafe-init external method trace: #12989
  • Exhaustivity warnings on nested case classes #13030
  • Fix constructors Java generic signatures #13047
  • Set TimeZone for version number #13051
  • Avoid auto-tupling in unapply unless a tuple is expected #13063
  • Handle overloaded members when generating Java varargs bridges #13066
  • Fix definition of enclosingExtensionMethod #13078
  • Fix syntax of extension methods #13079
  • Refine "can be handled by parent" condition when generting bridges #13092
  • Suppress "no outer defs" check for Java sources #13108
  • Fix MatchError in Scaladoc Scalajs script #13115
  • Escape illegal characters in scaladoc code blocks #13118
  • Run PatternMatcher earlier, in the group before ExplicitOuter #13124
  • Deskolemise patterns to suppress exhaustivity warnings #13137
  • Analyze end markers when looking ahead #13139
  • Fix #13131: escape java array in ClassTag #13156
  • Handle isDefinedInCurrentRun on no symbol #13157
  • call deleteOnExit() after creating temporary scripting compile directory #13171
  • Detect cyclic dependencies when loading modules #13178
  • Fix #12800: Clarify match type reduction error on empty scrutinee #13184
  • Fix intrinsic types documentation when there is no scala package on files to document path #13185
  • Remove color from scala.compiletime.codeOf #13186
  • Scaladoc fix 12813: type parameter in extension method is wrong #13191
  • Scaladoc fix #13148: Empty argument list is not shown in scaladoc in some cases #13192
  • Fix inherit doc warnings #13199
  • Fix bugs in RemoteLinksTests #13200
  • Scaladoc fix [#13194]: Ill formated codeblock #13202
  • Fix self types appearing as inherited in docs and docs leaking self type methods #13207
  • Fix #12178: cannot resolve ValueOf for type literal argument of opaque types #13210
  • Make Hole a proper Tree in Trees #13213
  • Weaken assertion for duplicate attachments #13224
  • Employ frozen_

New in Scala 3.0.2 (Sep 1, 2021)

  • Language & syntax:
  • Don't insert semicolons in conditions unless indented #12801
  • Add escape hatch Selectable.WithoutPreciseParameterTypes #12268
  • Add Matchable to the parents of Null in explicit nulls #12697
  • Scaladoc:
  • Add no links warning setting to scaladoc #12936
  • Search for methods also by type signature #12375
  • Metaprogramming:
  • Map opaque types in arguments of inlined calls to proxies #12922
  • Don't forget side effects in prefixes of inlined function calls #12842
  • Drop "no inlines with opaques" implementation restriction #12815
  • Detect abstract inline method calls after inlining #12777
  • Fix implicit ValueOf synthesis #12615
  • Other improvements:
  • Add Scala 3 batch commands for Windows #13006
  • Fix #12981: show diagnostics levels (warn | error) in REPL #13000
  • Use WeakHashSet instead of HashSet for hash-consing types #12935
  • Balance And/Or types when forming lubs and glbs #12928
  • Restricts isInstanceOf[Null] checks #12905
  • Add support for shallow capture sets #12875
  • Drop implementation restriction for polymorphic functions #12863
  • Preserve hard unions in more situations #12654
  • Better support type-heavy pattern matches #12549
  • Other bug fixes:
  • Fix #13046: override is a valid identifier in Java, not a keyword #13048
  • Don't emit Java generic signatures for constructors #13047
  • Exhaustivity warnings on nested case classes #13030
  • Refine overriding pairs in RefChecks #12982
  • Let annotations on parameters see preceding type parameters #12980
  • Retain transparent flag on exports #12978
  • Widen unions before finding members #12925
  • ProtoTypes#normalizedCompatible: keep more constraints #12924
  • Detect provisional superclasses and recompute them in Typer #12912
  • Properly handle self-types in reflection member lookup #12893
  • Use Java rules for member lookup in .java sources #12884
  • Hide problematic static forwarders #12860
  • When checking tp1

New in Scala 3.0.1 (Jul 9, 2021)

  • Enable experimental features in tests as workaround for sbt scala binary version resolution bug

New in Scala 3.0.0 (May 19, 2021)

  • After 8 years of work, 28,000 commits, 7,400 pull requests, 4,100 closed issues – Scala 3 is finally out. Since the first commit on December 6th 2012, more than a hundred people have contributed to the project. Today, Scala 3 incorporates the latest research in type theory as well as the industry experience of Scala 2. We’ve seen what worked well (or not so well) for the community in Scala 2. Based on this experience we’ve created the third iteration of Scala – easy to use, learn, and scale.

New in Scala 2.13.6 (May 18, 2021)

  • Macros work again when compiling on Java 9 or 10, fixing 2.12.5 regression (PR #6446)

New in Scala 2.13.5 (Feb 23, 2021)

  • TASTy reader: add support for Scala 3.0.0-RC1
  • Allow name-based extractors to be irrefutable
  • JDK 16 and 17 support in the optimizer

New in Scala 2.13.4 (Nov 21, 2020)

  • Restores default global ExecutionContext to 2.12 behavior
  • Improves pattern matching, especially in exhaustivity checking
  • Adds experimental support for consuming some libraries built by Scala 3

New in Scala 2.13.3 (Jun 26, 2020)

  • This is primarily a bugfix release.
  • It also includes:
  • improvements to warnings and linting
  • experimental -Xasync support

New in Scala 2.13.2 (Apr 23, 2020)

  • A brand-new Vector implementation
  • Configurable warnings
  • An improved REPL (now JLine 3 based)
  • Bugfixes and more

New in Scala 2.13.1 (Sep 20, 2019)

  • Collection-related regressions:
  • Revert Stream.Cons to the 2.12 encoding (#8354)
  • Don't rebuild scala.Seq to drop elems in unapplySeq (#8340)
  • Blacken subtrees where necessary in RedBlackTree.take (#8287)
  • Iterator#flatMap#hasNext calls outer#hasNext 1 time, not 2-3 times (#8220)
  • s.c.Map#values returns a strict Iterable rather than a View (#8195)
  • Vector.from(ArraySeq) copies elems rather than reusing unsafeArray (#8194)
  • Fix mutable.HashSet.addAll: remove redundant call to super method (#8192)
  • Fix mutable.ArraySeq.ofChar#addString (#8176)
  • Fix HashMap#mapValuesInPlace (#8421)
  • Other regressions:
  • Avoid spurious "illegal cyclic reference" errors (#8382)
  • Stabilize args of apply (#8202)
  • Reject incomplete implicit dictionaries (#8201)
  • Process exit code on script errors (#8169)
  • Fix type inference involving wildcards (#8129)
  • Other bug fixes and improvements:
  • Extend the Gradle / sbt 0.13 leniency to Windows (#8408)
  • Avoid unnecessary toSeq conversions in Seq methods (#8374)
  • Avoid memory leaks in Stream methods (#8367)
  • Precompile -i files for script runner (#8349)
  • Stop warning on higher-kinded usage without -language:higherKinds (#8348)
  • Simplify reporters (#8338)
  • More efficient ArraySeq iteration (#8300)
  • Enable hyperlinking to Java docs (#8284)
  • Parent implicitNotFound message is supplemental (#8280)
  • Add protected and private visibility filters to scaladoc (#8183)
  • Fix vulnerability in jQuery used in ScalaDoc (#8179)
  • Synthesize a PartialFunction from function literal (#8172)
  • Fix parsing of try (#8071)
  • Support emitting Java 9 bytecode by adding "-target:9" (#8060)
  • Deprecate mutable.MultiMap (#8005)
  • Add syntactic sugar for if(_) (#7707)
  • A foreign definition induces ambiguity (#7609)

New in Scala 2.12.10 (Sep 11, 2019)

  • Highlights:
  • The main purpose of this release is to fix the following regressions in 2.12.9:
  • Fix regression in large string interpolations with non-String typed splices (#8315)
  • Revert "Generate shallower ASTs in pattern translation" (#8327, reverting #8061)
  • Fix regression in classpath when JARs have 'a.b' entries beside 'a/b' (#8321)
  • Further highlights:
  • Improvements to thread-safety of runtime reflection (#8396)
  • Add some customization to JAR writing (#8268)
  • Minor improvements to compiler performance
  • Compatibility:
  • As usual for our minor releases, Scala 2.12.10 is binary-compatible with the whole Scala 2.12 series.

New in Scala 2.12.9 (Aug 6, 2019)

  • Highlights:
  • Faster compiler: 5–10% faster since 2.12.8, thanks to many optimizations (mostly by Jason Zaugg and Diego E. Alonso-Blas: kudos!)
  • Improved compatibility with JDK 11, 12, and 13 (see below)
  • Experimental support for build pipelining and outline type checking (see below)
  • Compatibility:
  • As usual for our minor releases, Scala 2.12.9 is binary compatible with the whole Scala 2.12 series.
  • Scala.js users must update to 0.6.28+ or 1.0.0-M8+ to use Scala 2.12.9. (#7375)
  • Compatibility with JDK 11, 12, and 13:
  • Scala 2.12.9 contains various fixes to improve compatibility with JDK 11, 12, and 13.
  • Backport upgrade to ASM 7 for JDK 12 compatibility (#7780)
  • Fix -release N flag on JDK 12+ (#7763)
  • Fix "cannot be represented as URI" on JDK 13 (#8210)
  • Add JDK 9 constant types to the ClassfileParser to fix Scaladoc generation issue (#8289)
  • Build pipelining and outline type checking:
  • Scala 2.12.9 adds experimental infrastructure intended to support "build pipelining". Once build tools add support, compilation of downstream subprojects could begin once upstream code has been type-checked. See scala-dev#643.
  • Further highlights:
  • Fix large string interpolation causing compile-time StackOverflowError (#7995, #7996)
  • Un-deprecate eta-expansion of 0-ary methods (#7740)
  • Fix Java signature for value classes appearing in type arguments (#8127)
  • Backport fix for interop between Java and generic inner Scala classes (#7977)
  • Make the inferred packedTypes deterministic in bytecode (#7751)
  • Add -doc-canonical-base-url to set a canonical URL in Scaladoc (#7998)
  • Backport fix for "illegal cyclic reference involving class" (#8161)
  • Cache materialized TypeTags (#8112)
  • Reduce the overhead of macro expansion (#8088)

New in Scala 2.13.0 RC 2 (May 17, 2019)

  • Emit mixin forwarders as ordinary, non-bridge methods again (#8037)
  • Rework unification of Object and Any in Java/Scala interop (#7966)
  • Make Option extend IterableOnce (#8038)
  • Organize JDK converters: extension methods for Scala in scala.jdk, explicit converters for Java in jdk.javaapi (#7987)
  • Un-deprecate left Either projections (#8012)
  • Scaladoc: support setting canonical URLs (#7834)

New in Scala 2.13.0 RC 1 (May 16, 2019)

  • Collections changes:
  • Integrate converters from scala-java8-compat (#7458)
  • Make unified collection serialization opt-in instead of opt-out (#7624)
  • New mutable.HashSet and mutable.HashMap implementations (#7348)
  • Add CollisionProofHashMap, a mutable hashmap that degrades to red-black trees in the worst case (#7633)
  • Change LazyList to always evaluate elements in order, and to have lazy empty-or-not status (#7558)
  • Improved performance of small Vectors (#7743)
  • Add immutable TreeSeqMap (a SeqMap implemented via a customized IntMap/HashMap pair) (#7146)
  • Create trait collection.SeqMap (#7954)
  • License change:
  • The license was changed to Apache 2.0 (#7306)
  • Language changes:
  • Accept underscore as numeric literal separator (#6989)
  • Eta-expand 0-arity method if expected type is Function0 (#7660)
  • x op () now parses as x.op(()) not x.op() (#7684)
  • More precise inference for overloaded methods when arguments types align (#7631)
  • Disallow repeated param except in method signature (#7399)
  • By-name implicits: Align detection of implicit recursion with the SIP (#7368)
  • Enforce explicit return type for macros (#6942)
  • Compiler changes:
  • Extension methods of overloads are themselves overloaded (#7896)
  • Emit mixin forwarders as bridges to avoid needing generic signatures (#7843)
  • Upgrade to ASM 7 for improved JDK 12 compat (#7384)
  • Make object fields static, and move post-super init to clinit (#7270)
  • More capable inliner (#7133)
  • Usability: compiler suggests possible names in NotAMemberError (#6711)
  • Compiler option changes:
  • Replace -warn-option with -Woption (#7908)
  • Promote -deprecation to -Xlint:deprecation (#7714)
  • Deprecate -Xfuture (#7328)
  • Remove -Xmax-classfile-length; hard-code to 240 (#7497)
  • Concurrency changes:
  • Significant performance improvements to Future (#7663)
  • Making the global EC a BatchedExecutor (performance) (#7470)
  • Add synchronous ("parasitic") ExecutionContext (#7784)
  • Standard library changes:
  • Restore and use linesIterator to avoid conflict with JDK 11's String.lines (#7269)
  • Replace Cloneable/Serializable traits with type aliases (#6729)
  • Provide a simple string matcher as the dual of the simple string interpolator (#7387)
  • Introduce andThen overload which combines two partial functions (#7263)
  • Converters among optional Functions, PartialFunctions and extractor objects (#7111)
  • Add IterableOps#tapEach method (#7124)
  • Change Using to implement the loan pattern (#7468)
  • ControlThrowable never suppresses (#7413)
  • Deprecations and linting:
  • Make postfixOps syntax an error (not just a warning) unless the feature is explicitly enabled (#6831)
  • Deprecate symbol literals (#7395)
  • Deprecate Unicode arrows ⇒, ← and → (#7540)
  • Deprecate Proxy (#7880)
  • Deprecate 1l and lint 0755 (#7685)
  • Deprecate usecase scaladoc tag (#7462)
  • Deprecate Channel,SyncChannel,SyncVar and DelayedLazyVal (#7410)
  • Deprecate scala.compat.Platform (#7423)
  • Deprecate universal Equiv (#7414)
  • Annotation unused to suppress warnings (#7623)
  • Allow suppressing value-discard warning via type ascription to Unit (#7563)
  • Other changes:
  • For more details, see merged PRs and closed bugs.
  • See also the notes for the previous milestones: M5, M4, M3, M2, M1.
  • Compiler performance in 2.13 is 5-10% better than 2.12. The integration of the new collections library shows up in the performance graph as a nice improvement.

New in Scala 2.12.8 (Apr 8, 2019)

  • This release fixes two regressions that appeared in 2.12.7:
  • Don't reject views with result types which are TypeVars (#7295)
  • Don't emit static forwarders (which simplify the use of methods in top-level objects from Java) for bridge methods (#7469)
  • The second fix is not binary compatible: the 2.12.8 compiler omits certain methods that are generated by earlier 2.12 compilers. However, we believe that these methods are never used and existing compiled code will continue to work. See the pull request description for more details.
  • Further highlights of this release:
  • The license was changed to Apache v2.0 (#7314)
  • Improved inference of parameter types for eta-expansion (#7340)
  • Emit detailed compiler trace under -Yprofile-trace (#7364)
  • Make the compiler output deterministic under incremental compilation (#7203)

New in Scala 2.12.7 (Sep 28, 2018)

  • Main highlights of this release:
  • Add Scaladoc markdown tables (#6043)
  • Fix equality of WrappedArray.ofRef (for Spark, #7156)
  • Numerous compiler performance improvements (#7067, #6696, #7147)
  • Improve performance of HashMaps, Any.## (#7265)
  • Further highlights:
  • Improved Java 9+ support (#7089 ASM 6.2, #7240 Un-deprecate linesIterator)
  • Support @Repeatable Java annotations (#6846)
  • Support cancellation of batch compilation (#6479)

New in Scala 2.13.0 M5 (Aug 28, 2018)

  • Here's the biggest additional collections changes since M4:
  • The new CHAMP-based HashMap and HashSet implementations are now the default (#7074)
  • Added immutable maps that maintain insertion order (VectorMap/SeqMap) (#6854)
  • A LazyList's empty-or-not status is now lazy too (#7000)
  • Variables bound in pattern matches by the x @ _* syntax are now typed scala.Seq (immutable); name-based pattern matching has changed to enable this (#7068)
  • Arrays passed as varargs are now defensively copied (#6970)
  • Offer stronger guarantees under the Java Memory Model for List and Vector (using releaseFence) (#6425)
  • Iterator and collection companion objects now have an .unfold method (#6851)
  • Collections now have .lengthIs, .sizeCompare and .sizeIs methods (#6950, #6758)
  • Improved support for extension methods on collections via IsIterable et al (#6674)
  • Now deprecated: .zipped (#7025), .filterKeys and .mapValues (#7014), symbolic methods with multiple arguments (#6719)
  • Language and compiler changes:
  • Compiler output is now deterministic, for reproducible builds (scala-dev#405)
  • Support by-name implicits with recursive dictionaries (#6050)
  • Better typing for overloaded higher-order methods (#6871)
  • Improved compiled times by more aggressively pruning polymorphic implicits during search (#6580)
  • Explicit imports now shadow locally defined identifiers (#6589)
  • Mixin fields with trait setters are no longer JVM final (#7028)
  • Library additions and changes:
  • Updated & revised Future and Promise implementation (#6610)
  • Added scala.util.Using, for automatic resource management (#6907)
  • Added Option-returning methods (e.g. toIntOption) for parsing literals (#6538)
  • Case classes and other Products now have productElementNames and productElementName methods (#6972
  • Left and Right now have .withRight and .withLeft methods for upcasting the other type parameter (#7011)
  • Added tap and pipe methods, for chaining operations, available via import scala.util.chaining._ (#7007)
  • Added total orderings for Float and Double (#6410)
  • String-building using + on non-String types is now deprecated (#6315, #6755)
  • Projections on Either are now deprecated (#6682)
  • PartialFunction.fromFunction replaces PartialFunction.apply (#6703)
  • Support implicitNotFound on parameters (#6340)
  • Environment and compiler option changes:
  • Added -Yimports for implicit preamble imports (#6764)
  • Support JEP 293 style long command-line options (#6499)
  • The script runner no longer uses the fsc compilation daemon by default (#6747)
  • Removed -Yrepl-sync (#6626)

New in Scala 2.12.6 (Apr 28, 2018)

  • Macros work again when compiling on Java 9 or 10, fixing 2.12.5 regression (PR #6446)
  • Deprecate floating-point Ranges (PR #6550)
  • Update to JLine 2.14.6 for better Emacs integration (PR #6478)
  • Add a completions command to REPL for better Emacs integration (PR #6379)

New in Scala 2.12.5 (Mar 22, 2018)

  • Main highlights of this release:
  • When running the compiler on Java 9 or higher, the new -release N flag changes the compilation classpath to match the JDK version N. This works for the JDK itself and for multi-release JARs on the classpath. Details in the PR: https://github.com/scala/scala/pull/6362.
  • With the new -Ybackend-parallelism N compiler flag, the backend can now run bytecode serialization, classfile writing and method-local optimizations (-opt:l:method) in parallel on N threads. (thanks @mkeskells!) PR: https://github.com/scala/scala/pull/6124.
  • The raw"" and s"" string interpolators are now intercepted by the compiler to produce more efficient bytecode. PR: https://github.com/scala/scala/pull/6093.
  • The -Ycache-plugin-class-loader and -Ycache-macro-class-loader flags enable caching of classloaders for compiler plugins and macro definitions. This can lead to significant performance improvements. PRs: https://github.com/scala/scala/pull/6412, https://github.com/scala/scala/pull/6314. (thanks @xeno-by and @jvican!)
  • Further highlights:
  • The apply method on the PartialFunction companion object is now deprecated. PR: https://github.com/scala/scala/pull/6005.
  • Scala JARs (library, reflect, compiler) now have an Automatic-Module-Name attribute in their manifests. PR: https://github.com/scala/scala/pull/6395.
  • Enabling unused warnings now leads to fewer false positives. (thanks @som-snytt!) PR: https://github.com/scala/scala/pull/6190.
  • Explicit eta-expansion (foo _) of a nullary method no longer gives a deprecation warning. PR: https://github.com/scala/scala/pull/6177.

New in Scala 2.13.0 M2 (Jul 31, 2017)

  • Significant changes since 2.13.0-M1:
  • #5903: The REPL is undergoing renovations and features better positioning of errors, a cleaner internal implementation, multi-line editing and syntax highlighting.

New in Scala 2.12.3 (Jul 28, 2017)

  • Changes:
  • Compiler performance has improved significantly and is now automatically benchmarked after each change.
  • A new optimizer setting -opt-inline-from limits the classes from which the inliner will copy code. scalac -opt-inline-from:help provides detailed help.
  • The presentation compiler has improved support for implicit macros, which should improve the experience with libraries based on Shapeless. It also has better support for code completion for dependently typed methods.
  • Further significant changes since 2.12.2 include:
  • #5978 Avoid calling static initializers when reflecting on Java classes
  • #5964 New setting -opt-inline-from to control where to inline from
  • #5931 Upgrade to jline 2.14.4
  • #5880 bundle newer scala-parser-combinators (1.0.5->1.0.6)
  • #5879 -Xlint:unused -Ywarn-unused is intuitive
  • #5848 add per-phase profiling to scalac

New in Scala 2.13.0 M1 (Jun 10, 2017)

  • Highlights:
  • #5603: The parallel collections are now a separate module. There are instructions on the linked page for adding the dependency to your build.
  • #5790: The following modules are no longer included in the distribution: scala-swing, scala-parser-combinators. (They remain available from Maven Central.) We also no longer build or publish scala-library-all.jar.
  • #5683: Remove deprecated stuff from Predef, scala._, scala.runtime
  • #5698: Eliminate non-matching overloads early for partial function literals
  • #5548: Added Java 1.6. and 1.8 java.lang.Math methods into scala.math package (scala/bug#9813)
  • #5830: A number of internal dependencies were cut to prepare for the creation of additional modules. (see also scala/scala-dev#323)

New in Scala 2.12.1 (Dec 6, 2016)

  • Fixed issues:
  • #5516 Improved runtime speed for Vector, restoring previous performance
  • #5509 SI-10032 Fix code gen with returns in nested try-finally blocks
  • #5482 Fix 2.12 regression, backend crash: Cannot create ClassBType from non-class symbol; also fix SI-7139
  • #5469 SI-10020 SI-10027 Scaladoc: keep Java comment scanning stack-friendly
  • #5376 Make -Xexperimental features available separately
  • #5284 SI-7046 partial fix to knownDirectSubclasses for reflection users and macro authors
  • #5410 Upgrade to scala-xml 1.0.6

New in Scala 2.12.0 (Nov 4, 2016)

  • This release ships with a powerful new optimizer. Many more (effectively) final methods, including those defined in objects and traits, are now inlined. As well, closure allocations, dead code and box/unbox pairs are eliminated more effectively.
  • The Scala 2.12 compiler has been completely overhauled to make use of the new VM features available in Java 8:
  • A trait compiles directly to an interface with default methods. This improves binary compatibility and Java interoperability.
  • Scala and Java 8 interop is also improved for functional code, as methods that take functions can easily be called in each direction using lambda syntax. The FunctionN classes in Scala’s standard library are now Single Abstract Method (SAM) types, and all SAM types are treated uniformly – from type checking until code generation (no class file is generated for lambdas, and invokedynamic is used instead).

New in Scala 2.12.0 M5 (Jun 30, 2016)

  • Notable changes:
  • #5251: concrete trait methods are compiled to a static method (in the interface classfile) containing the actual implementation, and a default method forwards that to the static one.
  • #5085: classes extending traits no longer get mixin forwarders (in most cases), the JVM picks the correct default method.
  • #5102 adds partial unification of type constructors (behind -Ypartial-unification) and fixes SI-2712. Thanks @milessabin!
  • The optimizer now listens to -opt (instead of -Yopt)
  • SI-9390: local methods that don’t capture this are emitted as static to prevent capturing the outer instance in lambdas.

New in Scala 2.12.0 M4 (Apr 13, 2016)

  • New features:
  • With M4, we consider 2.12.x feature complete. Please try it out while we still have time to fix any regressions in M5! For the next milestone, we’ll focus on addressing any issues discovered with M4, overall robustness and polish, and some smaller improvements that are less likely to cause regressions or source incompatibilities. For RC1, we will try to remain binary compatible with M5, and we won’t risk regressions except for the most critical bugs.
  • Trait compiles to an interface:
  • With Java 8 allowing concrete methods in interfaces, Scala 2.12 is able to compile a trait to a single interface. Before, a trait was represented as a class that held the method implementations and an interface. Note that the compiler still has quite a bit of magic to perform behind the scenes, so that care must be taken if a trait is meant to be implemented in Java. (Briefly, if a trait does any of the following its subclasses require synthetic code: defining fields, calling super, initializer statements in the body, extending a class, relying on linearization to find implementations in the right super trait.)
  • Java 8-style lambdas:
  • Scala 2.12 emits closures in the same style as Java 8, whether they target a FunctionN class from the standard library or a user-defined Single Abstract Method type. The type checker accepts a function literal as a valid expression for either kind of “function-like” type (built-in or SAM). This improves the experience of using libraries written for Java 8 in Scala.
  • For each lambda the compiler generates a method containing the lambda body, and emits an invokedynamic that will spin up a lightweight class for this closure using the JDK’s LambdaMetaFactory.
  • Compared to Scala 2.11, the new scheme has the advantage that, in most cases, the compiler does not need to generate an anonymous class for each closure. This leads to significantly smaller JAR files.
  • New back end:
  • Scala 2.12 standardizes on the “GenBCode” back end, which emits code more quickly because it directly generates ASM bytecode from Scala compiler trees, while the previous back end used an intermediate representation called “ICode”. The old back ends (GenASM and GenIcode) have been removed (#4814, #4838).
  • New bytecode optimizer:
  • The GenBCode back end includes a new inliner and bytecode optimizer. The optimizer is enabled using the -Yopt:l:classpath compiler option. Check -Yopt:help to see the full list of available options for the optimizer.
  • As of M4, the following optimizations are available:
  • Inlining final methods, including methods defined in objects and final methods defined in traits
  • If a closure is allocated and invoked within the same method, the closure invocation is replaced by an invocations of the corresponding lambda body method
  • Dead code elimination and a small number of cleanup optimizations
  • Box/unbox elimination #4858
  • The work on the new optimizer is still ongoing. You can track it in the scala-dev repository issue tracker.
  • Breaking changes:
  • SAM types
  • As of #4971, we treat Single Abstract Method types in the same way as our built-in FunctionN classes. This means overloading resolution has more contenders to choose from, making type inference less effective. Here’s an example:
  • ```scala class C[V] { def sort(cmp: java.util.Comparator[V]): C[V] = ??? def sort(cmp: (V, V) => Int): C[V] = sort( new java.util.Comparator[V] { def compare(a: V, b: V): Int = cmp(a, b) }) }
  • (new C[Int]) sort (_ - ) // error (new C[Int]) sort (( - _): java.util.Comparator[Int]) // ok (new C[Int]) sort ((a: Int, b: Int) => a - b) // ok ```
  • The first attempt fails because the type checker cannot infer the types for _ - _’s arguments anymore. Type inference in this scenario only works when we can narrow the overloads down to one before type checking the arguments the methods are applied to. When a function is passed as an argument to an overloaded method, we do this by considering the “shape” of the function (essentially, its arity). Now that Comparator[?] and (?, ?) => ? are both considered functions of arity two, our clever scheme breaks down and the programmer must either select an overload (second application) or make the argument types explicit (last application, which resolves to the Function2 overload).
  • Finally, implicit conversion of SAM types to Function types won’t kick in anymore, since the compiler does this conversion itself first:
  • ```scala trait MySam { def apply(x: Int): String }
  • implicit def unused(fun: Int => String): MySam = new MySam { def apply(x: Int) = fun(x) }
  • // uses sam conversion, not the unused implicit val sammy: MySam = _.toString ```
  • Changed syntax trees (affects macro and compiler plugin authors)
  • PR #4794 changed the syntax trees for selections of statically accessible symbols. For example, a selection of Predef no longer has the shape q"scala.this.Predef" but simply q"scala.Predef". Macros and compiler plugins matching on the old tree shape need to be adjusted.

New in Scala 2.11.8 (Mar 9, 2016)

  • Significant changes since 2.11.7 include:
  • The Scala REPL now has robust and flexible tab-completion (details below)
  • An assortment of bugs have been fixed
  • Compared to 2.11.7, this release resolves 44 issues. Merged 175 pull requests.
  • New tab-completion in the Scala REPL:
  • The implementation of tab-completion in the Scala REPL has been rewritten and now uses the same infrastructure as for example Scala IDE and ENSIME.
  • There are a number of improvements:
  • Reliable completion, also in partial expressions and syntactically incorrect programs: try class C { def f(l: List[Int]) = l.
  • CamelCase completion: try (l: List[Int]).rro, it expands to (l: List[Int]).reduceRightOption
  • Show desugarings performed by the compiler by adding //print: try for (x Boolean): (List[Int], List[Int])

New in Scala 2.12.0 M3 (Oct 9, 2015)

  • The REPL received a robust and flexible implementation of tab-completion (details below) - a fruitful collaboration between @som-snytt and @retronym
  • The @implicitAmbiguous annotation allows customizing the error message when an implicit search finds multiple ambiguous values (details below) - thanks @puffnfresh!
  • Enabling -Ywarn-unused-import now correctly warns about unused imports that were considered but discarded during an implicit search - thanks @som-snytt!
  • The optimizer now attempts to inline invocations of higher-order methods if the argument function is statically known, eliminating polymorphic callsites. (This work will be refined further in later milestones.)
  • The standard library no longer contains a clone of Java’s fork/join library, but uses the one bundled in Java 8

New in Scala 2.12.0 M2 (Aug 21, 2015)

  • NEW BACKEND:
  • Scala 2.12 enables the “GenBCode” backend by default.
  • The new backend is more efficient than the default backend of Scala 2.11, because it directly generates ASM bytecode from Scala compiler trees, while the previous backend used an intermediate representation called “ICode”.
  • JAVA 8 STYLE CLOSURE CLASSES:
  • Scala 2.12 emits closures in the same style as Java 8.
  • For each lambda the compiler generates a method containing the lambda body. At runtime, this method is passed as an argument to the LambdaMetaFactory provided by the JDK, which creates a closure object.
  • Compared to Scala 2.11, the new scheme has the advantage that the compiler does not generate an anonymous class for each lambda anymore. This leads to significantly smaller JAR files.
  • LAMBDA SYNTAX FOR SAM TYPES (EXPERIMENTAL):
  • As of M2, this feature is not yet on by default. You can enable it with the -Xexperimental compiler option.
  • When the option is enabled, then similar to Java 8, Scala 2.12 allows instantiating any type with one single abstract method by passing a lambda. This improves the experience of using libraries written for Java 8 in Scala.
  • This feature was also available in Scala 2.11, also via -Xexperimental.
  • NEW BYTECODE OPTIMIZER:
  • The GenBCode backend includes a new inliner and bytecode optimizer. The optimizer is enabled using the -Yopt:l:classpath compiler option. Check -Yopt:help to see the full list of available options for the optimizer.
  • As of M2, the following optimizations are available:
  • Inlining final methods, including methods defined in objects and final methods defined in traits
  • If a closure is allocated and invoked within the same method, the closure invocation is replaced by an invocations of the corresponding lambda body method
  • Dead code elimination and a small number of cleanup optimizations

New in Scala 2.11.7 (Jun 25, 2015)

  • Highlights:
  • Exhaustivity checking for pattern matching is now much snappier.
  • A 300x more embeddable Scala REPL, brought to you by a team effort with Apache Spark.
  • Scala also

New in Scala 2.11.6 (Mar 20, 2015)

  • We fixed a cross-site scripting vulnerability in Scaladoc’s JavaScript. Many thanks to @todesking for discovering this, suggesting a fix, and for delaying disclosure until this release! This bug could be used to access sensitive information on sites hosted on the same domain as Scaladoc-generated documentation. All previous versions of Scaladoc are affected (Scala 2.10.5 includes the fix as well). We do recommend, as a general precaution, to host Scaladoc documentation on its own domain.
  • SI-9089 repl is now much less crash-and-burny when calling a function (which turns out to be a common thing people do in a REPL). Also, apologies to the author of SI-9022, who reported this before the bug was discovered and you had to wait in line for like three hours on a Tuesday afternoon. Or, maybe, that honor should go to the enigmatic dk14.
  • SI-8759 no need to enter almost half the konami code to enter a right square bracket in the REPL (via jline 2.12.1). Thank you for implementing the jline fix, @michael72, and kudos to @jdillon and @trptcolin for cutting a new jline release just for us!

New in Scala 2.11.5 (Jan 15, 2015)

  • HIGHLIGHTS:
  • heathermiller’s SI-6502 Reenables loading jars into the running REPL
  • mpociecha’s The alternative, flat representation of classpath elements
  • gbasler’s Avoid the ‘CNF budget exceeded’ exception via smarter translation into CNF
  • adriaanm’s SAMmy: eta-expansion, overloading, existentials
  • A great number of documentation improvements – thank you (and, to those appearing for the first time in our release notes, welcome!): @kanielc, @lymia, @stevegury, @vigdorchik, @gourlaysama, @ichoran, @retronym, @xuwei-k, @dickwall, @phaller.
  • FIXED ISSUES:
  • Bug SI-8927: Warning on every Scala compile: "POM for 'biz.aQute:bndlib:pom:1.43.0:compile' is invalid."
  • Bug SI-8966: In Scalac.scala jvm-1.8 is not an allowed target for the ant tool
  • Bug SI-8783: MultiMap documentation for addBinding is incorrect, or there is a bug
  • Improvement SI-9043: ArrayBuffer.insert and insertAll are very slow
  • Bug SI-8924: List iterator holds reference to list's head
  • Bug SI-6519: PagedSeq is not lazy enough
  • Bug SI-8932: many dropRight/takeRight implementations are wrong
  • Bug SI-8754: linear seqs aren't
  • Bug SI-8538: BufferedSource not that usable without deprecated Position
  • Bug SI-8951: SeqView and StreamView stack-overflow on negative index after flatMap
  • Bug SI-8910: scala.collection.mutable.BitSet uses exponentially growing memory under certain conditions.
  • Bug SI-8695: SeqLike has either a buggy or highly unintuitive implementation of combinations
  • Bug SI-7019: value class compiler crash with private[this]
  • Bug SI-8931: Class Signature attribute inconsistent with interfaces
  • Bug SI-7965: Support for @PolymorphicSignature, required for using MethodHandles from Scala
  • Improvement SI-7444: Improvement to ExecutionContext ScalaDoc
  • Bug SI-8995: Scala documentation link emitted by compiler returns a 404 (scala.xml)
  • Bug SI-8948: Any/AnyRef/Null scaladoc MIA
  • Bug SI-7988: scala.collection.JavaConverters spelling mistake
  • Improvement SI-8916: Clean up unused imports, values and variables
  • Bug SI-8934: quasiquote unapply macro gives spurious "wrong number of subpatterns" under presentation compiler
  • Bug SI-8947: New ambiguous implicits error in Scala 2.11.4 (works in 2.11.2) with macros
  • Bug SI-9044: Interface List Reversed in Classfile
  • Bug SI-6541: compiler infers non-wildcard existential type for case-module-unapply
  • Bug SI-8933: Unexpected java.lang.IllegalAccessError thrown when accessing symbols in traits with self type
  • Bug SI-8502: graceless failure of stub symbols in erasure phase
  • Bug SI-6613: fsc crashes every other time on inner Java enums
  • Bug SI-7596: type error on separate compilation (pickler foiled by path dependent parent type in the presence of overloading)
  • Bug SI-9018: Compiler hangs when match returns different types
  • Bug SI-7750: Spurious scala.language.existentials warning triggered by isInstanceOf in LazyCombiner
  • Bug SI-3439: consider implicits constructor params in super-ctor call
  • Bug SI-8967: Scala scripts can throw JVM error if extra files placed in SCALA_HOME/lib
  • Bug SI-8893: exponential compiler performance with nested pattern matches under tailrec transform
  • Bug SI-5938: Get "Duplicate method name&signature" on recompile only
  • Bug SI-5217: I expect private constructor's parameter type is in private scope, but scalac does not allow that.
  • Bug SI-9015: Nuance errors for zero-led literals
  • Bug SI-8960: Anonymous Functions don't have a SerialVersionUID anymore since 2.11.1
  • Bug SI-7683: Can't stop after phases between parser and typer
  • Bug SI-8965: Warning indicates Any and Any are unrelated
  • Bug SI-8711: Scala version's unparse is unsightly
  • Bug SI-9030: BoxesRunTime.equalsNumChar should be public
  • Bug SI-8970: hashCode of BigDecimal and Double do not match in 2.11
  • Bug SI-8977: scalap jar file contains duplicate entry
  • Bug SI-8999: OutOfMemoryError in pattern analysis
  • Bug SI-8962: Covariant tparam appearing multiple times receives wrong inferred type in patmat RHS
  • Bug SI-7459: Pattern Matcher substitution doesn't handle references in singleton types
  • Bug SI-8597: missing unchecked warning for `case _: Some[AbstractType]`
  • Bug SI-9003: name-based pattern matching could lead to undefined behaviour in runtime
  • Bug SI-9011: ClassCastException: Trees$DocDef cannot be cast to Trees$ClassDef
  • Bug SI-8943: Spurious errors in case classes with private vals
  • Bug SI-8941: namer to typer handoff of synthetic implicit class factory method breaks under presentation compiler if interrupted
  • Bug SI-8875: showCode does not print class constructor modifiers
  • Bug SI-8946: scala.reflect.runtime.ThreadLocalStorage$MyThreadLocalStorage is forever retaining references to threads
  • Bug SI-6502: :cp does not work
  • Bug SI-8898: REPL `:javap -fun` broken under `-Ydelambdafy:method`
  • Improvement SI-8922: REPL verbose load
  • Bug SI-4950: val 1 = 2 and other value declarations that don't declare any values confuse the REPL
  • Improvement SI-9006: Scaladoc companion and package links hard for newcomers to find
  • Bug SI-5730: Constructor listing in ScalaDoc ignore "Visibility" setting
  • Bug SI-6626: @throws tags do not create clickable links
  • Bug SI-5583: REPL crasher in specialize, "scala.reflect.internal.Types$TypeError: method foreach$mVc$sp: (f: Int => Unit)Unit does not take type parameters"
  • Bug SI-8871: call to specialized method fails second time under fsc or REPL
  • Bug SI-6856: trivial wrong(old) comment
  • Bug SI-8534: compiler crash rather than message "XXZ is not an enclosing class" in erroneous code
  • Bug SI-7602: method defined twice + lub = AssertionError
  • Bug SI-8449: Typechecker doesn't allow a Java raw type over a Scala type
  • Bug SI-5091: Unexpected "recursive value needs type" error
  • Bug SI-9008: Higher-kinded existentials are broken
  • Bug SI-5454: Spurious illegal inheritance error & implicit resolution failure with parent class implicit constructor argument
  • Bug SI-9027: Semicolon is not inferred after a XML node sequence literal
  • Bug SI-8253: xml parsing blindly interprets spliced method call in xmlns attribute as xml.Text("uri")
  • Improvement SI-8310: sams could play nicer with overloading
  • Bug SI-8950: SeqView and StreamView allow indexing out of a slice (and updating in!)
  • Bug SI-6051: Lazy modifier on a val causes its name to collide with a method's named arg

New in Scala 2.11.2 (Jul 25, 2014)

  • Highlights:
  • Several issues in the collections library were resolved, most notably equality on ranges (SI-8738).
  • The optimizer no longer eliminates division instructions that may throw an ArithmeticException (SI-7607).
  • The -Xlint compiler flag is now parameterized by individual warnings. This is intended to replace the -Ywarn-... options, for instance, -Xlint:nullary-unit is equivalent to -Ywarn-nullary-unit. Run scalac -Xlint:help to see all available options. Kudos to @som-snytt!
  • TypeTags and Exprs are now serializable (SI-5919).

New in Scala 2.11.0 (Apr 22, 2014)

  • This release contains all of the bug fixes and improvements made in the 2.10 series, as well as:
  • Collections:
  • Immutable HashMaps and HashSets perform faster filters, unions, and the like, with improved structural sharing (lower memory usage or churn).
  • Mutable LongMap and AnyRefMap have been added to provide improved performance when keys are Long or AnyRef (performance enhancement of up to 4x or 2x respectively).
  • BigDecimal is more explicit about rounding and numeric representations, and better handles very large values without exhausting memory (by avoiding unnecessary conversions to BigInt).
  • List has improved performance on map, flatMap, and collect.
  • See also Deprecation above: we have slated many classes and methods to become final, to clarify which classes are not meant to be subclassed and to facilitate future maintenance and performance improvements.
  • Modularization:
  • The core Scala standard library jar has shed 20% of its bytecode. The modules for xml, parsing, swing as well as the (unsupported) continuations plugin and library are available individually or via scala-library-all. Note that this artifact has weaker binary compatibility guarantees than scala-library – as explained above.
  • The compiler has been modularized internally, to separate the presentation compiler, scaladoc and the REPL. We hope this will make it easier to contribute. In this release, all of these modules are still packaged in scala-compiler.jar. We plan to ship them in separate JARs in 2.12.x.
  • Reflection, macros and quasiquotes:
  • Please see this detailed changelog that lists all significant changes and provides advice on forward and backward compatibility.
  • See also this summary of the experimental side of the 2.11 development cycle.
  • #3321 introduced Sprinter, a new AST pretty-printing library! Very useful for tools that deal with source code.
  • Back-end:
  • The GenBCode back-end (experimental in 2.11). See @magarciaepfl’s extensive documentation.
  • A new experimental way of compiling closures, implemented by @JamesIry. With -Ydelambdafy:method anonymous functions are compiled faster, with a smaller bytecode footprint. This works by keeping the function body as a private (static, if no this reference is needed) method of the enclosing class, and at the last moment during compilation emitting a small anonymous class that extends FunctionN and delegates to it. This sets the scene for a smooth migration to Java 8-style lambdas (not yet implemented).
  • Branch elimination through constant analysis #2214
  • Scala.js, a separate project, provides an experimental JavaScript back-end for Scala 2.11. Note that it is not part of the standard Scala distribution.
  • Be more Avian- friendly.
  • Compiler Performance:
  • Incremental compilation has been improved significantly. To try it out, upgrade to sbt 0.13.2 and add incOptions := incOptions.value.withNameHashing(true) to your build! Other build tools are also supported. More info at this sbt issue – that’s where most of the work happened. More features are planned, e.g. class-based tracking.
  • We’ve been optimizing the batch compiler’s performance as well, and will continue to work on this during the 2.11.x cycle.
  • Improve performance of reflection SI-6638
  • REPL:
  • The bytecode decompiler command, :javap, now works with Java 7 SI-4936 and has sprouted new options SI-6894 (Thanks, @som-snytt!)
  • Added command :kind to help to tell ground types from type constructors. #2340 (Thanks, George Leontiev and Eugene Yokota!)
  • The interpreter can now be embedded as a JSR-223 Scripting Engine SI-874. (Thanks, Raphael Jolly!)
  • Improved -Xlint warnings:
  • Warn about unused private / local terms and types, and unused imports.
  • This will even tell you when a local var could be a val.
  • Slimming down the compiler:
  • The experimental .NET backend has been removed from the compiler.
  • Scala 2.10 shipped with new implementations of the Pattern Matcher and the Bytecode Emitter. We have removed the old implementations.
  • Search and destroy mission for ~5000 chunks of dead code. #1648
  • The IDE received numerous bug fixes and improvements!
  • The Scala team and contributors fixed 613 bugs that are exclusive to Scala 2.11.0! We also backported as many as possible. With the release of 2.11, 2.10 backports will be dialed back.

New in Scala 2.11.0 RC 4 (Apr 16, 2014)

  • Fixed two blocker bugs, and admitted some final polish for macros and quasiquotes.
  • Fixed bugs:
  • SI-4577 Compile x match { case _ : Foo.type => } to Foo eq x, as specified. It used to be Foo == x (without warning). If that's what you meant, write case Foo =>.
  • SI-7475 Improvements to access checks, aligned with the spec (see also the linked issues). Most importantly, private members are no longer inherited. Thus, this does not type check: class Foo[T] { private val bar: T = ???; new Foo[String] { bar: String } }, as the bar in bar: String refers to the bar with type T. The Foo[String]'s bar is not inherited, and thus not in scope, in the refinement. (Example from SI-8371, see also SI-8426.)
  • SI-6809 Case classes without a parameter list are no longer allowed.
  • SI-7618 Octal number literals no longer supported.
  • SI-7296 Case classes with > 22 parameters are now allowed.
  • SI-3346 Implicit arguments of implicit conversions now guide type inference.
  • SI-6240 Thread safety of reflection API.
  • #3037 Experimental support for SAM synthesis.
  • #2848 Name-based pattern-matching.
  • SI-6169 Infer bounds of Java-defined existential types.
  • SI-6566 Right-hand sides of type aliases are now considered invariant for variance checking.
  • SI-5917 Improve public AST creation facilities.
  • SI-8063 Expose much needed methods in public reflection/macro API.
  • SI-8126 Add -Xsource option (make 2.11 type checker behave like 2.10 where possible).

New in Scala 2.10.4 RC 3 (Feb 28, 2014)

  • Improvements:
  • Eta-expansion too conservative wrt dependent method type
  • Bug fixes:
  • backport fix for exponential-time variance validation to 2.10.x
  • Non-deterministic type errors and non-termination of scalac
  • ClassFormatError in pattern of code use by Slick
  • presentation compiler reports false positive: illegal cyclic reference involving package
  • regression in trait superaccessors with overloading
  • Scope completion marks vars and vals accessible through the getters as non-accessible
  • include required license texts
  • spurious errors / crashes when pattern matching meets super
  • uncaught exception during compilation: "Could not find proxy for ..."
  • Presentation compiler fails to resolve implicit defined in package object
  • askTypeAt returns overloaded types
  • When falling back to adapt without an expected type, use of resetAttrs leads to unhygenic rebinding
  • Completions not found for members imported from an object
  • :javap generates "Could not find class bytes ..." error
  • MSI installer for Windows sets path variable incorrectly
  • hang in inliner with recursive higher-order method, separate compilation
  • compiler freezes when typing an eta expansion involving a type constructor
  • swing.Publisher calls PartialFunction listeners for undefined values
  • Call of updateDynamic results in NoPosition error
  • Call of applyDynamicNamed results in NoPosition error
  • Wrong position for applyDynamic call
  • Wrong Tree returned by `askTypeAt` (wrong hyperlink)
  • Be defensive when calling toString() on object in MatchError.getMessage
  • Compiler fails strangely on some higher-order kinds
  • don't issue deprecation warnings for synthetic TypeTrees
  • Future.fallbackTo does not preserve first Future's Failure per documentation
  • lambdalift crashes when Block in constructor-argument position requires outer() access
  • Optimizer leaves references to classes that have been eliminated by inlining
  • Wrong position for selectDynamic call
  • Class file is broken (Vaadin)
  • Backport tools.jar robustness for REPL, fail loud
  • ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider scala.tools.nsc.interpreter.IMain$Factory not found

New in Scala 2.10.4 RC 2 (Feb 5, 2014)

  • Bug fixes:
  • presentation compiler reports false positive: illegal cyclic reference involving package
  • regression in trait superaccessors with overloading
  • Scope completion marks vars and vals accessible through the getters as non-accessible
  • include required license texts
  • Non-deterministic type errors and non-termination of scalac
  • backport fix for exponential-time variance validation to 2.10.x
  • ClassFormatError in pattern of code use by Slick
  • uncaught exception during compilation: "Could not find proxy for ..."
  • spurious errors / crashes when pattern matching meets super
  • Presentation compiler fails to resolve implicit defined in package object
  • lambdalift crashes when Block in constructor-argument position requires outer() access
  • don't issue deprecation warnings for synthetic TypeTrees
  • :javap generates "Could not find class bytes ..." error
  • When falling back to adapt without an expected type, use of resetAttrs leads to unhygenic rebinding
  • Wrong Tree returned by `askTypeAt` (wrong hyperlink)
  • Completions not found for members imported from an object
  • Call of updateDynamic results in NoPosition error
  • Call of applyDynamicNamed results in NoPosition error
  • Wrong position for selectDynamic call
  • Wrong position for applyDynamic call
  • Class file is broken (Vaadin)
  • compiler freezes when typing an eta expansion involving a type constructor
  • Be defensive when calling toString() on object in MatchError.getMessage
  • hang in inliner with recursive higher-order method, separate compilation
  • askTypeAt returns overloaded types
  • swing.Publisher calls PartialFunction listeners for undefined values
  • MSI installer for Windows sets path variable incorrectly
  • Backport tools.jar robustness for REPL, fail loud
  • ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider scala.tools.nsc.interpreter.IMain$Factory not found
  • Improvements:
  • Eta-expansion too conservative wrt dependent method type

New in Scala 2.11.0 M8 (Jan 30, 2014)

  • Fix bug with super-accessors / dependent types
  • Backport variance validator performance fix
  • Expand the comment with a more detailed TODO
  • Repair symbol owners after abandoned named-/default-args
  • Binary compat. workaround for erasure bug SI-7120
  • Test case for already-fixed crasher
  • codifies the state of the art wrt SI-8104
  • Fix BrowserTraverser for package objects
  • Test demonstrating SI-8085
  • Revert "SI-6426, importable _."
  • Fix inliner cycle with recursion, separate compilation
  • Make overloading, defaults restriction PolyType aware
  • HashSet should implement union
  • removing defensive code made obsolete by existing fix to SI-5604
  • overzealous assert in GenBCode
  • Puts SI-7335 fix behind a source level flag
  • Puts SI-6899 fix under a source level flag
  • Add a '-Xsource' flag allowing compilation in e.g. 2.10 mode
  • Range bug: Wrong result for Long.MinValue to Long.MaxValue by Int.MaxVal
  • fix anonymous functions with placeholders
  • HashMap should implement filter
  • Set should implement filter
  • StringContext.f docs update
  • ImmutableSetFactory.empty results in StackOverflowError
  • Quasi-comprehensive BigDecimal soundness/correctness fix.
  • prevent possible SOE during Stream#flatten.
  • Remove misc. @deprecated elements
  • Refactor per code review
  • Carat => Caret
  • Unprintables in messages
  • Count lines by EOLs
  • Deprecate automatic () insertion in argument lists
  • Use Regex.quote
  • Add Regex.quote
  • unzip/unzip3 return wrong static type when applied to Arrays
  • Fix false "overrides nothing" for case class protected param
  • Implements specialized subsetOf for HashSet
  • Fix non-deterministic

New in Scala 2.10.3 (Oct 2, 2013)

  • Fixed:
  • MANIFEST.MF file for Scala sources
  • Don't execute internal callbacks on the user Executor
  • Enable test for Java 8 source parser under Java 8
  • Consider DEFAULTMETHOD when refchecking concreteness
  • Cast our way out of extended existential angst
  • Test case for Scaladoc on early initializers
  • avoid rejecting Scaladoc comments in early initializers
  • Rework MapLike#retains to account for desugaring change
  • Updates the instrumented version of ScalaRuntime.
  • Avoid init cycle between Predef, `package`, ScalaRuntime
  • REPL extended quest for tools
  • Bad tools fails loudly
  • Use a WeakHashSet for type uniqueness
  • Replace scala.reflect.internal.WeakHashSet
  • Derive type skolems at the ground level
  • Parser handles block-ending import
  • No ScriptEngine in 2.10 build
  • Harden against the shifting sands of System.getProperties
  • Account for class name compactification in reflection
  • More tests for cycles triggered by implicit search
  • A test case, five years adrift.
  • Exclude patmat synthetics from bounds checking
  • Remove diagnostic code for annotation error
  • Fix thread safety of FlagTranslation
  • Don't disambiguate type parameters of overloaded alts
  • Annot arg may refer to annotated class's member
  • Add @uncheckedBounds to the library
  • @uncheckedBounds, an opt-out from type bounds checking
  • Determinism for pattern matcher warnings
  • reflective packages now more consistent with scalac
  • tb.parse returns unpositioned trees
  • scala.bat honors -J and -D options.
  • Drop dummy param for synthetic access constructor
  • Fix a NPE in typing class constructors
  • Handle spaces in %COMSPEC% path in scala.bat.
  • Fix end position in PostfixSelect tree
  • clarifies the "macro overrides method" rule
  • Link flatMapped promises to avoid memory leaks
  • General test for spec version
  • Fix positions for reshaped tag materializers
  • typedAssign no longer expands lhs
  • Superaccessor lookup after specialization
  • Speculative fix for annotation binding error
  • Specialize methods in private scopes
  • Allow nesting of anonymous classes in value classes
  • Fixed phase ordering in specialization
  • ParTrieMap.foreach no longer crashes
  • Test case for pattern matcher + type alias bug
  • Fix bug at the intersection of DelayedInit and named args
  • Fix capture of free local vars in toolbox compiler
  • Fix runtime reflection involving ScalaLongSignature
  • Fix lookup of private[this] member in presence of self type.
  • ClassTag for value class aliases
  • Centralize and refine detection of `getClass` calls
  • Always use ForkJoin in Scala actors on ... ... Java 6 and above (except
  • Bad for expr crashes postfix
  • remove unneeded extra-attachement in maven deploy
  • Fix scala.util.Properties.isMac

New in Scala 2.11.0 M5 (Sep 30, 2013)

  • Pattern matcher: extractors became name-based thanks to @paulp
  • @adriaanm continues our modularization effort: scala.xml and scala.util.parsing live in separate repositories now
  • more bits of experimental backend based on ASM by @magarciaEPFL
  • improvements to stacktrace printing in REPL by @som-snytt and @qerub
  • clarification of Scala license

New in Scala 2.10.3 RC 2 (Sep 19, 2013)

  • NEW FEATURES AND IMPROVEMENTS:
  • Value Classes:
  • A class may now extend AnyVal to make it behave like a struct type (restrictions apply).
  • Implicit Classes:
  • The implicit modifier now also applies to class definitions to reduce the boilerplate of implicit wrappers.
  • String Interpolation:
  • val what = "awesome"; println(s"string interpolation is ${what.toUpperCase}!")
  • Futures and Promises:
  • Asynchronously get some JSON
  • Dynamic and applyDynamic:
  • x.foo becomes x.applyDynamic("foo") if x’s type does not define a foo, but is a subtype of Dynamic
  • Dependent method types:
  • def identity(x: AnyRef): x.type = x // the return type says we return exactly what we got
  • New ByteCode emitter based on ASM:
  • Can target JDK 1.5, 1.6 and 1.7
  • Emits 1.6 bytecode by default
  • Old 1.5 backend is deprecated
  • A new Pattern Matcher:
  • rewritten from scratch to generate more robust code (no more exponential blow-up!)
  • code generation and analyses are now independent (the latter can be turned off with -Xno-patmat-analysis)
  • Scaladoc Improvements:
  • Implicits (-implicits flag)
  • Diagrams (-diagrams flag, requires graphviz)
  • Groups (-groups)
  • Modularized Language features:
  • Get on top of the advanced Scala features used in your codebase by explicitly importing them.
  • Parallel Collections are now configurable with custom thread pools
  • Akka Actors now part of the distribution:
  • scala.actors have been deprecated and the akka implementation is now included in the distribution.
  • Performance Improvements:
  • Faster inliner
  • Range#sum is now O(1)
  • Update of ForkJoin library
  • Fixes in immutable TreeSet/TreeMap
  • Improvements to PartialFunctions
  • Addition of ??? and NotImplementedError
  • Addition of IsTraversableOnce + IsTraversableLike type classes for extension methods
  • Deprecations and cleanup:
  • Floating point and octal literal syntax deprecation
  • Removed scala.dbc
  • EXPERIMENTAL FEATURES:
  • Scala Reflection
  • Macros
  • FIXED:
  • Enable test for Java 8 source parser under Java 8
  • Consider DEFAULTMETHOD when refchecking concreteness
  • Cast our way out of extended existential angst
  • avoid rejecting Scaladoc comments in early initializers
  • Rework MapLike#retains to account for desugaring change
  • Updates the instrumented version of ScalaRuntime.
  • Avoid init cycle between Predef, `package`, ScalaRuntime
  • REPL extended quest for tools
  • Bad tools fails loudly
  • Use a WeakHashSet for type uniqueness
  • Replace scala.reflect.internal.WeakHashSet
  • Derive type skolems at the ground level
  • Parser handles block-ending import
  • No ScriptEngine in 2.10 build
  • Harden against the shifting sands of System.getProperties
  • Account for class name compactification in reflection
  • More tests for cycles triggered by implicit search
  • A test case, five years adrift.
  • Exclude patmat synthetics from bounds checking
  • Remove diagnostic code for annotation error
  • Fix thread safety of FlagTranslation
  • Don't disambiguate type parameters of overloaded alts
  • Annot arg may refer to annotated class's member
  • Add @uncheckedBounds to the library
  • @uncheckedBounds, an opt-out from type bounds checking
  • Determinism for pattern matcher warnings
  • reflective packages now more consistent with scalac
  • tb.parse returns unpositioned trees
  • scala.bat honors -J and -D options.
  • Drop dummy param for synthetic access constructor
  • Fix a NPE in typing class constructors
  • Handle spaces in %COMSPEC% path in scala.bat.
  • Fix end position in PostfixSelect tree
  • clarifies the "macro overrides method" rule
  • Link flatMapped promises to avoid memory leaks
  • General test for spec version
  • Fix positions for reshaped tag materializers
  • typedAssign no longer expands lhs
  • Superaccessor lookup after specialization
  • Speculative fix for annotation binding error
  • Specialize methods in private scopes
  • Allow nesting of anonymous classes in value classes
  • Fixed phase ordering in specialization
  • ParTrieMap.foreach no longer crashes
  • Test case for pattern matcher + type alias bug
  • Fix bug at the intersection of DelayedInit and named args
  • Fix capture of free local vars in toolbox compiler
  • Fix runtime reflection involving ScalaLongSignature
  • Fix lookup of private[this] member in presence of self type.
  • ClassTag for value class aliases
  • Centralize and refine detection of `getClass` calls
  • Always use ForkJoin in Scala actors on ... ... Java 6 and above (except
  • Bad for expr crashes postfix
  • remove unneeded extra-attachement in maven deploy
  • Fix scala.util.Properties.isMac

New in Scala 2.10.1 RC 1 (Feb 15, 2013)

  • Bug fixes:
  • unit value equality is broken when deserialized
  • checkinit build failure after SI-6387
  • java.lang.RuntimeException: no acc def buf for package interpolation
  • Memory leak caused by scala.reflect.internal.util.Statistics
  • scala now thinks every exception is polymorphic
  • java.lang.NoSuchFieldError: $outer when mixing Scala and Java
  • cannot reify existentially typed code
  • pattern matcher exhaustiveness warnings include impossible types
  • crashers in annotation argument handling in scaladoc
  • Insufficient task support detection mechanism chooses fails to choose ForkJoin even when available/supported
  • divergent implicit machinery prevents implicit macros from recursing
  • Implicit macros are broken
  • Fork Join's idle hands
  • check consistency of version numbers in build
  • f string interpolator no longer accepts literal %
  • by-name argument creates spurious type mismatch
  • spurious cyclic ref error with nested java class
  • Partest --show-log not showing compilation errors
  • Implicit value instances of inner class defined in superclass of package object don't resolve on import
  • ListMap produces incorrect exception message
  • NPE in parser in forScaladoc mode
  • spurious "scrutinee is incompatible with pattern type; found T.this.A, required T#A"
  • Compiler crashes when evaluating XML element followed by "()"
  • Interactive doc: allow to pass overridden symbols
  • Transpose on empty Array throws NoSuchElementException
  • Pattern matcher outer check generation fooled by type aliases
  • Bad range position for super type
  • Two crashers for reify/patmat
  • Type inference does not work on methods using dependent types and parameters with default value
  • regression in type inference
  • named/defaults crasher with sequence argument of the wrong type
  • language features fail to be found during mixin
  • :type doesn't understand Unit
  • "no-symbol does not have an owner" with Scala 2.10 (named args side effects on trees)
  • Passing a Function0 invocation to a call by name argument *should* create a new Function0 if the original Function0 is not stable
  • incorrect error message for missing annotation
  • Spurious test failure in t6223 because test assumes specific order of reflection values
  • scala.reflect.internal.Types$TypeError: ambiguous reference to overloaded definition
  • SQLiteDatabase cannot be closed in Android 4.0 or below devices, in apps built by Scala 2.10.x w/ Android 4.1 due to Scala 2.10.x bytecode problem.
  • Java parser incorrect tree
  • Import-renamed method can't be used as partially applied function
  • In-place silent type checking, adaptToMemberWithArgs, filter/withFilter => "erroneous or inaccessible type"
  • duplicate keys in SWITCH
  • path-dependent types and recursion => crash
  • memory leak in specialize
  • schtroumpfs crash type inference
  • (runtime.universe: api.Universe).typeTag[A] throws Error
  • Can not reify existential type alias when underlying is higher kinded type
  • Compiler throws IllegalArgumentException handling specialized method implementation
  • Java source parser does not follow Java rules for shadowing.
  • Compiler crashes when class is set to private of non-enclosing scope
  • resetLocalAttrs followed by typeCheck causes error
  • double definition error due to specialized constructor argument with default value
  • regression (since 2.9): pattern matcher chokes on invalid pattern with type parameter
  • scala.bat cannot handle space in paths
  • No compiler warning for valueClassInstance == value
  • pattern matcher - exhaustiveness check reports wrong warnings
  • Scaladoc parser crashes with a StackOverflow
  • images in ScalaDoc are doubled
  • Higher-kinded type alias may cause incorrect unreachable code warning
  • Logic of ThreadPoolConfig.useForkJoin causes test concurrent-stream.scala to randomly hang
  • "unreachable code" warning on reachable code
  • 'silent=false' is not working at c.inferImplicitValue
  • DivergentImplicit exception is thrown by c.inferImplicitValue even if silent is set to true
  • @annotation(typeOf[String]) crashes in pickler with AssertionError
  • ExecutionContext.prepare is not invoked by Future.apply
  • String interpolated parts get assigned with incorrect positions
  • Filtering classes no more works properly
  • The Collection API documentation is missing an example for transpose
  • FieldMirror.set should allow setting vals
  • Classfiles in the standard library are missing Sourcefile attribute
  • scaladoc for just src/reflect crashes
  • Dead code warning in case statement when throwing an exception returned by a method call
  • REPL corruption after ambiguous implicit error
  • Reflection: MissingRequirementError for top-level classes with escaped names
  • Constructor parameters become inaccessible in body if passed to base constructor argument in private [namespace] scope
  • Compiler crash during parsing because of `while` condition lacks parentheses
  • Misleading error message when trying to eta-expand method with more than 22 parameters
  • java.lang.AssertionError scaladoc'ing class with a Java annotation
  • supplementErrorMessage should swallow TypeError
  • Scaladoc throws next on empty iterator
  • non-sensible equality method doesn't account for overloading
  • Scaladoc: if the index is missing members under a letter, clicking the letter will yield 404
  • Improvements:
  • Add guides for new Scala 2.10.0 features to docs.scala-lang.org
  • Add section to published pom.xml for auto-scaladoc linking in sbt
  • Scaladoc for interactive: don't require doc settings
  • Test interactive documentation for more cases
  • f string interpolator does not support %n (platform line separator) specifier
  • Update bundled Fork/Join (JSR166)
  • allow pattern with identifier that would be stable if it wasn't for its volatile type

New in Scala 2.10.0 (Jan 4, 2013)

  • Value Classes:
  • A class may now extend AnyVal to make it behave like a struct type (restrictions apply).
  • Implicit Classes:
  • The implicit modifier now also applies to class definitions to reduce the boilerplate of implicit wrappers.
  • String Interpolation:
  • val what = "awesome"; println(s"string interpolation is ${what.toUpperCase}!")
  • Futures and Promises:
  • Asynchronously get some JSON: for (req

New in Scala 2.9.3 RC 1 (Dec 15, 2012)

  • SI-6536 Cleanup code around determining accessor requirement
  • SI-6536 Generates super accessors X.super[Y].blah when Y is a class
  • SIP-14 backport to 2.9.x
  • SI-6188 backport (ICodeReader wrongly ignored exception handlers)
  • SI-6692 pickle one more flag bit: EXISTENTIAL
  • SI-5958 This deserves a stable type - backport to 2.9.x
  • SI-5314 - CPS transform of return statement fails
  • SI-6384 - avoid crash due to optimization in 2.10 CPS plugin
  • Deprecated instrumentation API
  • Fixed SI-6505. Respond to ask calls by immediate failure even after compiler shutdown.
  • Fix for SI-6245 with workaround for SI-2296.
  • Overcame trait/protected/java limitation.
  • Helping Proxy equal itself.
  • Fixes SI-5632 (serialization of large HashTables)

New in Scala 2.10.0 RC3 (Nov 30, 2012)

  • Value Classes
  • Implicit Classes
  • String Interpolation
  • Futures and Promises
  • Parallel Collections are now configurable with custom thread pools
  • Dynamic Types no longer experimental
  • Improved Pattern Matcher
  • Modularized Language features
  • Scala Reflection (Experimental)
  • Macros (Experimental)
  • Addition of ??? and NotImplementedError
  • Addition of IsTraversableOnce + IsTraversableLike type classes for extension methods
  • New ByteCode emitter based on ASM:
  • Can target JDK 1.5, 1.6 and 1.7
  • Emits 1.6 bytecode by default
  • Old 1.5 backend is deprecated
  • Scaladoc Improvements:
  • Implicits (-implicits flag)
  • Diagrams (-diagrams flag, requires graphviz)
  • Groups (-groups)
  • Akka Actors now included in distribution:
  • Scala actors library deprecated in favor of Akka
  • Actors migration library included (version 1.0.0-RC2) to ease migration from Scala -> Akka
  • See the actors migration project for more information.
  • Deprecations and cleanup:
  • Floating point and octal literal syntax deprecation
  • Removal of scala.dbc
  • Performance Improvements:
  • Faster inliner
  • `Range#sum is now O(1)
  • Update of ForkJoin library
  • Fixes in immutable TreeSet/TreeMap
  • Improvements to PartialFunctions

New in Scala 2.10.0 RC2 (Nov 9, 2012)

  • New:
  • Value Classes
  • Implicit Classes
  • String Interpolation
  • Futures and Promises
  • Parallel Collections are now configurable with custom thread pools
  • New ByteCode emitter based on ASM
  • Dynamic Types no longer experimental
  • Improved Pattern Matcher
  • Modularized Language features
  • Scala Reflection (Experimental)
  • Macros (Experimental)
  • Scaladoc Improvements
  • Addition of ??? and NotImplemented Error
  • Addition of IsTraversableOnce + IsTraversableLike type classes for extension methods
  • Akka Actors now included in distribution:
  • Scala actors library deprecated in favor of Akka
  • Actors migration library included (version 1.0.0-RC2) to ease migration from Scala -> Akka
  • See the actors migration project for more information.
  • Deprecations and cleanup:
  • Floating point and octal literal syntax deprecation
  • Removal of scala.dbc
  • Performance Improvements:
  • Faster inliner
  • Range#sum is now O(1)
  • Update of ForkJoin library
  • Fixes in immutable TreeSet/TreeMap
  • Improvements to PartialFunctions

New in Scala 2.10.0 M7 (Aug 28, 2012)

  • Performance Improvements
  • Macros:
  • c.reify removed, use c.universe.reify instead
  • scala.reflect.makro renamed to scala.reflect.macros
  • Usages of macros no longer require scala-reflect.jar on library classpath
  • Macros now only allow c.AbsTypeTag context bounds (details). Use c.AbsTypeTag instead of c.TypeTag, implicitly[c.AbsTypeTag[T]].tpe instead of c.typeOf[T] (in RC1 there will be a shortcut, c.absTypeOf[T])
  • Breakage!! Macro impls for macro defs with implicit parameters cannot have type tag context bounds: https://issues.scala-lang.org/browse/SI-6281. Fixed in RC1, see the linked issue for a workaround.
  • Reflection:
  • Introduced MethodSymbol.{params, typeParams, returnType}
  • asXXXSymbol renamed to asXXX, asType renamed to Type, asTypeConstructor renamed to toTypeConstructor
  • Introduced TermSymbol.{getter, setter, accessed} to navigate between accessor symbols and underlying field symbols
  • Flags on symbols are gone and replaced with a lot of new isXXX tests
  • Some isXXX tests on symbols moved from Symbol to descendants
  • Breakage!! isXXX tests don’t work unless a symbol is initialized: https://issues.scala-lang.org/browse/SI-6277. Will be fixed in RC1, see the linked issue for a workaround.
  • Some methods on types are gone and should be replaced by pattern matching (e.g. Type.typeParams is removed and is supposed to be acquired by matching against PolyType)
  • TermSymbol.resolveOverloaded is removed and is planned to be resurrected in 2.10.1
  • base.StandardNames and api.StandardNames have undergone a drastic cleanup
  • Implementation of mirrors is now complete: ModuleMirror.instance works for nested modules, MethodMirror.apply support magic symbols, mirrors correctly work with value classes, etc
  • See this thread for some info about migration: http://groups.google.com/group/scala-internals/browse_thread/thread/4758995dfa2da9db  
  • ClassTag.Nothing now throws an exception to emphasize the fact that there are no values of type Nothing. On a second thought, this is deemed to be a mistake and is reverted in RC1.

New in Scala 2.10.0 M6 (Aug 1, 2012)

  • New in this milestone:
  • Akka actors jar now included in distribution.
  • Backend emits Java 1.6 class files by default. Generation of Java 1.5 class files has been deprecated. Non-default class file formats can be emitted via -target:jvm-1.5 and -target:jvm-1.7.
  • Fixed:
  • SI-6112 exposes symbol mutators in macro universe
  • SI-6075 cleans up api.StandardNames
  • SI-6058 makes JavaMirror caches weak
  • SI-6111 accept single-subpattern unapply pattern
  • SI-4440 workaround: avoid outer accessor that'll vanish
  • SI-4881 infer variance from formals, then result
  • SI-6089 test file for pt2
  • Fix SI-6117, regression involving import ambiguity.
  • SI-6089 pt2: _ is tailpos in `_ || _` and `_ && _
  • SI-1832 consistent symbols in casedef's pattern&body
  • SI-5999 a real fix to the packageless problem
  • SI-6031 customizable budget for patmat analyses
  • SI-5999 removes the macro context mirror
  • SI-5999 deploys a new starr
  • SI-5999 removes Context.reify
  • SI-5984 improves error reporting in JavaMirrors
  • SI-4897 derive expected value from single type
  • Deprecate all JVM 1.5 targets and make 1.6 default.
  • SI-5784 Scaladoc: Type templates
  • Removes Float.Epsilon and Double.Epsilon
  • SI-5939 resident compilation of sources in empty package
  • SI-6104 support This pattern
  • Fixed SI-6092. Fixed leaky annotations, and relaxed the conditions under which a try-catch is lifted out to an inner method.
  • SI-6089 better tail position analysis for matches
  • SI-5695 removes Context.enclosingApplication
  • SI-5892 allow implicit views in annotation args
  • SI-6095, SI-6098 - clean up public API, add deprecations
  • SI-5739 store sub-patterns in local vals
  • SI-5731 a few fixes for value classes
  • Fixes SI-5588. Correct compare for Enumeration. Slower than the original one but does comparison in the same spirit as IntOrdering.
  • SI-5856 enables use of $this in string interpolation
  • SI-5895 fixes FieldMirrors
  • Fixed SI-6076. Range positions for macro-based string interpolation. Should bring back the jenkins job as well.
  • SI-5784 Scaladoc: {Abstract,Alias} type templates
  • test case closes SI-6047
  • Fix for SI-5385.
  • SI-6086 magic symbols strike back
  • Scaladoc: Refactoring the entities
  • SI-3695 SI-4224 SI-4497 SI-5079 scaladoc links
  • SI-4887 Link existentials in scaladoc
  • SI-4360 Adds prefixes to scaladoc
  • Scaladoc: workaround for untypical Map usecases
  • SI-4324 Scaladoc case class argument currying
  • SI-5558 Package object members indexing
  • SI-5965 Scaladoc crash
  • Scaladoc: Inherited templates in diagrams
  • SI-3314 SI-4888 Scaladoc: Relative type prefixes
  • SI-5235 Correct usecase variable expansion
  • SI-6035: Specialization and separate compilation.
  • SI-6011 switches: unreachability, guard-free form
  • SI-6028 Avoid needless symbol renaming in lambdalift.
  • A test case that scrutinises lambdalifter's output.
  • With -Yno-generic-signatures, exit GenASM.getGenericSignature early
  • SI-6077 more conservative TreeMakersToConds for CSE
  • SI-5956 trigger copy generation with correct namer
  • SI-5957 enable direct parsing of nested java class classfile
  • SI-6061 adds weakly conformance for number types to resolveOverloaded
  • SI-6022 model type-test-implication better
  • SI-6042 Improve type selection from volatile type error
  • Allow attachments for symbols, just like for trees.
  • Enhanced presentation compiler test infrastructure

New in Scala 2.9.1-1 (Mar 5, 2012)

  • Don't mark mixed-in methods as bridges.
  • Add SYNTHETIC flag for BRIDGE methods.
  • Update build for publishing to sonatype OSSRH

New in Scala 2.10.0 M2 (Feb 22, 2012)

  • Fixes and improvements:
  • Support for implementing a parallel collection using a concurrent collection. In particular, one should be able to implement a combiner using a concurrent (thread-safe) collection.
  • Ctries added to the standard library. Implement parallel ctries using the above mechanism.
  • New futures and promises library added to scala.concurrent, joint work with the Akka team.
  • Numerous improvements to reification.
  • Virtual pattern matcher improvements -- please try compiling your project with -Yvirtpatmat, it will be on by default starting with 2.10.0-M3!
  • A significantly faster optimizer.
  • Improvements to RedBlack tree.
  • Fixes to specialization (AnyRef, interaction of final and @inline -- thank you, Erik Osheim!).
  • Specifically, though non-exhaustively, the following tickets were closed (we're working on automation to make this more reliable):
  • SI-4336 polymorphic expression isn't adapted to the expected type
  • SI-4835 scala.collection.immutable.StreamIterator[+A] has O(n) memory consumption
  • SI-5066 Predef.readLine(String, Any*) should call Console.readLine(text, args: _*) (Thank you, Szabolcs Berecz!)
  • SI-5215 Scalac crashes when I use @elidable for trait (Thank you, Szabolcs Berecz!)
  • SI-5224 Cannot reify @serializable class C
  • SI-5225 Bad reification of @transient @volatile var x = 2
  • SI-5229 Cannot reify objects
  • SI-5256 Classloading problems in REPL with Scala reflection
  • SI-5269 Cannot reify traits
  • SI-5270 Cannot reify self-types
  • SI-5271 Cannot reify case classes
  • SI-5272 Cannot reify simple pattern match
  • SI-5273 Cannot reify unapply-based pattern match
  • SI-5274 Cannot reify recursive functions
  • SI-5275 Cannot reify constructors with val-parameters
  • SI-5276 Cannot reify lazy vals
  • SI-5277 Cannot reify implicits
  • SI-5279 Cannot reify implicitly imported stuff from java.lang
  • SI-5287 Use case methods hide information about the actual method
  • SI-5293 Performance: Copying mutable.HashSet (FlatHashTable) 100x slower than java.util.HashSet.
  • SI-5334 Cannot reify code that returns an object of a locally defined type
  • SI-5335 Cannot reify anonymous classes
  • SI-5374 Deserialization of ListBuffer results in a non-mutable structure prone to throwing NoSuchElementException
  • SI-5375 Deadlock when parallel collection function throws an exception
  • SI-5405 Documentation error in scala.math.BigInt
  • SI-5419 Cannot reify 5: @Int
  • SI-5423 Mirror doesn't load annotations
  • SI-5429 object may override a def causing ClassCastException in unrelated code
  • SI-5444 Crash in LambdaLift
  • SI-5452 Stack overflow in doTypedApply when manifests meet overloads
  • SI-5497 undefined value leads to "no-symbol does not have an owner"
  • SI-5500 Strange type error with some AnyRef specializations (but not others)
  • SI-5506 cps errors with lists

New in Scala 2.9.1 (Aug 31, 2011)

  • The 2.9.1 release of Scala includes many bug fixes and improvements, in particular to the interpreter: most of the interpreter changes available in the development mainline have been ported to the 2.9.x release branch.

New in Scala 2.9.0 RC1 (Mar 29, 2011)

  • name mangling is hitting hard path length limits #3623
  • Standard Library No JSON Serializer in scala.util.parsing.json #3605
  • Scaladoc issue (regresssion in 2.8.1 to 2.8.0: "UnsupportedOperationException: Position.point" #4284
  • @specialized breaks super.overriddenMethod, causing infinite loop and StackOverflowError. #3651
  • Scaladoc skips comments for lazy vals #3790
  • Exception on type and object with the same name #4180
  • type parameter bounds not properly substituted #3982
  • ScalaDoc 2: AnyRef is shown by default as having no methods #3668
  • Increase performance of incremental search #3863
  • Allow user-provided doclet (patch included) #4102
  • scaladoc: hide instead of show #3482
  • newline is not space if next line starts with text style #3541
  • Broken link for Predef.Pair (and others) #3681
  • Scaladoc should add spaces between lines #3735
  • ScalaDoc hideall flaws #3775
  • Scaladoc stops producing output if it hits an annotation in the documentation that it doesn't "recognize." #4212
  • scaladoc doesn't handle italics correctly #4185
  • scaladoc doesn't handle entitities correctly inside blah tags #4184
  • Scaladoc does not understand @migration #4167
  • AnyRef.synchronized parameter should be by-name #4086
  • no documentable class found in compilation units #3928
  • Local trait method cannot be called when it's private[this] and some unrelated trait extends it #4179
  • crasher with -optimise in Mixin #3250
  • Exhaustiveness check does not consider path prefix #4020
  • lazy val readLine inside recursion fails #4000
  • resident compiler same name bug #12
  • please allow scalac -sourcepath to accept multiple folders #2202
  • different result REPL / script #2324
  • [Patch] Overlapping Trees in Presentation Compiler with Comma Separated ImportExprs #3416

New in Scala 2.8.1 (Nov 10, 2010)

  • When a val overrides an abstract var
  • Scaladoc and val (constructor args and lazy)
  • scaladoc for case class fields
  • Assertion error on compilation
  • Stream.cons result not thread-safe
  • Scaladoc does not seem to correctly report singleton types
  • Implicit conversion ambiguity
  • Primary constructor does not initialize structural type when auxiliary constructors are present
  • Structural method is dispatched on non-public member when overriding public member
  • Assertion Error Erasure$Eraser.cast(Erasure.scala:442)
  • Types$TypeError when using inherited method from Java with repeated parameters
  • Unsound higher order typing
  • Better error messages for implicits
  • 'class file is broken' error when extending Java static inner classes
  • spurious warning for deprecated case class
  • parameters with default values not distinguished
  • "Self" escapes SynchronizedMap
  • scalac crash on (invalid) input file with an annotation on package declaration
  • incorrect error message compiling trait with view bound
  • java generic signature should not refer to type parameters of enclosing method (partial fix)
  • NullPointerException in REPL when using DoubleLinkedList
  • error in kind checking: higher-order type parameters
  • IndexOutOfBoundsException on search for implicit =:=
  • Compiler error with renamed BeanProperty import
  • Option.empty
  • kind conformance and separate compilation
  • Compiler crash with TypeError during SpecializeTypes
  • Scala doc for List.sliding is incorrect
  • dated spec references to ByNameFunction
  • upper bound on type parameter leads inferencer to wrong arity
  • No Java Signature for mixed-in generic methods
  • The result of scala.collection.immutable.TreeSet[A]#toString should be sorted
  • Parameterizing varargs method on singleton type crashes scalac
  • Cannot pass Java properties containing ':'
  • Stream.splitAt does not terminate
  • assertion failed in getPrimitive
  • Stream.range regression in Scala 2.8.(works with Scala 2.7.7)
  • assertion failure in mkAttributedQualifier
  • Stream.tabulate creates an infinite stream
  • Recent nsc change breaks AppEngine compatibility (partial fix)
  • Java annotation with negative double value causes error
  • TraversableFactory.iterate is too aggressive
  • Java annotations restriction; error message could be improved
  • scala.MatchError on code completion of a Tuple
  • jvm/actor-executortest fails very rarely due to incorrect use of j.u.c.Executor
  • Compiler crash in a small code
  • TraversableLike.toStream loops
  • Higher order type parameter results in implicit search failure
  • Random.shuffle not usable with Random objects initialized from a non-default seed
  • Integrate IntMap / LongMap into 2.collections
  • Compiler crash: XML parsing:
  • No JSON Serializer in scala.util.parsing.json
  • Inner object does not conform to self-type
  • Enum with duplicate ordinal throws AssertionError
  • Enumeration.values is confused by methods returning Val instances
  • ill-formed type application with type constructors
  • Compiler crash with Java repeated parameters
  • ClassFormatError for specialized class extending specialized trait
  • Bring LinkedBlockingQueue up-to-date
  • java.lang.ArrayIndexOutOfBoundsException while compiling xhtml1-strict.scala
  • scala.MatchError with Specialization
  • Stream.tabulate creates an infinite constant stream
  • VerifyError with named constructor parameter with default value
  • scalac crashes after reporting name clash between val and companion object
  • specialization incorrectly searches for specialized variants
  • Repetitive method name/signature in class file
  • IllegalAccessError when using package proptected members of a Java class
  • Java Serialization Issue with Nested Class and Default Parameter
  • Compiler crash when trying to implement a custom view
  • scalac memory leak with NoPhase
  • ArrayBuilder.ensureSize can resize twice
  • field type inference fails when using named arguments with same name
  • JavaConversions.asMap can't be used a a view bound due to overloading
  • Compiler crash accessing higher kinded type in refinement
  • Infinite loop when compiling a simple manifest test
  • compile error applying curried method with repeated and default parameters
  • performance: use of implicit conversion to RichInt in ResizableArray wasteful
  • illegal characters in msil source causes compilation failure
  • ScalaSigParser in scalap doesn't use the new format
  • Blocks with application of a function-typed variable are seen as pure
  • Wrong generic Java signature for methods with Array[T] parameters
  • stack traces on file not found
  • scaladoc for Option is wrong in places, could use examples
  • No package-level scaladoc for the scala package
  • Update/improve scala.Array's scaladoc
  • Incongruous Java Class File / Package Crashes Scala Compiler
  • No error given when abstract base class is not fully implemented
  • type inference causes ClassCastException: Arrays are not ScalaObjects
  • Incorrect Position with \r\n Delimiters
  • Performance: ArrayBuffer.sizeHint could directly call arraycopy rather than Array.copy
  • Array.copy needs review
  • Compiler UnsupportedOperationException: Position.point when parsing ill-formed XML
  • companions and method-owned case classes (partial fix)
  • Missing deprecation warning
  • scalac hang on innocent looking source (partial fix)
  • scalac silently hangs while compiling (possibly with implicits)
  • type constructor inference should normalize to improve unification
  • @specialized collides with Manifest
  • cyclic reference when compiling sources using build manager
  • Improve scaladoc of scala.xml.pull
  • Improve scaladoc of scala.collection package and link to the new Guide
  • Specialization with function object causes null reference
  • Dependent method type referring to previous argument list
  • Regression: scaladoc fails when mixing in PackratParsers
  • Compiler crash: "Illegal group reference"
  • Scala compiler rejects override of abstract protected Java method
  • Can't override protected Java member from outer package in mixed compilation

New in Scala 2.8.0 (Jul 16, 2010)

  • Redesigned collection library:
  • The collection library has undergone a complete overhaul for Scala 2.8, offering a more coherent and efficient design, while maintaining virtually complete compatibility with existing sources. Detailed information at: http://www.scala-lang.org/sid/3
  • New array implementation, manifests for polymorphic arrays:
  • Handling of arrays has been simplified and optimized in Scala 2.8. The previous compiler magic has been replaced by a more systematic and predictable implementation in terms of implicit conversions. Full details at: http://www.scala-lang.org/sid/7
  • Type specialization:
  • Scala 2.8 adds specialized type parameters, which enable the compiler to generate transparently multiple versions of a given definition, and to use the most specific version whenever the static type information at a call site allows it. Details at: http://www.scala-lang.org/sid/9
  • Named and default arguments:
  • Named arguments improve the readability of method calls with many arguments. Default arguments reduce code duplication, and enable "copy" methods for case classes, useful to generate quickly modified copies of case classes. A complete description at: http://www.scala-lang.org/sid/1
  • Package objects:
  • Packages can now contain besides classes and objects also methods, fields or type aliases. These are added to a package by declaring a package object. More capabilities might be added to package objects in subsequent releases.
  • Beefed up Scala Swing libraries, better documentation:
  • Components publish key events, input events can be consumed, refactored window subhierarchy, additional demos, Swing listeners are installed lazily, more complete component caching, minor refactorings, bugfixes, more Scaladocs. Design document at: http://www.scala-lang.org/sid/8
  • Revamped REPL:
  • Many bugfixes. Tab-completion for all packages on the classpath, as well as object and instance methods and fields, including type aliases and package objects. Searchable history, integrated shell access, and a power mode which offers direct access to compiler internals.
  • Implicits changes:
  • We have refined the implicit resolution process so that resolution is now able to determine type variables.
  • Improved equality:
  • Equality across numeric types is to be consistent across all the primitives types, while also adhering to the equals/hashCode contract. Numeric comparisons will have the same results as they would between Java primitives.
  • Packrat parser combinators:
  • With support for packrat parsing, parser combinators are now able to handle left-recursive grammars and will show improved performance for ambiguous productions.
  • Improved XML library:
  • Many bugfixes.
  • Type constructor inference:
  • Type inference has been extended to deal with type constructors, so that, in certain cases, you can omit type parameter lists that contain higher-kinded types (aka type constructors, e.g., List).
  • Improved Annotations:
  • Scala 2.8 adds support for nested java annotations. For annotations on fields, it is now possible to specify which synthetic members (getter / setter) will have the annotation. Documentation about Scala annotations can be found at: http://www.scala-lang.org/sid/5
  • Enhanced actors:
  • New Reactors provide more lightweight, purely event-based actors with optional, implicit sender identification. Support for actors with daemon-style semantics was added. Actors can be configured to use the efficient JSR166y fork/join pool, resulting in significant performance improvements on 1.6 JVMs. Schedulers are now pluggable and easier to customize.
  • Support for continuations:
  • Continuations are supported by a compiler plugin, which is now supported as part of the main distribution.
  • Internal improvements:
  • New presentation compiler:
  • This new infrastructure, within the Scala compiler, enables IDEs to hook into the compiler to find efficiently information about the structure of the program under editing. This new code offers a better platform for the development of IDE plugins.
  • New build manager:
  • The new feature used by for example Eclipse to detect intelligently changes in the files and compile only necessary Scala sources, instead of performing clean build on whole projects. This technique enables to significantly reduce the compilation time on bigger projects.
  • Speed improvements:
  • The compiler now runs as optimised code. In addition, a number of improvements and fine-tunings have further improved the compiler speed up to 50%.
  • Additional tools:
  • Scaladoc 2:
  • A new look-and-feel, automatic comments expansion and wiki-like syntax, as well as compile-time error checking. Read more about changes on the Scaladoc 2 mini-site.
  • Sbaz 2:
  • Sbaz includes many bug fixes and enhancements. It now gives better feedback to the user during lengthy downloads and while diagnosing dependency audits, which in turn have been re-factored and enhanced. Sbaz should work properly on Windows using either cmd or cygwin, and is now capable of reliably updating itself. Support for pack200 has been added, in some cases reducing file sizes up to 70%.
  • Scalap:
  • A new Scalap, contributed by the community, is included. The new Scalap is aware of package objects and can decompile them by using .package
  • Scala IDE for Eclipse:
  • The IDE has been extensively reworked with much functionality moved into the Scala compiler where it can be better maintained and reused by non-Eclipse IDEs and other tools. The integration with Eclipse's JDT has been deepened, and much previously Scala-specific behaviour and functionality is now provided directly by the JDT leading to across the board improvements. The Scala IDE for Eclipse is now hosted at Assembla.

New in Scala 2.7.7 (Oct 29, 2009)

  • A fix for an issue in the Actors library that could lead to problematic growth of the underlying thread pool. The old FJTaskRunner was replaced with a backport of ThreadPoolExecutor. Intermittent termination of the thread pool is handled more gracefully.
  • A fix for issue #2380, which was causing problems to some users of the Scala IDE for Eclipse running on a 1.5 VM.
  • An AJDT compatibility fix addressing ticket #2327, related to the installation of the Scala IDE for Eclipse.
  • A fix for issue #2392, "Finally clauses don't work correctly if they throw an exception".
  • An improved fix for bugs #715, #1896, #1930 (problem with pickler/unpickler), addressing a problem with the Lift framework.
  • A fix for issue #1535 (problem with inherited lazy val).
  • A fix for the IzPack uninstaller issue #1433, which may cause some empty subdirectories to be erroneously purged from the installation directory on *nix systems (Windows systems are not affected).
  • Support for automatic privilege elevation on Vista and Windows 7 for the installer, and other minor improvements.

New in Scala 2.7.6 (Sep 11, 2009)

  • This was a maintenance release that fixed bugs #715, #1896, and #1930. No language changes were introduced.

New in Scala 2.7.5 (Jun 2, 2009)

  • This was a maintenance release that fixed a few bugs in the Actors library; no language changes were introduced.

New in Scala 2.7.4 (Apr 25, 2009)

  • This was a maintenance bug-fixing release, aimed at improving stability; no language changes were introduced.

New in Scala 2.7.3 (Jan 14, 2009)

  • This was a maintenance bug-fixing release, aimed at improving stability; no language changes were introduced.

New in Scala 2.7.2 (Nov 11, 2008)

  • Generic Signatures:
  • The Scala compiler now generates Java's generic signatures, so that Scala generics are visible to Java.
  • Java/Scala Combined Projects:
  • The compiler can now parse (but not translate) Java source files. This makes it possible to have mixed Java/Scala projects with recursive dependencies between them. In such a project, you can submit first all the Java and Scala sources to the Scala compiler. In a second step, the Java sources are compiled using the Scala generated .class files and the Scala sources are compiled again using the Java generated .class files.
  • ScalaSwing:
  • Another major addition is the first beta version of the ScalaSwing library, which is now bundled with the distribution.
  • Scala Collections:
  • There are new implementations of collection classes, contributed by David MacIver: IntMap, LongMap, and TreeHashMap (immutable), ArrayStack and OpenHashMap (mutable).

New in Scala 2.7.0 (Feb 28, 2008)

  • Fixed runtime crash in class scala.runtime.RichString. (#562)
  • Fixed missing method hashCode in class mutable.LinkedList. (#529)
  • Fixed method take in class scala.Stream. (#499)
  • Fixed compiler crash with XML namespace binding. (#486)
  • Added missing clone method in Map/Set classes of the JCL collection library. (#485)
  • Fixed method fromArray in class scala.Iterator. (#429)

New in Scala 2.7.0 RC2 (Feb 15, 2008)

  • Fixed failure with sbaz command on Windows. (#476)
  • Fixed actor shutdown deadlock. (#459)
  • Fixed unreported type error with classes whose companion object is not defined in the same source file. (#419)
  • Fixed several issues in the MSIL backend, eg. predef.dll now passes the PEVerify validation.

New in Scala 2.7.0 RC1 (Feb 8, 2008)

  • This version of Scala introduces some minor language changes.
  • Added support for optional XML attributes.
  • Added wrapper class scala.BigDecimal.
  • Generic Java types are now supported by default (was -Ygenerics).
  • Target jvm-1.5 is now the default.
  • Type annotations are now supported by default (was -Xplug-types).
  • The Scala documentation is not installed by default except when using the IzPack Java installer (use sbaz otherwise).
  • Installing Scala on Unix now creates a root directory as on Windows (see changes in version 1.4.0.1).
  • Class scala.StringBuilder is written entirely in Scala (platform-independent).
  • Fixed NoSuchMethodException with structural types. (#451)
  • Fixed failing implicit conversions for partially applied functions. (#438)
  • Fixed task scheduler for unreachable remote actors. (#437)
  • Fixed missing exit status when runtime exceptions are thrown. (#417)
  • Fixed compiler crash with classOf function. (#412)
  • Fixed InvocationTargetException with structural types. (#403)
  • Fixed incorreclty reported type error with generic types. (#400)
  • Fixed compiler crash in code generator. (#398)
  • Fixed compiler crash with nested traits and abstract types. (#385)
  • Fixed missing throws clause in generated code. (#377)
  • Fixed compiler crash in type checker. (#360)
  • Fixed incorrect behavior of lazy values in recursive methods. (#356)
  • Fixed missing error message for illegal return type. (#351)
  • Fixed incorrectly reported type error with implicit conversions. (#347)
  • Fixed ClassCastException with self types. (#342)
  • Fixed incorrect binding with sequence patterns. (#341)
  • Fixed missing exhaustivity warnings with guarded patterns. (#335)
  • Fixed compiler crash with negative hash codes. (#334)
  • Fixed NumberFormatException in JSON parser. (#330)
  • Fixed IllegalAccessError with structural types. (#328)
  • Fixed return type of method Iterator.range. (#327)
  • Fixed missing backtick-escaped keywords in interpreter. (#323)
  • Fixed compiler crash with malformed existential type declarations. (#318)
  • Fixed incorrect information message for compiler option -g:line. (#314)
  • Fixed compiler crash in backend optimizer. (#306)
  • Fixed compiler crash in pattern matcher. (#301)
  • Fixed @transient annotation with traits. (#289)
  • Fixed compiler crash with _root_ package. (#283)
  • Fixed missing object annotations in scaladoc generated documentation. (#272)
  • Fixed runtime crash with constructors using sequences. (#259)
  • Fixed remote actors not terminating automatically. (#219)
  • Fixed runtime crash with tuples. (#216)
  • Fixed value declarations in traits. (#201)
  • Fixed incorrect line number in generated code. (#106)
  • Fixed incorrectly reported type error with generic types. (#51)
  • Corrected several errors and completed some descriptions in the Scala documentation.

New in Scala 2.6.1 RC2 (Dec 15, 2007)

  • Fixed SYNTHETIC attribute in generated Java class files. (#268)
  • Fixed MatchError exception in match expressions. (#211)

New in Scala 2.6.1 RC1 (Dec 4, 2007)

  • Fixed handling of thrown exceptions in a catch block. (#244)
  • Added missing super flag to all generated Java class files (invokespecial).
  • Fixed namespace printing bug in the XML library.
  • Added missing bridge flag when compiling with target jvm-1.5. (#232)
  • Fixed compiler crash with qualified super. (#231)
  • Fixed incorrectly reported error in match expressions. (#230)
  • Fixed compiler crash in symbol pickler. (#227)
  • Fixed compiler crash with incorrect type parameters. (#226)
  • Fixed incorrectly hidden instance methods in generated code. (#225)
  • Fixed compiler crash in type checker. (#218)
  • Fixed incorrect behavior of immutable sets. (#217)
  • Fixed compiler crash in type checker. (#214)
  • Fixed ClassCastException with this.type. (#209)
  • Fixed compiler crash with incorrect type members. (#207)
  • Fixed compiler crash with lazy values. (#206)
  • Fixed compiler crash with inherited type members. (#204)
  • Fixed NaN handling in scala.util.Sorting. (#202)
  • Fixed MatchError in Scala interpreter. (#198)
  • Fixed compiler crash with case classes. (#197)
  • Fixed runtime crash with structural typing. (#192)
  • Fixed incorrectly reported type error with sequences. (#189)
  • Fixed compiler crash with existential types. (#184)
  • Fixed incorrect ordering of iterable objects. (#181)
  • Fixed compiler crash with inherited type members. (#180)
  • Improved tail call optimization with different instances. (#170)
  • Fixed compiler crash in type checker. (#168)
  • Fixed compiler crash with mixin composition. (#165)
  • Fixed compiler crash with mixin composition. (#159)
  • Fixed incorrectly reported type error with overridden method inherited from traits. (#155)
  • Fixed unreported type error with repeated parameters. (#148)
  • Fixed incorrectly reported type error with string literals. (#146)
  • Fixed update failure with sbaz (Windows only). (#145)
  • Fixed incorrect variable substitution on Sun Solaris. (#142)
  • Fixed missing stack trace in failed SUnit assertions. (#141)
  • Fixed ClassCastExecption with arrays. (#139)
  • Fixed VerifyError together with the Eclipse TPTP library. (#138)
  • Fixed compiler crash with higher-kinded types. (#137)
  • Fixed string handling in JSON parser. (#136)
  • Fixed compiler crash when accessing qualified super members. (#117)
  • Fixed compiler crash when accessing qualified protected members. (#116)
  • Fixed compiler crash with case objects. (#108)
  • Fixed VerifyError in numeric value conversions. (#107)
  • Fixed method assertEquals in SUnit library. (#98)
  • Fixed SecurityException in actors library. (#94)
  • Fixed missing accessors for nested objects. (#91)
  • Fixed VerifyError in try/catch block. (#88)
  • Fixed compiler crash with repeated parameters and Seq constructor. (#87)
  • Fixed missing final modifier for field serialVersionUID. (#62)
  • Fixed compiler crash with prefixed attributes in XML expressions. (#60)
  • Fixed incorrect exit code returned by fsc command. (#59)
  • Fixed compiler crash with non-local return statement. (#42)
  • Fixed rejected annotations on inner function definitions. (#33)
  • Fixed compiler crash with protected accessors. (#10)
  • Fixed ClassCastException with extractor values. (#5)

New in Scala 2.6.0 Final (Sep 12, 2007)

  • Added receiving actor to trait actors.OutputChannel.
  • Fixed compiler crash with anonymous classes. (#55)
  • Fixed incorrectly reported type error with unapply method. (#44)
  • Fixed compiler crash with match expressions. (#40)
  • Fixed compiler crash with lazy values. (#39)
  • Fixed compiler crash in pattern matcher. (#37)
  • Fixed ClassCastException in sudoku example. (#31)
  • Fixed incorrect equality test in code optimizer. (#30)
  • Fixed compiler crash with lazy values in trait methods. (#29)
  • Fixed compiler crash with bad extractor patterns. (#28)
  • Fixed ClassFormatError with lazy values. (#21)
  • Fixed ArrayStoreException with 2-dimension arrays. (#17)
  • Fixed type mismatch error message. (#15)
  • Fixed wrong exception catching code. (#11)
  • Fixed compiler crash with structural types. (#9)
  • Fixed incorrectly reported type error. (#8)
  • Fixed compiler crash in type checker. (#3)
  • Fixed wrong code generated in match expressions. (#2)
  • Added support for port multiplexing in remote actors.
  • Methods with '*'-parameters can now be converted to function values.
  • Fixed wrong code generated for guards in match expressions. (#1286)
  • Fixed wrong code generated in match expressions. (#1285)
  • Fixed compiler crash with parameterized super calls. (#1284)
  • Fixed compiler crash in match expressions. (#1282)
  • Fixed compiler crash with unapplySeq method. (#1281)
  • Fixed compiler crash in scaladoc. (#1280)
  • Fixed compiler crash in match expressions. (#1278)
  • Fixed incorrectly reported error in match expressions. (#1277)
  • Fixed wrong result returned by match expression. (#1276)
  • Fixed compiler crash in type checker. (#1275)
  • Fixed compiler crash with unapply method. (#1274)
  • Fixed compiler crash with unapply method. (#1270)
  • Fixed incorrectly reported error in match expressions. (#1261)
  • Fixed compiler crash in match block. (#1258)
  • Fixed compiler crash with unapply method. (#1257)
  • Fixed ClassCastException with unapply method. (#1256)
  • Fixed compiler crash with advanced compiler option. (#1255)
  • Fixed compiler crash in match block. (#1253)
  • Fixed compiler crash in match block. (#1251)
  • Fixed compiler crash with lazy values. (#1248)
  • Fixed compiler crash in match expressions. (#1243)
  • Fixed compiler crash with unapply method. (#1222)
  • Fixed compiler crash with unapply method. (#1215)
  • Fixed compiler crash with unapply method. (#1214)
  • Fixed compiler crash in pattern matching. (#1213)
  • Fixed compiler crash in type checker. (#1085)
  • Fixed unescaped ampersands in XML attributes. (#1021)
  • Fixed several bug contributions.
  • Added multi-dimensional arrays to Scala (up to 9 dimensions).
  • Integrated package scala.util.parsing.combinator into the standard Scala library.
  • Added synchronous message send for remote actors.
  • Added message buffering in remote.TcpService (in case the remote net kernel is not yet up).
  • Added the @native annotation for native methods.
  • Added new methods take/takeWhile, drop/dropWhile and reverse to class scala.Array.
  • Reorganized (and sometimes renamed) compiler options.
  • Removed deprecated classes Actor, NameServer, Pid and Process from package scala.concurrent.
  • Fixed error message with structural types. (#1247)
  • Fixed missing warning message with aliased types. (#1246)
  • Fixed compiler crash in type checker. (#1242)
  • Fixed compiler crash in type checker. (#1237)
  • Fixed AbstractMethodError with closures. (#1236)
  • Fixed VerifyError with imbricated match expressions. (#1235)
  • Fixed compiler crash in type checker. (#1234)
  • Fixed unreported type error with higher-kinded type members. (#1231)
  • Fixed compiler crash with new operator. (#1227)
  • Fixed compiler crash with recurring generics. (#1224)
  • Fixed compiler crash with unapply method. (#1220)
  • Fixed NoClassDefFoundError in Scala interpreter. (#1218)
  • Fixed compiler crash with private lazy values. (#1211)
  • Fixed compiler crash in type checker. (#1210)
  • Fixed OutOfMemoryError in Scala interpreter. (#1207)
  • Fixed StackOverflowException with tail recursive functions. (#1205)
  • Fixed error message in Scala plugin when file system is full. (#1200)
  • Fixed incorrectly reported type error with overridden lazy values. (#1194)
  • Fixed runtime crash with arrays of arrays. (#1192)
  • Fixed incorrectly reported type error with existential types. (#1189)
  • Fixed arity error with higher-kinded types. (#1188)
  • Fixed memory leak issue in remote.TcpService. (#1187)
  • Fixed runtime crash with incorrectly selected scope. (#1183)
  • Fixed compiler crash with malformed match expressions. (#1181)
  • Fixed endless loop in Scala interpreter. (#1180)
  • Fixed incorrectly set Java class loader in Scala interpreter. (#1177)
  • Fixed compiler crash with this-qualified private members. (#1170)
  • Fixed debug information in if-branches. (#1169)
  • Fixed matching of thrown exceptions. (#1168)
  • Fixed compiler crash with XML expressions. (#1166)
  • Fixed incorreclty reported type error with iterable types. (#1158)
  • Fixed hanging problem in RemoteActor. (#1098)
  • Fixed access to fields declared in Java code. (#1062)
  • Fixed compiler crash with pattern matching. (#1061)
  • Fixed missing warning message with erased types. (#1059)
  • Fixed incorrectly reported error with self-types. (#1050)
  • Fixed compiler crash with with self-types. (#1049)
  • Fixed compiler crash with pattern matching. (#1033)
  • Fixed interpreter crash with unclosed XML literals. (#1002)
  • Fixed compiler crash with compound types. (#1001)
  • Fixed non thread-safe behavior in scala.Symbol. (#992)
  • Fixed interpreter crash with multi-lined XML values. (#944)
  • Fixed several bugs in the runtime library (e.g. scala.Stream, scala.xml.PrettyPrinter, scala.actors.remote.TcpService).