Scala Changelog

What's new in Scala 3.4.2 RC 1

May 2, 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 RC 2 (Mar 27, 2024)

  • 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 (Mar 12, 2024)

  • Add support for @deprecatedInheritance

New in Scala 3.3.3 (Feb 29, 2024)

  • Improvements to the Coverage (detailed list below)
  • Add Stable Presentation Compiler

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

  • Update jsoup dependency of Scaladoc to 7.2 #19584

New in Scala 2.13.13 (Feb 27, 2024)

  • Language:
  • Support binary integer literals using 0b, as in Java (#10656 by @som-snytt)
  • Compatibility:
  • TASTy reader: support Scala 3.4 (#10670 by @bishabosha)
  • Support certain Java libraries compiled on JDK 21 (#10675 by @SethTisue)
  • For JDK 22 support, upgrade to ASM 9.6 (#10576 by @Philippus)
  • Align with Scala 3:
  • Allow either -Xsource:3 (for preparing to switch to 3) or -Xsource:3-cross (for crossbuilding on 2 and 3); some existing users of -Xsource:3 should switch to -Xsource:3-cross to avoid unwanted behavior changes (#10573 by @som-snytt)
  • For migration to 3, accommodate case companion as function (#10648 by @som-snytt)
  • Scala 3 migration warning for implicits found in package prefix (#10621 by @lrytz)
  • Other improvements:
  • -Yrelease supplements -release, allows access to additional JVM packages (#10543 by @som-snytt)
  • Add -Xlint:named-booleans to lint unnamed boolean literal args [ci: last-only] (#10612 by @som-snytt)
  • Respect java.lang.Deprecated annotation even in Scala sources (#10517 by @kapunga)
  • Optimize tail recursion on effectively final methods even when final keyword is absent (#10629 by @som-snytt)
  • Add -Xlint:pattern-shadow to lint pattern varids which are backquotable (#8806 by @som-snytt)
  • In mixed compilation, allow Java sources to reference MODULE$ (#10644 by @som-snytt)
  • Scaladoc: re-align -doc-source-url behavior with 2.12 (#10581 by @lrytz)
  • Known issues:
  • When upgrading to 2.13.13, existing users of -Xsource:3 should explicitly consider switching to -Xsource:3-cross. Some behaviors of -Xsource:3 have changed, e.g. in result type inference for inherited methods; see #10573 for details
  • Users of sbt must upgrade to sbt 1.9.9 to use the console task to access the 2.13.13 REPL (sbt/sbt#7502); error message is NoSuchMethodError: org.jline.utils.AttributedString.fromAnsi
  • Regression: Scaladoc generation may fail if you are using the TASTy reader to access Scala 3 dependencies (scala/bug#12955); error message is "Unsupported Scala 3 generic tuple type"; we'll fix it in 2.13.14
  • Regression: on JDK 11 (but not 8 or 17 or 21), the REPL prints a harmless "illegal reflective access" warning at startup (scala/bug#12957); we'll fix it in 2.13.14

New in Scala 3.4.0 RC 2 (Jan 24, 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)

  • 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

New in Scala 2.13.12 (Sep 11, 2023)

  • This release adds “quickfixes” which are compiler-suggested fixes for some warnings and errors, improves migration to Scala 3, and more.

New in Scala 3.3.1 (Sep 8, 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...

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

  • 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)

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

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

  • Add clause for protected visibility from package objects #18134

New in Scala 3.3.1 RC 1 (Jul 5, 2023)

  • Highlights of the release:
  • Support records in JavaParsers #16762
  • Port JVM backend refactor from Scala 2 #15322
  • 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...

New in Scala 2.13.11 (Jun 7, 2023)

  • Collections:
  • Faster Vector concatenation (#10159 by @ansvonwa)
  • New LinkedHashMap/LinkedHashSet implementation (#10221 by @liang3zy22)
  • Compatibility:
  • Support JDK 20 and 21 by upgrading to ASM 9.5 (#10363, #10184 by @Philippus)
  • Fix crash reading JDK 21 classfiles (#10397)
  • Support Java 17 sealed in Java sources and classfiles (#10348, #10105 by @som-snytt)
  • Support Scala 3.3 in TASTy reader (#10299 by @bishabosha)
  • Align with Scala 3:
  • Accept implicit _, implicit (x: Int) in lambdas, like Scala 3 does (#10327 by @som-snytt)
  • Deprecate infix type args, as they are dropped in Scala 3 (#10255 by @som-snytt)
  • Allow eta-expansion of methods with dependent types (#10166)
  • Abstract parent copy does not suspend case copy (#10085 by @som-snytt)
  • Don't GLB binders of type patterns, use the type directly (#10247)
  • Under -Xsource:3, warn that inherited members no longer take precedence over outer definitions in Scala 3 (#10220, #10339)
  • Under -Xsource:3, adjust 2.13.9 change to ignore override type for whitebox macro expansion (#10188 by @som-snytt)
  • Under -Xsource:3, use narrowest type for pt of override (#10198 by @som-snytt)
  • Under -Xsource:3, warn about change to parenless lambda parens (#10320 by @som-snytt)
  • Lints and warnings:
  • Lint select from Unit, or Int that incurs widening (#10372 by @som-snytt)
  • Lint for integral divisions that are widened to a float (#10369 by @som-snytt)
  • Lint if args adapted to Unit and discarded (#10150 by @som-snytt)
  • Warn that implicit should have explicit type (#10083 by @som-snytt)
  • Other notable changes:
  • Disallow mixins where super calls bind to vals (#10268)
  • Make scalac's argument-file processing more like javac's in handling spaces and line breaks (#10319 by @som-snytt)
  • Bump JLine and JNA versions (#10318)
  • Javabootclasspath supersedes jrt (#10336 by @som-snytt)
  • Report total errors on stderr (#10272 by @som-snytt)
  • Fix pathologically slow compilation of some pattern matches since 2.13.7 (#10258 by @KisaragiEffective)
  • Provide equals and hashCode on IterableWrapper again (fixing 2.13.9 regression) (#10205 by @som-snytt)
  • Improvements to -Vimplicits; errors now show complete implicit search tree (#9944 by @tribbloid)
  • Vprint defaults to -Vprint:typer; phases may be prefixed with ~ to mean "before and after" (#10173 by @som-snytt)

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

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

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

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

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.3.0 RC 2 (Feb 3, 2023)

  • 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

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

  • 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 RC 4 (Oct 18, 2022)

  • Update Scala 2 library dependency to 2.13.10

New in Scala 3.2.1 RC2 (Oct 17, 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 2.13.10 (Oct 13, 2022)

  • Binary compatibility regression fixed:
  • Fix 2.13.9 regression which broke binary compatibility of case classes which are also value classes (#10155)
  • Library maintainers should avoid publishing libraries using Scala 2.13.9.
  • Other notable changes:
  • Fix 2.13.9 regression in linting, causing spurious "variable x is never used" warnings (#10154)
  • -Xsource:3 now respects refinements by whitebox macro overrides (#10160 by @som-snytt)
  • Scaladoc tool: fix parsing bug which could cause very slow performance or incorrect output (#10175 by @liang3zy22)
  • Restore -Vprint-args, for echoing arguments provided to compiler (#10164 by @som-snytt)

New in Scala 2.13.9 (Sep 22, 2022)

  • This release improves compatibility with Scala 3, supports JDK 19, updates -release and deprecates -target, adds -Wnonunit-statement to warn on discarded values, improves security, and fixes various bugs.

New in Scala 3.2.1 RC1 (Sep 15, 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:
  • Gix 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.1 RC1 (Sep 15, 2022)

  • 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 5, 2022)

  • Highlights of the release:
  • Add runtime.TupleMirror to avoid anonymous classes for mirrors of tuples
  • Fix TupleXXL.productPrefix
  • Synthesize mirrors for small generic tuples
  • Fix #14150: Constrain refinements to type parameters
  • Gradual warning for deprecated nonlocal return
  • Restrict mirrors of any union type
  • Stabilize 3.2 APIs
  • Add error reporting for mirror synthesis
  • Fix #14432: Check if scala 2 case class is accessible
  • Fix #12919: Summon anonymous mirror when companion is a case object
  • Erase Int | Nothing signatures types into Int
  • Allow exports in extension clauses
  • Fix Scala Wart about implicit () class parameters
  • Re-architecture quote pickling
  • Add scala.annotation.MainAnnotation
  • Add in initial support for code coverage
  • Support tuple specialisation
  • Remove support for -scala-output-version flag
  • Make lazy vals and object native image friendly
  • Allow return in tailrec position

New in Scala 3.2.0 RC3 (Aug 18, 2022)

  • 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 RC2 (Jul 8, 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 RC1 (Jun 21, 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 (Jun 21, 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 2.13.8 (Jan 13, 2022)

  • Make REPL work again on Mac M1 (upgrade JLine & JNA).
  • Fix slicing of views of IndexedSeqs (including fixing 2.13.7 reverseIterator regression).
  • Fix 2.13.7 regression in implicit resolution.
  • Fix 2.13.7 releaseFence regression affecting GraalVM compatibility.
  • Fix 2.13.7 regression affecting wildcards and F-bounded types.

New in Scala 2.13.7 (Nov 1, 2021)

  • The Scala team at Lightbend is pleased to announce the availability of Scala 2.13.7.
  • Align with Scala 3:
  • Update TASTy reader to support Scala 3.1 (#9791 by @bishabosha)
  • Allow import x.{*, given} under -Xsource:3 (#9724 by @smarter)
  • Allow case in pattern bindings even without -Xsource:3 (#9721 by @smarter)
  • Deprecate top-level wildcard type parameters (#9712 by @som-snytt)
  • JDK and Java compatibility:
  • Support JDK 18 (#9702 by @SethTisue)
  • Support JDK 16 records in Java sources (#9551 by @harpocrates)
  • Allow concrete private interface methods in Java sources (#9748 by @dengziming)
  • Use StringConcatFactory for string concatenation on JDK 9+ (#9556 by @harpocrates)
  • Android compatibility:
  • Add ClassValueCompat to support systems without java.lang.ClassValue (such as Android) (#9752 by @nwk37011)
  • For Android compatibility, make Statics.releaseFence() also catch NoSuchMethodException for java.lang.invoke.VarHandle.releaseFence() call (#9739 by @nwk37011)
  • Concurrency:
  • Fix asymmetric failure behavior of Future#{zip,zipWith,traverse,sequence} by making them fail fast regardless of ordering (#9655 by @lihaoyi)
  • Collections:
  • Make ArrayBuffer's iterator fail fast when buffer is mutated (#9258 by @NthPortal)
  • Fix ArrayOps bugs (by avoiding ArraySeq#array, which does not guarantee element type) (#9641 by @som-snytt)
  • Deprecate IterableOps.toIterable (#9774 by @lrytz)
  • Other changes:
  • Accept supplementary Unicode characters in identifiers (#9687 by @som-snytt)
  • Improve tab completion and code assist in REPL (#9656 by @retronym)
  • Some small changes that will ship in 2.12.16 are also included in this release.
  • For the complete 2.13.7 change lists, see all merged PRs and all closed bugs.

New in Scala 2.13.6 (May 18, 2021)

  • Highlights:
  • TASTy Reader support for Scala 3.0.0 (#9617 by @bishabosha)
  • The splain compiler plugin by @tek was integrated into the compiler, available with the -Vimplicits and -Vtype-diffs flags (#7785)
  • Escaped double quotes now work as expected in string interpolations, both s""" and s"$"" (#8830 by @eed3si9n and #9536 by @martijnhoekstra)
  • Other Changes:
  • Optimized BigInt implementation (#9628) by @denisrosset
  • Support JDK15 text blocks in Java parser (#9548) by @harpocrates
  • Stricter override checking for protected Scala members which override Java members (#9525) by @kynthus
  • Check private[this] members in override checking (#9542)
  • More accurate outer checks in patterns (#9504)
  • Allow renaming imports from _root_ (#9482) by @som-snytt
  • Make more annotations extend ConstantAnnotation (9336) by @BalmungSan
  • A number of syntax changes were added to simplify cross-building between Scala 2 and 3
  • Don't error (only warn) on symbol literals under -Xsource:3 (#9602)
  • Support writing & instead of with in types under -Xsource:3 (#9594)
  • Support Scala 3 vararg splice syntax under -Xsource:3 (#9584)
  • Support Scala 3 wildcard and renaming imports under -Xsource:3 (#9582)
  • Allow soft keywords open and infix under -Xsource:3 (#9580)
  • Align leading infix operator with Scala 3 improvements (#9567)
  • Support ? as wildcard marker under -Xsource:3 (#9560)
  • Support case in pattern bindings under -Xsource:3 (#9558)
  • Parse +_ and -_ in types as identifiers under -Xsource:3 to support Scala 3.2 placeholder syntax (#9605)

New in Scala 2.13.5 (Feb 23, 2021)

  • Highlights:
  • 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 19, 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 25, 2020)

  • Scala 2.13.3 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)

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

New in Scala 2.13.1 (Sep 18, 2019)

  • This is primarily a bug fix release that fixes several regressions in 2.13.0.

New in Scala 2.13.0 (Jun 11, 2019)

  • Release summary:
  • 2.13 improves Scala in the following areas:
  • Collections: Standard library collections have been overhauled for simplicity, performance, and safety. This is the centerpiece of the release.
  • Standard library: Future is faster and more robust. Elsewhere, useful classes and methods have been added.
  • Language: Literal types, partial unification, by-name implicits, more.
  • Compiler: 5-10% faster, deterministic output, improved optimizer.
  • Collections redesign:
  • Standard library collections have been overhauled for for simplicity, performance, and safety.
  • This is the centerpiece of the release.
  • Most ordinary code that used the old collections will continue to work as-is, except as detailed below.
  • The most important collections changes are:
  • Simpler method signatures
  • No more CanBuildFrom. Transformation methods no longer take an implicit CanBuildFrom parameter.
  • The resulting library is easier to understand (in code, Scaladoc, and IDE code completion).
  • It also makes user code compile faster.
  • A new BuildFrom implicit is used in a handful of places that need it.
  • Simpler type hierarchy
  • No more Traversable and TraversableOnce.
  • They remain only as deprecated aliases for Iterable and IterableOnce.
  • Parallel collections are now a separate module.
  • As a result, GenSeq, GenTraversableOnce, et al are gone.
  • Immutable scala.Seq
  • Seq is now an alias for collection.immutable.Seq
  • Before, it was an alias for the possibly-mutable collection.Seq.
  • This also changes the type of varargs in methods and pattern matches.
  • Arrays passed as varargs are defensively copied. (#6970)
  • Simplified views that work
  • collection.Views have been vastly simplified and should now work reliably.
  • New, faster HashMap/Set implementations
  • Both immutable (d5ae93e) and mutable (#7348) versions were completely replaced.
  • They substantially outperform the old implementations in most scenarios.
  • The mutable versions now perform on par with the Java standard library's implementations.
  • New concrete collections
  • immutable.LazyList replaces immutable.Stream. Stream had different laziness behavior and is now deprecated. (#7558, #7000)
  • immutable.ArraySeq is an immutable wrapper for an array; there is also a mutable version
  • mutable.CollisionProofHashMap guards against denial-of-service attacks (#7633)
  • mutable.ArrayDeque is a double-ended queue that internally uses a resizable circular buffer (scala/collection-strawman#490)
  • New abstract collection type SeqMap
  • immutable.SeqMap provides immutable maps that maintain insertion order. (#7954)
  • Implementations: VectorMap (#6854) and TreeSeqMap (#7146) (in addition to the already existing ListMap).
  • Additional collections changes:
  • New to(Collection) method
  • Replaces old to[Collection] method.
  • The argument is the companion object of the desired collection type, for example .to(Vector).
  • The API change enables support for all collection types (including Map, BitSet, et al).
  • No more collection.breakOut
  • It required CanBuildFrom, which no longer exists.
  • To avoid constructing intermediate collections, use .view and .to(Collection) instead.
  • List and Vector are safer
  • They now offer safe publication under the Java Memory Model, using releaseFence (#6425)
  • Java interop has moved
  • Extension methods for Scala are now in scala.jdk
  • Explicit converters for Java are in scala.jdk.javaapi
  • The reorganization centralizes all to-and-from-Java converters, including both collection and non-collection types, in a single package.
  • Collection serialization has changed
  • Collections now use the the serialization proxy pattern uniformly whenever possible. (#6676, #7624, scala-dev#562, sbt/sbt#89)
  • In some classloading environments, notably sbt's non-forked test execution, code changes may be needed.
  • Added .unfold
  • This allows constructing a collection or iterator from an initial element and a repeated Option-returning operation, terminating on None.
  • This was added collection companion objects and to Iterator (#6851)
  • Added .lengthIs/.sizeIs and .sizeCompare
  • These allow fluent size comparisons without traversing the whole collection (#6950, #6758)
  • Examples: xs.sizeIs < 10, xs.sizeIs == 2
  • Improved support for extension methods on collections
  • Offered via IsIterable et al (#6674)
  • Error-prone Map methods deprecated
  • Deprecated .filterKeys and .mapValues (#7014)
  • Instead, use the new methods of the same names on MapView (e.g. .view.filterKeys)
  • Added .lazyZip
  • Together with .zip on views, this replaces .zipped (now deprecated). (scala/collection-strawman#223)
  • Deprecated symbolic methods with multiple arguments
  • This is because such methods may be disallowed entirely in a future Scala (#6719)
  • Adding custom collections and operations works very differently
  • See documentation links below.
  • To learn more about the new APIs and how to adapt your code, consult:
  • Scala 2.13's Collections
  • Intro for newcomers. Skip if the collections from Scala 2.12 and earlier are already familiar to you.
  • The Architecture of Scala 2.13 Collections
  • Implementing Custom Collections (Scala 2.13)
  • Adding Custom Collection Operations (Scala 2.13)
  • Migrating a Project to 2.13's Collections.
  • This document describes the main changes for collection users that migrate to Scala 2.13 and shows how to cross-build on Scala 2.11/12/13.
  • scala-collection-compat
  • This new module provides shims for cross-building on Scala 2.11/12/13.
  • It also provides two sets of Scalafix rewrites: one for cross-building, one for moving to 2.13 only.
  • We welcome assistance in continuing to expand and improve these documents.
  • Concurrency:
  • Futures were internally redesigned, with these goals:
  • provide expected behavior under a broader set of failure conditions
  • provide a foundation for increased performance
  • support more robust applications
  • Details:
  • Updated and revised our Future and Promise implementation. (#6610, #7663)
  • Among other changes, handling of InterruptedException and RejectedExecutionException is improved.
  • Made the global ExecutionContext “batched”. (#7470)
  • Added synchronous ("parasitic") ExecutionContext. (#7784)
  • Standard library: additions:
  • Integrated Java interop (#7987)
  • The old scala-java8-compat module is now part of the standard library. (#7458)
  • This provides converters for options, function types and Java streams.
  • (As mentioned above, collection converters such as JavaConverters were moved to fit into the new scheme.)
  • new: scala.util.Using
  • This provides a simple form of automatic resource management. (#6907)
  • new: .toIntOption, et al
  • These new extension methods on String are provided by StringOps.
  • They parse literals and efficiently reject invalid input without throwing exceptions. (#6538)
  • Examples: "12".toIntOption => Some(12), "12.3".toIntOption => None, "12.3".toDoubleOption => Some(12.3)
  • new: named Product elements
  • Case classes and other Products now have productElementNames and productElementName methods. (#6972)
  • new: .withRight, .withLeft
  • These methods on Left and Right allow upcasting the other type parameter (#7011, #7080)
  • Example: Left(3).withRight[String] has type Either[Int, String] without having to write Int
  • new: Ordering.Double.TotalOrdering, Ordering.Float.TotalOrdering
  • The old orderings remain available at: Ordering.Double.IeeeOrdering, Ordering.Float.IeeeOrdering
  • Example: List(2.0, 1.0).sorted is now ambiguous without specifying an ordering
  • new: pipe and tap
  • These chaining operations are available via import scala.util.chaining._. (#7007)
  • Example: 3.pipe(_ * 5) evaluates to 15
  • Example: 9.tap(println) first prints 9, then returns it
  • Standard library: changes:
  • Library fits in compact1 profile
  • This reduces deployment footprint for Scala applications. (#6164, scala/bug#10559)
  • Option extends IterableOnce
  • This improves type inference when calling an overloaded flatMap. (#8038)
  • Standard library: deprecations and removals:
  • String-building using + with a non-String type on the left (aka any2stringadd) is now deprecated (#6315, #6755)
  • PartialFunction.fromFunction replaces PartialFunction.apply (#6703)
  • Right projections on Either are now deprecated (#6682, #8012)
  • The following modules are no longer included in the distribution: scala-xml, scala-parser-combinators, scala-swing.
  • They remain available from Maven Central.
  • Assorted deprecated methods and classes throughout the standard library have been removed entirely.
  • Language changes:
  • 2.13 is primarily a library release, not a language/compiler release. Regardless, some language changes are included:
  • Features:
  • Literal types
  • Literals (for strings, integers, and so on) now have associated literal types. (#5310)
  • See the original proposal, SIP-23, for motivation and details.
  • The compiler will provide instances of a new typeclass scala.ValueOf[T] for all singleton types T.
  • The value of a singleton type can be accessed by calling method valueOf[T]. Example: val one: 1 = valueOf[1]
  • Partial unification on by default
  • Improves type constructor inference, fixes SI-2712.
  • We recommend this [great explanation of this feature] (https://gist.github.com/djspiewak/7a81a395c461fd3a09a6941d4cd040f2).
  • This feature is no longer considered experimental (#5102)
  • The compiler no longer accepts -Ypartial-unification.
  • By-name implicits with recursive dictionaries
  • This extends by-name method arguments to support implicit (not just explicit) parameters.
  • This enables implicit search to construct recursive values.
  • The flagship use-case is typeclass derivation.
  • Details: see the by-name implicits SIP, #6050, #7368
  • Underscores in numeric literals
  • Underscores can now be used as a spacer. (#6989)
  • Example: 1_000_000
  • Experimental features:
  • Macro annotations
  • There is no more "macro paradise" compiler plugin for 2.13.
  • Instead, macro annotations are handled directly by the compiler.
  • Macro annotations are enabled with the -Ymacro-annotations flag. #6606
  • Macro annotations remain experimental.
  • Deprecations:
  • Procedure syntax deprecated
  • Deprecated: def m() { ... }) #6325
  • Use instead: def m(): Unit = { ... }
  • View bounds deprecated
  • Deprecated: A <% B (#6500)
  • Use instead: (implicit ev: A => B)
  • Adjustments:
  • Explicit imports now shadow locally defined identifiers. (#6589)
  • This is a breaking change.
  • Better typing for overloaded higher-order methods (#6871, #7631)
  • This change was a key enabler for the new collections design.
  • Rework unification of Object and Any in Java/Scala interop (#7966)
  • Name-based pattern matching has changed to enable immutable Seq matches (#7068)
  • Automatic eta-expansion of zero-argument methods is no longer deprecated (#7660)
  • Improve binary stability of extension methods (#7896)
  • Macros must now have explicit return types (#6942)
  • Mixin fields with trait setters are no longer JVM final (#7028)
  • In addition, object fields are now static (#7270)
  • Support implicitNotFound on parameters (#6340)
  • Disallow repeated parameters except in method signatures (#7399)
  • x op () now parses as x.op(()) not x.op() (#7684)
  • Compiler:
  • Deterministic, reproducible compilation
  • The compiler generates identical output for identical input in more cases, for reproducible builds. (scala-dev#405)
  • Optimizer improvements
  • Operations on collections and arrays are now optimized more, including improved inlining. (#7133)
  • And:
  • Scaladoc supports setting canonical URLs (#7834)
  • This helps search engines identify the most relevant/recent version of a page when several versions are available.
  • Compiler suggests possible corrections for unrecognized identifiers (#6711)
  • Example: List(1).sizzle => value sizzle is not a member of List[Int], did you mean size?
  • Added -Yimports for custom preamble imports. (#6764)
  • Example: -Yimports:x,y,z means x, y, and z are root imports of the form: import x._ { import y._ { import z._ { ... } } }
  • The scala-compiler JAR no longer depends on scala-xml (#6436)
  • Plus, changes to compiler options:
  • Replaced -warn-option with -Woption (#7908)
  • Promoted -deprecation to -Xlint:deprecation (#7714)
  • Deprecated -Xfuture (#7328)
  • Instead, use e.g. -Xsource:2.14
  • Removed -Xmax-classfile-length
  • It's hard-coded to 240 now (#7497)
  • Scripting and environment:
  • The script runner (scala Script.scala) no longer uses the fsc compilation daemon by default. (#6747)
  • The daemon was not reliable and will likely be removed entirely from a future release.
  • JEP 293 style long command-line options are now supported (#6499)
  • The REPL has undergone an internal refactoring to enable future improvements (#7384)
  • Compiler performance:
  • We invested heavily in compiler speedups during the 2.13 cycle, but most of that work actually already landed in the 2.12.x series, with more to come in 2.12.9.
  • In addition, the compiler performance in 2.13 is 5-10% better compared to 2.12, thanks mainly to the new collections. See performance graph.
  • Also, certain kinds of code now compile much faster because the compiler aggressively prunes polymorphic implicits during search (#6580).
  • Compatibility:
  • Like Scala 2.12, the 2.13 series targets Java 8, minimum. Both 2.12 and 2.13 also work on later JDKs such as JDK 11; see our JDK Compatibility Guide.
  • Although Scala 2.11, 2.12, and 2.13 are mostly source compatible to facilitate cross-building, they are not binary compatible. This allows us to keep improving the Scala compiler and standard library.
  • All 2.13.x releases will be fully binary compatible with 2.13.0, in according with the policy we have followed since 2.10.
  • The list of open-source libraries released for Scala 2.13 is growing quickly!
  • Projects built with sbt must use at least sbt 1.2.8 (or 0.13.18) to use Scala 2.13. To move to 2.13, bump the scalaVersion setting in your existing project.
  • Scala also works with Maven, Gradle, and other build tools.

New in Scala 2.12.8 (Dec 6, 2018)

  • 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 (PR #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 27, 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)
  • 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 31, 2018)

  • Collections changes:
  • The major collections changes already landed in M4. See the M4 release notes for a summary.
  • To learn more about those changes and how to adapt your code, take a look at the FAQ wiki page. This document is intended for library maintainers and assumes familiarity with the 2.12 Scala collections. Additional documentation will become available soon.
  • Here's the biggest additional collections changes since M4:
  • The new CHAMP-based HashMap and HashSet implementations are now the default (#7074)
  • 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)
  • Added immutable maps that maintain insertion order (VectorMap/SeqMap) (#6854), but note that VectorMaps remove method was found to be incorrect; the next release will have a fix.
  • 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)

  • The main highlight is:
  • Macros work again when compiling on Java 9 or 10, fixing 2.12.5 regression

New in Scala 2.12.5 (Mar 20, 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: #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: #6124.
  • The raw"" and s"" string interpolators are now intercepted by the compiler to produce more efficient bytecode. PR: #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: #6412, #6314. (thanks @xeno-by and @jvican!)
  • Further highlights:
  • The apply method on the PartialFunction companion object is now deprecated. PR: #6005.
  • Scala JARs (library, reflect, compiler) now have an Automatic-Module-Name attribute in their manifests. PR: #6395.
  • Enabling unused warnings now leads to fewer false positives. (thanks @som-snytt!) PR: #6190.
  • Explicit eta-expansion (foo _) of a nullary method no longer gives a deprecation warning. PR: #6177.
  • For more details, check out all closed bugs and merged PRs.
  • Compiler performance since 2.12.4 is stable.
  • As usual for minor releases, Scala 2.12.5 is binary compatible with the whole Scala 2.12 series.

New in Scala 2.13.0-M1 Development (Jul 31, 2017)

  • The parallel collections are now a separate module. There are instructions on the linked page for adding the dependency to your build.
  • The following modules are no longer included in the distributionscala-swing, scala-parser-combinators. (They remain available from Maven Central.) We also no longer build or publish scala-library-all.jar.
  • Remove deprecated stuff from Predef, scala._, scala.runtime
  • Eliminate non-matching overloads early for partial function literals
  • Added Java 1.6. and 1.8 java.lang.Math methods into scala.math package (scala/bug#9813)
  • 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.2 (Jul 25, 2017)

  • 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 both directions 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 through code generation. No class file is generated for a lambda; invokedynamic is used instead.
  • This release ships with a powerful new optimizer:
  • Inlining: many more (effectively) final methods, including those defined in objects and traits, are now inlined.
  • Closure allocations, dead code, and box/unbox pairs are eliminated more often.
  • For additional features, read on.

New in Scala 2.12.0-M2 Development (Aug 22, 2015)

  • Java 8 is now required.
  • Lambdas are compiled to Java 8 style closures.

New in Scala 2.11.7 (Jun 26, 2015)

  • We would like to highlight the following changes:
  • 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 6, 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).

New in Scala 2.11.5 (Jan 15, 2015)

  • Scala 2.11.5 is a bugfix release that is binary compatible with previous releases in the Scala 2.11 series. We would like to highlight the following changes:
  • 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
  • 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.4 (Nov 11, 2014)

  • Scala shell (REPL) is more friendly to Crtl+D. It leaves your terminal in a clean state and suggests using :quit the next time.
  • REPL uses different colors when printing references to vals and types. Pass -Dscala.color to enable that behavior.
  • The Scala specification received a fair amount of love and became much more beautiful. It has got syntax highlighting, linkable headers, and a side bar with TOC. A few final touches has been merged that fix typos and mistakes stemming from automatic Latex to Markdown conversion we’ve done a while ago.
  • Non-deterministic pattern matching warnings has been fixed (SI-7746).

New in Scala 2.11.2 (Jul 24, 2014)

  • The changes include:
  • 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.
  • TypeTags and Exprs are now serializable (SI-5919).
  • Compared to 2.11.1, this release resolves 49 issues. We reviewed and merged 70 pull requests.

New in Scala 2.10.4 RC3 (Feb 27, 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 RC2 (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.11.0-M7 (Dec 27, 2013)

  • It brings the following goodness:
  • delambdafication (compiling closures Java 8-style, as close as you can get on Java 6) by @jamesiry
  • blackbox/whitebox macro distinction by @xeno-by,
  • collection deprecation and mutable LongMap/AnyRefMap by @ichoran,
  • several IDE improvements by @dotta (positions for default args, docs on how to hack the compiler in the IDE) and @skyluc (completion for imports)
  • for loop support in quasiquotes by @densh
  • Experimental Single Abstract Method support

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-RC2 (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: for (req < - WS.url(restApiUrl).get()) yield (req.json \ "users").as[List[User]] (uses play!)
  • 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.2 RC1 (May 23, 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.1 RC1 (Feb 15, 2013)

  • Commits and the issues they fixed since v2.10.0:
  • Revert "SI-6548 reflection now correctly enters jinners"
  • Revert "SI-4664 Make scala.util.Random Serializable"
  • Revert "Fixes SI-6521, overrides Range#head to be faster"
  • SI-5675 Discard duplicate feature warnings at a position
  • SI-6591 Reify and path-dependent types
  • SI-7096 SubstSymMap copies trees before modifying their symbols
  • SI-6961 no structural sharing in list serialization
  • SI-6187 Make partial functions re-typable
  • [backport] SI-6478 Fixing JavaTokenParser ident
  • SI-7100 Fixed infinite recursion in duplicators
  • SI-6146 More accurate prefixes for sealed subtypes.
  • SI-5082 Cycle avoidance between case companions
  • SI-6113 typeOf now works for type lambdas
  • SI-5824 Fix crashes in reify with _*
  • SI-7026: parseTree should never return a typed one
  • Revert "SI-5017 Poor performance of :+ operator on Arrays"
  • SI-7070 Turn restriction on companions in pkg objs into warning
  • SI-6773 Makes the SI-6150 changes binary compatible with 2.10
  • SI-7060 More conservative dead code elim marking
  • SI-6888 Loosen criteria for $outer search.
  • SI-6989 privateWithin is now populated in reflect
  • [nomerge] SI-6667 Demote a new ambiguity error to a lint warning.
  • SI-5833 Fixes tail-of-Nil problem in RefinedType#normalizeImpl
  • Revert "SI-6422: add missing Fractional and Integral alias in scala package"
  • Class symbols can't be contravariant.
  • SI-1803, plus documentation and cleanups in Namers, mainly in typeSig
  • SI-6017 Scaladoc: Show all letters without dangling links
  • SI-6017 Generate Scaladoc's index links in Scala side
  • SI-5313 Minor code cleanup for store clobbering
  • SI-5313 Test clobbers on the back edge of a loop
  • SI-6666 Catch VerifyErrors in the making in early defs.
  • Add a test case from the comments of SI-6666.
  • SI-6666 Account for nesting in setting INCONSTRUCTOR
  • SI-7033 Be symful when creating factory methods.
  • SI-7022 Additional test case for value class w. bounds
  • [backport] SI-6482, lost bounds in extension methods.
  • SI-7039 unapplySeq result type independent of subpattern count
  • SI-7008 @throws annotations are now populated in reflect
  • Fix SI-6578. Deprecated `askType` because of possible race conditions in type checker.
  • SI-7029 - Make test more robust
  • SI-4714 Initialize history while initializing the REPL's reader
  • SI-2818 Make List.foldRight always do a reverse/foldLeft flip
  • SI-3353 don't extract into named-arg local val
  • SI-7029 - Makes sure that uncaught exceptions are propagated to the UEH for the global ExecutionContext
  • SI-6686 drop valdef unused in flatMapCond's block
  • don't store subpats bound to underscore
  • SI-7046 reflection now auto-initializes knownDirectSubclasses
  • [backport] Removed restriction on final vars, SI-2418.
  • SI-6812 scaladoc can opt out of expanding macros
  • SI-6539 moves @compileTimeOnly away from scala-reflect
  • SI-6669 Add . to the default scalap classpath
  • SI-6728 Fixes crash in parser on incomplete for expression
  • SI-6516, macros comparing types with == instead of =:=.
  • SI-7009: `@throws` annotation synthesized incorrectly
  • SI-5313 Eliminate more stores by replacing clobbers with null stores
  • SI-6726 Further optimization of pattern analysis
  • SI-6726 Hash consing for Pattern matching Sym-s
  • SI-6726 Add benchmark used for testing pattern matcher.
  • SI-6595, lost modifiers in early defs.
  • SI-6584, Stream#distinct uses too much memory.
  • SI-6426, importable _.
  • SI-6072, crasher with overloaded eq.
  • SI-5604, selections on package objects.
  • SI-5859, inapplicable varargs.
  • SI-5353, imperfect error message.
  • SI-5130, precision disappearing from refinement.
  • SI-4729, overriding java varargs in scala.
  • SI-2418, remove restriction on final vars.
  • Test case for SI-7009.
  • SI-6551 Expand test case into uncomfortable areas.
  • SI-6651 Substitute `this` in extension method sigs
  • SI-6963 Add version to -Xmigration
  • [backport] Disabled SI-6987.
  • [backport] Fix for SI-6154, VerifyError originating in uncurry.
  • SI-6572 Test case, originally fixed in a3680be.
  • [backport] SI-6301 / SI-6572 specialization regressions
  • SI-5313 Do not eliminate stores that potentially wipe referenes
  • [backport] SI-5378, unsoundness with type bounds in refinements.
  • SI-7035 Centralize case field accessor sorting.
  • SI-6968 Simple Tuple patterns aren't irrefutable
  • SI-4602 Disable unreliable test of fsc path absolutization
  • A test case to guide the eventual fix for SI-6601.
  • SI-7018 Fix memory leak in Attachments.
  • SI-4733 - fsc no longer creates a single temp directory for all users.
  • [backport] SI-3577 BoundedWildcardType handling
  • [backport] SI-2968 Fix brace healing for `^case (class|object) {
  • [backport] Fix for SI-6206, inconsistency with apply.
  • SI-6891 Fix value class + tailrec crasher.
  • Revert "SI-6601 Publicise derived value contstructor after pickler"
  • SI-4602 Make fsc absolutize source file names
  • SI-6863 Fix verify error in captured var inited from expr with try/catch
  • SI-6853 changed private method remove to be tail recursive. Operations += and -= on mutable.ListMap rely on the private method remove to perform. This methods was implemented using recursion, but it was not tail recursive. When the ListMap got too big the += caused a StackOverflowError.
  • SI-6969, mishandling of SoftReferences in method cache.
  • SI-6434 Pretty print function types with by name arg as (=> A) => B
  • SI-7011 Fix finding constructor type in captured var definitions
  • [backport] SI-6567 Warning for Option(implicitView(foo))
  • [backport] Fix unsafe array opt. / opt. primitive Array(...)
  • [backport] Fix SI-6637 (misoptimization in erasure)
  • SI-6987 Tests fsc verbose output
  • SI-6987 Fixes fsc compile server verbose output
  • SI-6932 Remove Batchable trait plus minor clean-ups
  • Fix SI-6932 by enabling linearization of callback execution for the internal execution context of Future
  • SI-6231 Report unsupported free var capture by a trait.
  • SI-6666 Restrict hidden `this` access in self/super calls.
  • SI-6994 Avoid spurious promiscuous catch warning
  • Addressing warnings.
  • SI-6439 Avoid spurious REPL warnings about companionship
  • SI-6902 Check unreachability under @unchecked
  • SI-6942 more efficient unreachability analysis
  • SI-6601 Publicise derived value contstructor after pickler
  • SI-4976 Scaladoc: Add a source link to package objects
  • SI-6976 Fix value class separate compilation crasher.
  • SI-6443 Expand test coverage with varargs, by-name.
  • SI-6443 Widen dependent param types in uncurry
  • SI-6017 Scaladoc's Index should be case-sensitive
  • Closes SI-6952: add correct error positions for Dynamic feature check.
  • SI-6956 determine switchability by type, not tree
  • SI-5568 Comment improvements for getClass on primitive intersection.
  • SI-5568 Fixes verify error from getClass on refinement of value type
  • SI-6675 Test new warning under -Xoldpatmat.
  • SI-6675 -Xlint arity enforcement for extractors
  • SI-6905 - Switch to sneakyThrows instead of Unsafe.throwException as per new jsr166y to avoid issues with Android
  • SI-6963 Deprecates -Xmigration switch
  • SI-5954 Implementation restriction preventing companions in package objs
  • SI-6479 Don't lift try exprs in label arguments.
  • SI-6082 Conditionally expand @ann(x) to @ann(value = x)
  • SI-6126 Test case for varargs of tagged primitives.
  • SI-5440 Test case for exhaustiveness check
  • SI-5340 Change println to log
  • SI-6955 switch emission no longer foiled by type alias
  • SI-6925 use concrete type in applyOrElse's match's selector
  • SI-5189 detect unsoundness when inferring type of match
  • SI-6946, SI-6924 79a722feb9 SI-6946, SI-6924 Greatly improves IsTraversableLike docs
  • SI-6555 Scaladoc's class filter shouldn't drop the last character
  • Backport of SI-6846.
  • Fixes SI-6521, overrides Range#head to be faster
  • SI-6641 Deprecate SwingWorker
  • SI-6930 adds documentation to reduceLeft in TraversableOnce
  • SI-6912 Avoid a typer cycle in overload resolution.
  • SI-6928, VerifyError with self reference to super.
  • SI-6923 Context now buffers warnings as well as errors
  • SI-6803: do not use java.net.URI, even more so incorrectly.
  • SI-6915 Updates copyright properties to 2002-2013
  • Fix Iterator#copyToArray (fixes SI-6827).
  • SI-6911, regression in generated case class equality.
  • SI-6897, lubs and varargs star.
  • SI-6896, spurious warning with overloaded main.
  • SI-6415, overly eager evaluation in Stream.
  • SI-6194, repl crash.
  • SI-6829, SI-6788, NPEs during erroneous compilation.
  • SI-5017 Poor performance of :+ operator on Arrays
  • SI-6288 Remedy ill-positioned extractor binding.
  • SI-6288 Fix positioning of label jumps
  • SI-6288 Position argument of unapply
  • Fixes SI-6758: force LazyAnnnotationInfo for DefDef and TypeDef
  • SI-5841 reification of renamed imports
  • SI-6795 Simplify errors related to "abstract override" on type members
  • SI-6795 Adds negative check for "abstract override" on types in traits
  • SI-4922 Show default in Scaladoc for generic methods.
  • SI-6555 Better parameter name retention
  • SI-6614 Test case for fixed ArrayStack misconduct.
  • SI-6690 Release reference to last dequeued element.
  • SI-5789 Use the ReplTest framework in the test
  • SI-5789 Checks in the right version of the test
  • SI-5789 Removes assertion about implclass flag in Mixin.scala
  • SI-6548 reflection now correctly enters jinners
  • SI-6766 Makes the -Pcontinuations:enable flag a project specific preference
  • SI-6696 removes "helper" tree factory methods
  • SI-6766 Create a continuations project in eclipse
  • SI-6746 Fixes MANIFEST.MF package entry (s.r.makro -> s.r.macros)
  • SI-6338 fixes the unchecked warning in quick.comp
  • SI-5894 Don't emit static forwarders for macros.
  • SI-1672 Catches are in tail position without finally.
  • SI-5361 Refactor in accordance with review comments.
  • SI-3995 Exclude companions with an existential prefix.
  • SI-5390 Detect forward reference of case class apply
  • SI-5361 Avoid cyclic type with malformed refinement
  • SI-5877 Tweak the check for package object owner.
  • tests for idempotency issues in the typechecker
  • SI-5877 Support implicit classes in package objects
  • Adds debug logging for synthetic registration.
  • SI-6535 Step back from the precipice of a cycle
  • SI-4664 [Make scala.util.Random Serializable] Add test case
  • SI-6549 Improve escaping in REPL codegen.
  • SI-6547: elide box unbox pair only when primitives match
  • SI-6558 Expand test case for annotation typos
  • Fixes SI-6558: typecheck lazy annotation info using non-silent context.
  • SI-6631 Handle invalid escapes in string interpolators
  • SI-4664 Make scala.util.Random Serializable
  • Test cases for SI-5726, SI-5733, SI-6320, SI-6551, SI-6722.
  • Fix for SI-6731, dropped trees in selectDynamic.
  • SI-5753 macros cannot be loaded when inherited from a class or a trait
  • SI-5678 Bad return type for [Use Case] docs in Range
  • SI-6667 Abort after any ambiguous in-scope implicit
  • SI-6718 fixes a volatile test
  • Fix for SI-6712, bug in object lifting.
  • Fix for SI-6687, wrong isVar logic.
  • Fix for SI-6706, Symbol breakage under GC.
  • SI-6023 reify abstract vals
  • SI-6695 Test case for fixed Array match bug
  • Fix for SI-6357, cycle with value classes.
  • SI-6673 fixes macro problems with eta expansions
  • SI-6677 Insert required cast in `new qual.foo.T
  • SI-6663: don't ignore type parameter on selectDynamic invocation
  • SI-6551: don't insert apply call in polymorphic expression.
  • SI-6634 Fixes data corruption issue in ListBuffer#remove
  • Fixes SI-6150 - backport to 2.10.x branch.
  • SI-5330, SI-6014 deal with existential self-type
  • Fix for SI-6662, macro failing too early.
  • better error when typetagging local classes
  • SI-6632 SI-6633 Fixes issues and data corruption in ListBuffer
  • SI-6539 Annotation for methods unfit for post-typer ASTs
  • SI-6616 Check that unsafe operations are only called on the presentation compiler thread.
  • Fix for SI-6597, implicit case class crasher.
  • Fixes SI-6559 - StringContext not using passed in escape function.
  • SI-6488: Stop I/O threads prior to Process destruction
  • Added one more test for SI-6358
  • Closes SI-6358. Move accessor generation for lazy vals to typers.
  • SI-6422: add missing Fractional and Integral alias in scala package

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 (Dec 3, 2012)

  • 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)

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.2 Final (Jul 13, 2012)

  • Backport fix for SI-4545, SI-5633.
  • Document regex replacement strings behavior.
  • Fix for a bug in CharArrayReader which made tri...
  • Revert attempt to limit private types in lubs.
  • Fixes SI-5380: non-local return of try expression (cherry picked from commit 02e260a8e67e2b2b6f876aafe76cd61248a89374)
  • Add test case for SI-4835 (https://issues.scala-lang.org/browse/SI-4835)
  • Fixed SI-4835 (https://issues.scala-lang.org/browse/SI-4835).
  • Fixes NPE using iterator with an XML attribute ...
  • Fix various InnerClasses bugs.
  • Close file descriptor leak in sys.process.
  • fixes SI-5506. better cps type propagation for polymorphic and multi-argument list methods.
  • Fix for error printing regression.
  • Migration message and version cleanup
  • Improve description of flatten, flatMap
  • Explain Function1 vs PartialFunction
  • Fixes SI-4507.
  • Fixes to javascript in Scaladoc, contributed by...
  • Scaladoc now hides members with @bridge annotat...
  • Improves the usability of Scaladoc when images ...
  • Minor changes to the Scaladoc stylesheets, as s...
  • Scaladoc shouldn't drop type arguments to alias...
  • Fixes SI-4641 again.
  • Backported commit 7a99c03da1d31ac5950eecb30f422f43c5e3d04e from master

New in Scala 2.9.1-1 Final (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)

  • 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!).
  • Closed tickets:
  • 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.0.1 (Jul 26, 2011)

  • Parallel Collections:
  • Every collection may be converted into a corresponding parallel collection with the new `par` method. Parallel collections utilize multicore processors by implementing bulk operations such as `foreach`, `map`, `filter` etc. in parallel. Parallel collections are located in the package `scala.collection.parallel`.
  • Depending on the collection in question, `par` may require copying the underlying dataset to create a parallel collection. However, specific collections share their underlying dataset with a parallel collection, making `par` a constant time operation.
  • Currently available parallel collections are -
  • parallel arrays - scala.collection.parallel.mutable.ParArray
  • parallel ranges - scala.collection.parallel.immutable.ParRange
  • parallel hash maps - scala.collection.parallel.mutable.ParHashMap
  • parallel hash sets - scala.collection.parallel.mutable.ParHashSet
  • parallel hash tries - scala.collection.parallel.immutable.{ParHashMap, ParHashSet}
  • parallel vectors - scala.collection.parallel.immutable.ParVector
  • The method `seq` is used to convert from a parallel collection to a corresponding sequential collection. This method is always efficient (O(1)).
  • The App Trait:
  • The App trait is a safer, more powerful alternative to the previous Application trait, which has now been deprecated. The new recommended way to write a top-level application is like this:
  • object Echo extends App {
  • println("Echo" + (args mkString " "))
  • Objects inheriting from the old Application trait were almost as convenient to write, but were not thread-safe and were often not optimized by the VM, since the application’s body was execited as part of of the object’s initialization sequence. Objects inheriting the App trait instead make use of Scala 2.9’s delayed initialization feature to execute the whole body as part of an inherited main method.
  • Another new feature of the App scheme is that command line arguments are now accessible via the args value (which is inherited from trait App)
  • The DelayedInit Trait
  • The DelayedInit trait provides another tool to customize initialization sequences of classes and objects. If a class or object inherits from this trait, all its initialization code is packed in a closure and forwarded as an argument to a method named delayedInit which is defined as an abstract method in trait DelayedInit.
  • Implementations of delayedInit have thus full freedom when to execute the initialization code. For instance, Scala’s new App trait stores all initialization sequences in an internal buffer and executes them when the object’s main method is called.
  • Note that only initialization code contained in classes and objects is passed to DelayedInit; initialization code contained in traits is not affected.
  • Repl Improvements
  • Improvements in jline, the repl input handler. More robust cursor handling, bash-style ctrl-R history search, new commands like :imports, :implicits, :keybindings. On platforms with the necessary runtime support, :javap will disassemble any class including repl-defined ones. A long-running repl command can now be interrupted via ctrl-C without terminating the repl session. Improved programmability: the repl classloader exposes repl-defined classes via their given names.
  • Scala Runner
  • Scala code can now be executed in any of the following ways -
  • scala will run the main class, similar to java -jar
  • scala will run the main method of that class
  • scala will run the script contents as a scala script
  • scala will, if the contents are not a script, find a single main method in a top level object and run that. This allows the same file to be used with scalac and to be run directly.
  • scala -save will create a jar file with the compiled source, which is then reusable and can be run as scala
  • Java Interop:
  • The @strictfp annotation is now supported.
  • Various fixes in JavaConverters and JavaConversions for smoother interoperation.
  • Primitive types and their boxed versions are now implicitly converted bidirectionally.
  • Other features:
  • Generalized try-catch-finally -
  • try body
  • catch handler
  • finally cleanup
  • Here, body and cleanup can be arbitrary expressions, and handler can be any expression which evaluates to a valid exception handler (which is: PartialFunction[Throwable, T]).
  • New packages
  • scala.sys and scala.sys.process, which are imported from sbt.Process.
  • New methods in collections
  • collectFirst, maxBy, minBy, span, inits, tails, permutations, combinations, subsets
  • AnyRef specialization
  • It’s now possible to specialize on type parameters for subtypes of AnyRef (class Foo[@specialize(AnyRef) T](arr: Array[T]) { … }), which allows for more efficient array indexing and updates.