Skip to content

chore(deps): update dependency scala to v2.13.17

This MR contains the following updates:

Package Change Age Confidence
scala (source) 2.12.17 -> 2.13.17 age confidence
scala (source) 2.12.20 -> 2.13.17 age confidence

Release Notes

scala/scala (scala)

v2.13.17: Scala 2.13.17

Compare Source

[wip] to be announced — follow https://contributors.scala-lang.org/t/scala-2-13-17-release-planning/6994

v2.13.16: Scala 2.13.16

Compare Source

The Scala team at Akka (formerly Lightbend) is pleased to announce Scala 2.13.16.

The following changes are highlights of this release:

Breaking change
  • On the empty string, .tail and .init now throw (instead of returning the empty string) (#​10851 by @​sh0hei)
    • This is a bugfix, but be aware that existing code might, perhaps inadvertently, be relying on the old behavior
Compatibility
REPL
  • REPL: JLine 3.27.1 (was 3.26.3) and on Windows use JNI not JNA (#​10899, #​10898, #​10882)
    • These upgrades hopefully won't be noticed, but, REPL users on Windows take note
    • JNA is no longer a dependency of scala-compiler.jar
Align with Scala 3
Errors and warnings
Collections
  • Do not use rangeHash when rangeDiff is 0 (#​10912 by @​Friendseeker)
    • This may affect fragile code relying on ordering of hash-based collections
  • Deprecate collection.mutable.AnyRefMap (#​10862 by @​wangyum)
    • Since Scala 2.13.0 it has no performance advantage over collection.mutable.HashMap
More changes

For the complete 2.13.16 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.16 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for many of the improvements in this release.

This release was brought to you by 19 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.15 ^2.12.x. Thank you A. P. Marki, Seth Tisue, Scala Steward, Lukas Rytz, Friendseeker, Ondra Pelech, Philippus Baalman, Benjamin Maurer, Corey O'Connor, Eric Seidel2, Hamza Remmal, Jamie Thompson, João Costa, Kenji Yoshida, Mathias Kools, Rikito Taniguchi, Yuming Wang, rochala, sh0hei.

Thanks to Akka for their continued sponsorship of the Scala 2 team’s efforts. Akka offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the using scala setting in your Scala-CLI project
  • Bump the scalaVersion setting in your sbt or Mill project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.13.15: Scala 2.13.15

Compare Source

The Scala team at Lightbend is pleased to announce Scala 2.13.15.

The following changes are highlights of this release:

Breaking changes
  • -Wconf:x,y now means -Wconf:x -Wconf:y, with y overruling x, rather than the reverse (to align with Scala 3.4+ and with user intuition) (#​10708 by @​som-snytt)
  • Compiler plugins: rework and improve phase assembly (#​10687 by @​som-snytt)
    • Plugin authors should check to see if they are affected
    • Plugin users may see strange errors if a plugin is affected and not adjusted by its author
    • Most plugins are not affected
Compatibility
Features
Align with Scala 3
Errors and warnings
More changes

For the complete 2.13.15 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.15 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for many of the improvements in this release.

This release was brought to you by 13 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.14 ^2.12.x. Thank you A. P. Marki, Lukas Rytz, Scala Steward, Seth Tisue, Jamie Thompson, Stefan Zeiger, Hamza Remmal, EnzeXing, Marissa, Philippus Baalman, Samuel Chassot, luozexuan, nbauma109.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the using scala setting in your Scala-CLI project
  • Bump the scalaVersion setting in your sbt or Mill project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.13.14: Scala 2.13.14

Compare Source

The Scala team at Lightbend is pleased to announce Scala 2.13.14.

The following changes are highlights of this release:

Align with Scala 3
  • Introduce -Xsource-features, for customizing the behavior of -Xsource:3 and -Xsource:3-cross (#​10709)
    • A section of the Scala 3 Migration Guide documents these flags: documentation
Regression fixes
  • Rename -Xlint:named-booleans to -Wunnamed-boolean-literal (and no longer include it in -Xlint) (#​10704 by @​som-snytt)
  • Fix ArrayBuilder regression in Scala 2.13.13 (OutOfMemoryError when adding empty arrays) (#​10722 by @​som-snytt)
  • Fix 2.13.13 regression in Scaladoc compilation when using Scala 3 definitions (#​10700 by @​bishabosha)
Other improvements
More changes

For the complete 2.13.14 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.14 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for many of the improvements in this release.

This release was brought to you by 9 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.13 ^2.12.x. Thank you A. P. Marki, Lukas Rytz, Seth Tisue, Scala Steward, Jamie Thompson, Antoine Amiguet, Heikki Vesalainen, Robert Stoll, guqicun.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the using scala setting in your Scala CLI project
  • Bump the scalaVersion setting in your sbt or Mill project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.13.13: Scala 2.13.13

Compare Source

The Scala team at Lightbend is pleased to announce Scala 2.13.13.

The following changes are highlights of this release:

Language
Compatibility
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)
    • A new section in the Scala 3 Migration Guide documents -Xsource:3 and -Xsource:3-cross: documentation
  • 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
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 new doc page for details
  • Some library authors who were already using -Xsource:3 are getting MiMa failures when upgrading to 2.13.13 and switching from -Xsource:3 to -Xsource:3-cross. If you’re in this situation, you may need to wait for 2.13.14; see scala/bug#12961
  • 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
  • The inclusion of -Xlint:named-booleans in -Xlint (#​10612) has already proved at least somewhat controversial, and will likely be adjusted for 2.13.14; you can leave feedback on this at #​10704
More changes

For the complete 2.13.13 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.13 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for many of the improvements in this release.

This release was brought to you by 23 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.12 ^2.12.x. Thank you A. P. Marki, Lukas Rytz, Jamie Thompson, Seth Tisue, Scala Steward, friendseeker, Paul J Thordarson, Philippus Baalman, Shardul Chiplunkar, Stefan Zeiger, Dale Wijnand, Dmitry Komanov, Eugene Yokota, Georgi Krastev, GerretS, Jason Zaugg, Martijn, Mohammad Yousuf Minhaj Zia, Roberto Tyley, Ryan Scheidter, Trey Cahill, c, Dependabot.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the using scala setting in your Scala CLI project
  • Bump the scalaVersion setting in your sbt or Mill project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.13.12: Scala 2.13.12

Compare Source

The Scala team at Lightbend is pleased to announce Scala 2.13.12.

The following changes are highlights of this release:

Feature: Quickfixes

For some errors and warnings, the compiler now suggests an edit that could fix the issue. Tooling such as IDEs can then offer the edits, or the compiler itself will make the change if run again with -quickfix.

Align with Scala 3
  • Emit migration warnings under -Xsource:3 as fatal warnings, not errors (#​10439 by @​som-snytt, #​10511)
    • -Xmigration will demote the errors to warnings
    • -Wconf:cat=scala3-migration:s will silence these errors/warnings altogether
  • Warn about @elidable under -Xsource:3 (#​10377 by @​som-snytt)
Collections
  • IndexedSeq#head now throws NoSuchElementException (not IndexOutOfBoundsException) (#​10392 by @​som-snytt)
Regression fixes
Scaladoc tool changes

Library authors should be aware that the behavior of -doc-source-url has changed, as follows:

You may need to adjust your build accordingly, to avoid generating broken source links.

Tooling

The following change is mainly of concern to tooling maintainers.

Other notable changes

For the complete 2.13.12 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.12 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for a large share of the improvements in this release.

This release was brought to you by 12 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.11 ^2.12.x ^366ba2f. Thank you A. P. Marki, Lukas Rytz, Seth Tisue, Scala Steward, Michel Davit, Nicolas Stucki, Alex Leigh, Eugene Yokota, Georgi Krastev, Jamie Willis, Julien Richard-Foy, NthPortal.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the using scala setting in your Scala CLI project
  • Bump the scalaVersion setting in your sbt or Mill project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.13.11: Scala 2.13.11

Compare Source

The Scala team at Lightbend is pleased to announce Scala 2.13.11.

The following changes are highlights of this release:

Collections
Compatibility
Align with Scala 3
Lints and warnings
Other notable changes

2.13.11 also includes the changes from Scala 2.12.18. (A few of the most significant, such as those involving JDK 20 and 21 compatibility, are listed above.)

For the complete 2.13.11 change lists, see all merged MRs and all closed bugs.

Known issues

A few regressions have been discovered:

  • Exhaustivity checker emits spurious warning when matching on Java enum type (2.13.11 regression) (scala/bug#12800)
  • Duplicated @Deprecated annotations when extending Java interface with deprecated default method cause java.lang.annotation.AnnotationFormatError when accessed via Java reflection (2.13.11 regression) (scala/bug#12799)

We'll address these in Scala 2.13.12.

Compatibility

As usual for our minor releases, Scala 2.13.11 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for a large share of the improvements in this release.

This release was brought to you by 28 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.10 ^2.12.x. Thank you A. P. Marki, Lukas Rytz, Seth Tisue, Anselm von Wangenheim, Scala Steward, Liang Yan, Jamie Thompson, jxnu-liguobin, AminMal, Jason Zaugg, Kenji Yoshida, Rituraj, ashish, Chris Kipp, Dale Wijnand, Francesco Kriegel, Georgi Chochov, Goooler, João Costa, Kisaragi Marine, Rafał Sumisławski, Ruslans Tarasovs, Simon R, Sébastien Doeraene, Tomasz Godzik, Zhang Zhipeng, danarmak, hepin.p.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the scalaVersion setting in your sbt project
  • Bump the using scala setting in your Scala-CLI project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.13.10: Scala 2.13.10

Compare Source

The Scala team at Lightbend is pleased to announce the availability of Scala 2.13.10.

The following changes are highlights of this release:

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)

For the complete 2.13.10 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.10 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for an especially large share of the improvements in this release.

This release was brought to you by 6 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.9 ^2.12.x. Thank you A. P. Marki, Liang Yan, Seth Tisue, Antoine Parent, Luc Henninger, 梦境迷离.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.9: Scala 2.13.9

Compare Source

The following changes are highlights of this release:

Regression

Library maintainers should avoid publishing libraries using Scala 2.13.9. Please use 2.13.10 instead. 2.13.9 has a regression where binary-incompatible bytecode is emitted for case classes which are also value classes (case class ... extends AnyVal).

Compatibility with Scala 3
  • Tasty Reader: Add support for Scala 3.2 (#​10068)
  • Tasty Reader: Restrict access to experimental definitions (#​10020)
  • To aid cross-building, accept and ignore using in method calls (#​10064 by @​som-snytt)
  • To aid cross-building, allow ? as a wildcard even without -Xsource:3 (#​9990)
  • Make Scala-3-style implicit resolution explicitly opt-in rather than bundled in -Xsource:3 (#​10012 by @​povder)
  • Prefer type of overridden member when inferring (under -Xsource:3) (#​9891 by @​som-snytt)
JDK version support
Warnings and lints
Language improvements
  • Improve support for Unicode supplementary characters in identifiers and string interpolation (#​9805 by @​som-snytt)
Compiler options
Security
  • Error on source files with Unicode directional formatting characters (#​10017)
  • Prevent Function0 execution during LazyList deserialization (#​10118)
Bugfixes
  • Emit all bridge methods non-final (perhaps affecting serialization compat) (#​9976)
  • Fix null-pointer regression in Vector#prependedAll and Vector#appendedAll (#​9983)
  • Improve concurrent behavior of Java ConcurrentMap wrapper (#​10027 by @​igabaydulin)
  • Preserve null policy in wrapped Java Maps (#​10129 by @​som-snytt)

Changes that shipped in Scala 2.12.16 and 2.12.17 are also included in this release.

For the complete 2.13.9 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.9 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

We especially acknowledge and thank A. P. Marki, also known as Som Snytt, who is responsible for an especially large share of the improvements in this release.

This release was brought to you by 27 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.8 ^2.12.x. Thank you A. P. Marki, Lukas Rytz, Seth Tisue, Jamie Thompson, Sébastien Doeraene, Scala Steward, Georgi Krastev, Jason Zaugg, Philippus, Balys Anikevicius, Gilad Hoch, NthPortal, Zhang Zhipeng, Arman Bilge, Dale Wijnand, Dominik Helm, Eric Huang, Guillaume Martres, Harrison Houghton, Krzysztof Pado, Michał Pałka, Zeeshan Arif, counter2015, jxnu-liguobin, mcallisto, naveen, philwalk.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.8: Scala 2.13.8

Compare Source

The Scala team at Lightbend is pleased to announce the availability of Scala 2.13.8.

This is a modest, incremental release focused on addressing regressions in 2.13.7.

Highlights

A few small changes that will ship in 2.12.16 are also included in this release.

For the complete 2.13.8 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.8 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 8 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.7 ^2.12.x. Thank you A. P. Marki, Seth Tisue, Georgi Krastev, Jason Zaugg, Lukas Rytz, Martijn Hoekstra, Philippus Baalman, Chris Kipp.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.7: Scala 2.13.7

Compare Source

The Scala team at Lightbend is pleased to announce the availability of Scala 2.13.7.

Align with Scala 3
JDK and Java compatibility
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
Other changes

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 MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.7 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 25 contributors, according to git shortlog -sn --no-merges @​ ^v2.13.6 ^2.12.x. Thank you A. P. Marki, Lukas Rytz, Seth Tisue, Jason Zaugg, Jamie Thompson, NthPortal, Georgi Krastev, Guillaume Martres, Dale Wijnand, Martijn Hoekstra, Alec Theriault, Rafał Sumisławski, Matt Dziuban, Li Haoyi, Doug Roper, Sébastien Doeraene, VladKopanev, danicheg, dengziming, megri, nwk37011, Magnolia.K, 梦境迷离, Mathias, James Judd.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.6: Scala 2.13.6

Compare Source

The Scala 2 team at Lightbend is pleased to announce the availability of Scala 2.13.6.

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

Some small changes that will ship in 2.12.14 are also included in this release.

For the complete 2.13.6 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.6 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 25 contributors, according to git shortlog -sn --no-merges HEAD ^v2.13.5 ^2.12.x. Thank you A. P. Marki, Lukas Rytz, Dale Wijnand, Jamie Thompson, Seth Tisue, 梦境迷离, Guillaume Martres, Martijn Hoekstra, Denis Rosset, Aaron S. Hawley, Kai, Eugene Yokota, Jason Zaugg, Anatolii Kmetiuk, Ikko Ashimine, superseeker13, Eugene Platonov, Diego E. Alonso Blas, Filipe Regadas, Hatano Yuusuke, Luis Miguel Mejía Suárez, Rafał Sumisławski, Alec Theriault, Tom Grigg, Torsten Schmits.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.5: Scala 2.13.5

Compare Source

Scala 2.13.5

The Scala 2 team at Lightbend is pleased to announce the availability of Scala 2.13.5.

Highlights
Other changes

Some small changes that will ship in 2.12.14 are also included in this release.

For complete 2.13.5 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.5 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 23 contributors, according to git shortlog -sn --no-merges HEAD ^v2.13.4 ^2.12.x. Thank you Seth Tisue, A. P. Marki, Dale Wijnand, NthPortal, Jamie Thompson, Lukas Rytz, Martijn Hoekstra, Georgi Krastev, Jason Zaugg, Jasper Moeys, Sakib Hadziavdic, Anatolii Kmetiuk, Arnaud Gourlay, Marcono1234, Chia-Ping Tsai, Mike Skells, Stefan Zeiger, Waleed Khan, Yann Bolliger, Guillaume Martres, 梦境迷离, Ethan Atkins, Darcy Shen.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.4: Scala 2.13.4

Compare Source

Scala 2.13.4:

  • 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

and more! Details below.

Concurrency

NOTE The following change affects parallelism and performance. If you use scala.concurrent.ExecutionContext.global you may want to adapt your code. (But note that Akka is unaffected, because it uses its own execution contexts.)

In 2.13.0 we made ExecutionContext.global "opportunistic". This enabled "batching" of nested tasks to execute on the same thread, avoiding an expensive context switch. That strategy requires user code to wrap long-running and/or blocking tasks with blocking { ... } to maintain parallel execution.

For 2.13.4, we restore 2.12's default non-batching behavior, which is safer for arbitrary user code. Users wanting increased performance may override the default, if they believe their code uses blocking correctly. We make that choice available via ExecutionContext.opportunistic.

Using ExecutionContext.opportunistic requires a bit of extra boilerplate, made necessary by binary compatibility constraints on the standard library. Detailed instructions are in ExecutionContext.global's Scaladoc.

Further detail: #​9270/#​9296/scala/bug#12089,

Pattern matching

The pattern matcher is now much better at warning you if a match isn't exhaustive.

The following types of matches no longer disable exhaustivity checking:

  • guards (case <pattern> if <condition> => ...) #​9140
  • custom extractors (user-defined unapply or unapplySeq) #​9140/#​9162
  • unsealed types, if you opt in via -Xlint or -Xlint:strict-unsealed-patmat #​9140/#​9299

Additionally,

New warnings reported can be resolved by:

  1. adding any missing cases
  2. in the case of complementary guards (e.g. if n > 0 and if n <= 0) by dropping the last guard
  3. for custom extractors: demarking irrefutable extractors as such, by defining the return type as Some
  4. for sealed types: marking traits or parent classes sealed, parent classes abstract, and classes final
  5. explicitly declaring the default case: case x => throw new MatchError(x)

Otherwise, your options for suppressing warnings include:

  1. annotate the scrutinee with @unchecked, such as (foo: @&#8203;unchecked) match { ... }
  2. disable exhaustivity checking in the presence of guards and custom extractors with -Xnon-strict-patmat-analysis
  3. disable exhaustivity checking of unsealed types with -Xlint:-strict-unsealed-patmat
  4. use -Wconf to suppress the warnings globally, with e.g. -Wconf:msg=match may not be exhaustive:i
Scala 3 interop

This release enables the Scala 2 compiler to consume some libraries built in Scala 3. #​9109/#​9293

The new capability is experimental. To enable it, add -Ytasty-reader to your compiler options.

Not all Scala 3 built libraries are supported, because not all Scala 3 features can be supported. The library author must stay within the supported subset.

For more details and caveats see the blog post Forward Compatibility for the Scala 3 Transition.

Standard library changes
  • When compiling on JDK 15, avoid clash with new CharSequence#isEmpty method #​9292
    • The clash is avoided by making CharSequence wrappers in Predef non-implicit.
    • The change is binary compatible, but not source compatible. Call sites may need updating.
  • Make LazyList.cons.apply lazier #​9095
  • Make MapView#values preserve laziness #​9090
  • Make ListBuffer's iterator fail when the buffer is mutated #​9174
  • Un-deprecate useful StringOps methods, despite Unicode concerns #​9246
Compiler changes
  • Allow using classOf with object type (e.g. classOf[Foo.type]) #​9279
  • Fix back-quoted constructor params with identical prefixes #​9008
  • Enable range positions (-Yrangepos) by default #​9146
Other changes

Some changes that will also ship in 2.12.13 are also included in this release, most notably:

  • When compiling on JDK 15, avoid clash with new CharSequence#isEmpty method #​9292
    • To avoid the clash, implicit was removed from Predef's implicit conversions to SeqCharSequence and ArrayCharSequence.
    • This change is binary compatible, but not source compatible. User code may need updating. See MR for details.

For complete 2.13.4 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.13.4 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 40 contributors, according to git shortlog -sn --no-merges HEAD ^v2.13.3 ^2.12.x. Thank you Jamie Thompson, Dale Wijnand, A. P. Marki, NthPortal, Lukas Rytz, Seth Tisue, Jason Zaugg, Georgi Krastev, Eugene Yokota, Martijn Hoekstra, Trey Cahill, Rado Buransky, Ergys Dona, Mike Skells, Greg Pfeil, Kazuhiro Sera, Mitsuhiro Shibuya, NagaChaitanya Vellanki, Sergei Petunin, Sébastien Doeraene, Takahashi Osamu, Viktor Klang, mwielocha, Nicolas Stucki, Jan Arne Sparka, Philippus Baalman, Glenn Liwanag, Rafał Sumisławski, Renato Cavalcanti, Sergei, nooberfsh, Dmitrii Naumenko, Simão Martins, counter2015, Jian Lan, Liu Fengyun, Kanishka, Julien Richard-Foy, Janek Bogucki, Björn Regnell.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.3: Scala 2.13.3

Compare Source

Scala 2.13.3 is primarily a bugfix release.

It also includes:

  • improvements to warnings and linting
  • experimental -Xasync support

For more detail, read on.

Behavior changes
  • Symbol#toString is now Symbol(foo) instead of the deprecated single-quote form 'foo (#​8933)
Bugfixes
  • Fix 2.13-only bug in Java collection converters that caused some operations to perform an extra pass (#​9058)
  • Fix 2.13.2 performance regression in Vector: restore special cases for small operands in appendedAll and prependedAll (#​9036)
  • Increase laziness of #:: for LazyList (#​8985)
  • Allow trailing backslash in string interpolators (#​8942)
  • Respect @uncheckedVariance in higher-kinded types (fixing 2.13.2 regression) (#​8938)
Warnings and linting
  • Deprecate auto-application of (non-Java-defined) methods with a single empty parameter list (#​8833)
    • The MR has instructions for suppressing the warning if it is unwanted
  • Warn by default on mismatch of presence/absence of an empty parameter list when overriding (#​8846)
    • -Xlint:nullary-override is no longer accepted, since this now warns by default
  • Discourage multi-argument infix syntax: lint applications (x op (a, b)), also lint operator-name definitions (#​8951)
  • Fix @nowarn to use correct semantics for & (#​9032)
  • Make -Wunused:imports work again even when -Ymacro-annotations is enabled (#​8962)
  • Replace -Wself-implicit with -Xlint:implicit-recursion (#​9019)
  • Under -Xsource:3, disallow auto-eta-expansion of SAMs (#​9049)
Experimental -Xasync

This successor to scala-async allows usage with other effect systems besides scala.concurrrent.Future.

  • Compiler support for scala-async; enable with -Xasync (#​8816)

We will publish a blog post with more detail on this work by @​retronym, building on his earlier collaboration with @​phaller. In the meantime, see the MR description.

This feature will also be included in the 2.12.12 release.

Other changes

For complete 2.13.3 change lists, see all merged MRs and all closed bugs.

Some changes that will ship in 2.12.12 are also included in this release, most notably:

  • Annotation parsing & @Deprecated (#​8781)
  • Fix Scaladoc tool on JDK 11 with -release 8: exclude sig files in Symbol#sourceFile (#​8849)
Compatibility

As usual for our minor releases, Scala 2.13.3 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration during upgrade to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 28 contributors, according to git shortlog -sn --no-merges HEAD ^v2.13.2 ^2.12.x. Thank you A. P. Marki, Jason Zaugg, Seth Tisue, Dale Wijnand, Lukas Rytz, Georgi Krastev, David Barri, Eugene Yokota, Diego E. Alonso Blas, Akhtiam Sakaev, Glenn Liwanag, changvvb, Evgeny Ganchurin, Mike Skells, Martijn Hoekstra, yudedako, Anatolii Kmetiuk, Gilles Peiffer, JyotiSachdeva.ext, Karol Chmist, Kenji Yoshida, Lorenzo Costanzia di Costigliole, NthPortal, Steven Barnes, Sébastien Doeraene, Travis Brown, counter2015, nogurenn.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.2: Scala 2.13.2

Compare Source

Scala 2.13.2 has:

  • a brand-new Vector implementation
  • configurable warnings
  • an improved REPL (now JLine 3 based)
  • bugfixes and more
Vector
  • Rewrite Vector (using "radix-balanced finger tree vectors"), for performance (#​8534)

Small vectors are now more compactly represented. Some operations are now drastically faster on large vectors. A few operations may be a little slower.

Kudos to @​szeiger for this work.

Configurable warnings
  • Add -Wconf flag for configurable warnings, @nowarn annotation for local suppression (#​8373)

Note that scala-collection-compat 2.1.6 (or newer) provides @nowarn for cross-built projects (as a no-op on 2.11 and 2.12).

Special thanks to Roman Janusz (@​ghik), whose silencer plugin was the basis for this work.

REPL improvements
  • REPL: upgrade to JLine 3 (benefits include multi-line editing) (#​8036)
  • Default true -Yrepl-class-based and -Yuse-magic-imports (#​8748)
    • -Yrepl-class-based avoids deadlocks
    • -Yuse-magic-imports improves performance for long sessions
  • Improve REPL display of method types (#​8319)

Special thanks to @​som-snytt for spearheading the JLine 3 upgrade.

We are tracking JLine-related improvements and regressions here. There some known regressions in some less-vital features and behaviors; we plan to address these in future 2.13.x releases.

Language changes
  • Unicode escapes are now ordinary escape sequences (not processed early) (#​8282)
Compiler fixes
  • Plug many variance holes (in higher-kinded types, refined types, and private inner classes) (#​8545)
  • Fix variance handling for parameterized type aliases (#​8651)
  • Exclude universal members (getClass, toString, etc) from root module import (#​8541)
  • Matching strings makes switches in bytecode (#​8451)
Deprecations
  • Deprecate eta-expansion, via trailing underscore, of methods with no argument lists (#​8836)
  • Deprecate nested class shadowing in "override" position (#​8705)
  • Deprecate numeric conversions that lose precision (e.g., Long to Double) (#​8679)
  • Deprecate numeric widening of numeric literals which are not representable with Float/Double (#​8757)
  • Deprecate old-style constructor syntax (#​8591)
Improvements from the future
  • There is no more -Xsource:2.14, only -Xsource:3 (#​8812)
  • Allow infix operators at start of line (under -Xsource:3) (#​8419)
  • Case class copy and apply inherit access modifiers from constructor (under -Xsource:3) (#​7702)
Other fixes and improvements
  • Un-deprecate default floating point Orderings; issue migration warning instead under -Xmigration (#​8721)
  • Support macro annotation expansions in -Wmacros:MODE (#​8799)
  • Scaladoc can now link to Javadoc for the Java standard library for JDK versions 9 and up (overridable with new -jdk-api-doc-base flag) (#​8663)
  • sys.env now throws on null environment variable (#​8579)
  • Make the hashcode method ## have no parameter list (instead of a single empty one) (#​8814)

This is not a complete list of changes. For that, see all merged MRs and all closed bugs.

2.13.2 also includes the changes in Scala 2.12.11, most notably:

  • Make optimizer work on JDK 13+ (#​8676).
Compatibility

As usual for our minor releases, Scala 2.13.2 is binary-compatible with the whole Scala 2.13 series.

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 45 contributors, according to git shortlog -sn --no-merges HEAD ^v2.13.1 ^2.12.x. Thank you Som Snytt, Jason Zaugg, Lukas Rytz, Dale Wijnand, Seth Tisue, Diego E. Alonso Blas, Georgi Krastev, Martijn Hoekstra, Eugene Yokota, Harrison Houghton, Stefan Zeiger, NthPortal, Anatolii, Linas Medžiūnas, Aaron S. Hawley, Guillaume Martres, Josh Lemer, Sébastien Doeraene, Jasper Moeys, Julien Truffaut, Oskar Haarklou Veileborg, Lucas Cardoso, Andrew Valencik, Adriaan Moors, yudedako, Steven Barnes, Brian Wignall, Ausmarton Zarino Fernandes, Oguz Albayrak, Philippus, Viktor Klang, Yang Bo, bnyu, psilospore, sinanspd, wholock, Jamie Thompson, Hamza Meknassi, Janek Bogucki, Flash Sheridan, Fabian Page, Kenji Yoshida, Denis Rosset, Lucas S Cardoso, Chris Birchall.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.1: Scala 2.13.1

Compare Source

Scala 2.13.1 is primarily a bug fix release that fixes several regressions in 2.13.0.

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

This is not a complete list of changes. For that, see all merged MRs and all closed bugs.

Compatibility

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

As usual for our minor releases, Scala 2.13.1 is binary-compatible with the whole Scala 2.13 series.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 43 contributors, according to git shortlog -sn --no-merges HEAD ^v2.13.0 ^upstream/2.12.x. Thank you Som Snytt, Lukas Rytz, Aaron S. Hawley, exoego, Jason Zaugg, Dale Wijnand, Seth Tisue, Stefan Zeiger, NthPortal, Martijn Hoekstra, Jasper Moeys, Josh Lemer, Isaac Levy, Harrison Houghton, Benjamin Kurczyk, redscarf, 杨博 (Yang Bo), Adriaan Moors, Anatolii Kmetiuk, Eugene Yokota, Georgi Krastev, Miles Sabin, Philippus, xuwei-k, Magnolia.K, Mike Skells, 2efPer, Mitesh Aghera, NomadBlacky, Guillaume Martres, Odd Möller, yui-knk, Georg, Flash Sheridan, Diego E. Alonso Blas, Sébastien Doeraene, Atsushi Araki, psilospore, Akhtyam Sakaev, wanying.chan, Li Haoyi, M.Shibuya, Kota Mizushima.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.13 notes

The release notes for Scala 2.13.0 have important information applicable to the whole 2.13 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

v2.13.0: Scala 2.13.0

Compare Source

We are delighted to announce the availability of Scala 2.13.0!

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.

To learn more, read on.

Collections redesign

Standard library collections have been overhauled 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.
  • Alphanumeric method names
    • All symbolic operators are now just aliases for descriptive alphanumeric method names.
    • Examples: ++ (alias for concat), +: (alias for prepended), :+ (alias for appended), and so on.
  • 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
  • New abstract collection type SeqMap

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)
  • Added in-place operations on mutable collections
    • filterInPlace, mapInPlace, flatMapInPlace, and others.
    • These methods update the original collection in-place, rather than creating a new collection to hold the results.
  • 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.
    • Added Stepper, which is like Iterator but supports efficient unboxed iteration, Java interop. (#​7458)
  • Collection serialization has changed
    • Collections now use 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
  • 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
  • Added .tapEach method
    • This allows inserting side-effects in a chain of method calls on a collection or view. (#​7124)
  • Added .updatedWith and updateWith methods to Maps
    • updatedWith is on immutable.Map, updateWith is on mutable.Map. (#​7320, #​7517)
    • These methods allow modifying a map entry based on its current value.
  • Added .maxOption, .minOption, .maxByOption, .minByOption
    • These methods safely handle the empty case. (#​6574)
  • Deprecated symbolic methods with multiple arguments
    • 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:

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)
    • (This change was reverted in Scala 2.13.4. The batched executor is available for opt-in, but will no longer be the default. See the 2.13.4 release notes.)
  • 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 uses the loan pattern to provide a simple form of automatic resource management. (#​6907, #​7468)
  • new: use s interpolator in pattern matches
    • Provides a simple string matcher as the dual of the simple string interpolator. (#​7387)
    • Example: val s"$day-$month-$year" = "11-June-2019"
  • 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
  • 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
  • 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
  • new: converters between functions and extractors
    • New methods provide conversions among optional Functions, PartialFunctions and extractor objects. (#​7111)
  • new: @unused annotation
    • This annotation is useful for suppressing warnings under -Xlint. (#​7623)
Standard library: changes
  • Library fits in compact1 profile
  • Option extends IterableOnce
    • This improves type inference when calling an overloaded flatMap. (#​8038)
  • Undeprecate linesIterator to avoid conflict with JDK 11's String.lines (#​7269)
  • PartialFunction now overloads andThen. (#​7263)
  • Replaced Cloneable/Serializable traits with type aliases (#​6729)
  • ControlThrowable never suppresses (#​7413)
  • BigDecimal's handling of MathContexts has changed (#​6884)
Standard library: deprecations and removals

Not a complete list, only the deprecations users are likeliest to encounter.

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.
    • A Singleton upper bound prevents widening (e.g. T <: Int with Singleton).
    • 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
  • 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:

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)
  • Symbol literals deprecated
    • Symbols themselves remain supported, only the single-quote syntax is deprecated. (#​7395)
    • Library designers may wish to change their APIs to use String instead.
    • Deprecated: 'foo
    • Use instead: Symbol("foo")
  • Unicode arrows deprecated
    • In particular, the single arrow operators had the wrong precedence. (#​7540)
    • Deprecated: , ,
    • Use instead: =>, ->, <-
  • postfixOps syntax disabled by default
    • The syntax, already deprecated in 2.12, causes an error in 2.13 unless the feature is explicitly enabled. (#​6831)
    • Error: xs size
    • Use instead: xs.size

Adjustments:

  • Imports, including wildcard imports, now shadow locally defined identifiers. (#​6589)
  • Underscore is no longer a legal identifier unless backquoted (bug#10384)
    • val _ = is now a pattern match (and discards the value without incurring a warning)
    • implicit val _ = is also now a pattern match (and is useless, because it no longer adds to implicit scope)
  • Don't assume unsound type for ident/literal patterns. (#​6502)
    • Matches of the form case x@N involve calling equals, so it was unsound to type x as N.type.
    • Consider rewriting as case x:N.type.
  • Make extractor patterns null safe. (#​6485)
    • null is treated as no match.
  • 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)
  • Value-discard warnings can be suppressed via type ascription to Unit. (#​7563)
  • 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:

  • Partition options by function: -V for verbose, -W for warnings
    • In general, the old flags still exist as aliases. (#​7908)
    • Exceptions (breaking changes) include:
      • Replaced -warn-option with -Woption.
      • Replaced -Xprint:all with -Vprint:_
    • -Werror is now recommended over -Xfatal-warnings.
  • Promoted -deprecation to -Xlint:deprecation (#​7714)
  • Deprecated -Xfuture (#​7328)
    • Instead, use e.g. -Xsource:2.14
  • Removed -Yno-adapted-args
  • Removed -Xmax-classfile-length
Scripting, environment, and integrations
  • 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)
  • Ant support is no longer bundled. (#​6255)
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, 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).

Migration

Upgrading from 2.12? Enable -Xmigration while upgrading to request migration advice from the compiler.

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.

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.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the scalaVersion setting in your sbt-based project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central
  • Certain package managers (such as homebrew and SDKMAN) offer Scala.
Reporting bugs

Please file any bugs you encounter on our issue tracker. If you aren't yet sure something is a bug, ask on users.scala-lang.org.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, kindly helping others on forums and at meetups, and submitting and reviewing pull requests! You are all magnificent.

Scala 2.13.0 is the result of merging over 1500 pull requests.

The pull request queue is managed by the Scala team at Lightbend: Adriaan Moors, Lukas Rytz, Jason Zaugg, Seth Tisue, Stefan Zeiger, Eugene Yokota.

Thanks to Lightbend for their continued sponsorship of the Scala core team’s efforts. Lightbend offers commercial support for Scala.

The new collections API was developed in fruitful collaboration with the Scala Center, with major contributions from the community.

This release was brought to you by 162 contributors, according to git shortlog -sn --no-merges 2.13.x ^2.12.x ^e2a211c. Thank you Julien Richard-Foy, Lukas Rytz, Jason Zaugg, A. P. Marki, Stefan Zeiger, Kenji Yoshida, Adriaan Moors, Josh Lemer, NthPortal, Miles Sabin, Diego E. Alonso-Blas, Seth Tisue, Guillaume Martres, Marcelo Cenerino, Dale Wijnand, Odd Möller, Martin Odersky, Allan Renucci, Georgi Krastev, Eugene Yokota, Harrison Houghton, Martijn Hoekstra, Viktor Klang, Aaron S. Hawley, Ólafur Páll Geirsson, Rex Kerr, hepin1989, Philippus Baalman, Matthew de Detrich, Isaac Levy, exoego, Greg Methvin, Jasper Moeys, Sébastien Doeraene, wholock, Aggelos Biboudis, yui-knk, Matthias Sperl, Xavier Fernández Salas, Ethan Pronovost, Janek Bogucki, awibisono, BuildTools, Mike Skells, Jimin Hsieh, Jonathan Frawley, Xavier GUIHOT, Chris Phelps, chanyong.moon, Cong Zhao, Enno Runne, LPTK, Pathikrit Bhowmick, Yuval Dagan, Li Haoyi, Guillaume Massé, Christopher Hunt, Kamil Kloch, Marco Zühlke, Danila Matveev, Juliusz Sompolski,杨博 (Yang Bo), Masaru Nomura, Benjamin Kurczyk, Vince, taku0, Arnout Engelen, Tim Ruhland, Nicolas Stucki, Nicolas Rinaudo, Stephen Nancekivell, ashwin, Kobenko Mikhail, Song Kun, Anthony Tjuatja, k.bigwheel, ke-to, kelebra, mcintdan, mmocentre, psilospore, roman, svatsan, texasbruce, tim-zh, valydia, veera venky,虎鸣, Adianto Wibisono, Alden Torres, Alejandro Sellero, Alessandro Buggin, Alex Glukhovtsev, Alex Levenson, Alexey-NM, Anatolii, Andrei Baidarov, Andriy Plokhotnyuk, Bakhytzhan Karabalin, Benni, Callum Turnbull, Chris Birchall, Chujie Zeng, Cody Allen, Daniel Dietrich, Daniel Moss, Daniel Slapman, David Barri, David Hoepelman, Denis Buzdalov, Denys Shabalin, Dhanesh, Dhanesh Arole, Edin Dudojević, Eugene Platonov, Faiz Halde, Gabriel Claramunt, Heikki Vesalainen, Iaroslav Zeigerman, Jack Koenig, Jean Michel Rouly, Jeff Brower, Jeff Shaw, Josh, Kazuhiro Sera, Kentaro Tokutomi, Lionel Parreaux, Magnolia.K, Martin Duhem, Michael Steindorfer, Nafer Sanabria, Narek Asadorian, Oleksii Tkachuk, Oscar Boykin, PJ Fanning, Paolo Giarrusso, Pap Lőrinc, Pavel Petlinsky, Peter Fraenkel, Philip, Piotr Kukielka, Qiang Sima, Rob Norris, Robin Stephenson, Rui Gonçalves, Ruud Welling, Ryan McDougall, ShankarShastri, Simão Martins, Sperl Matthias, Sujeet Kausallya Gholap, Uttej Guduru, Vincent de Haan, Vladimir Parfinenko, Vlastimil Dort, Yang Bo, Zizheng Tai, ccjoywang, esarbe, howtonotwin, jvican.

Conclusion

We again thank our contributors and the entire Scala community.

May you find Scala 2.13 a joy to code in!

v2.12.20: Scala 2.12.20

Compare Source

This release improves compatibility:

and compiler profiling:

For complete 2.12.20 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.12.20 is binary-compatible with the whole Scala 2.12 series.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 8 contributors, according to git shortlog -sn --no-merges @&#8203; ^v2.12.19. Thank you Scala Steward, Seth Tisue, Lukas Rytz, A. P. Marki, Hamza Remmal, Philippus Baalman, Stefan Zeiger, nbauma109.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala 2.

Scala 2.12 notes

The release notes for Scala 2.12.0 have important information applicable to the whole 2.12 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the scalaVersion setting in your sbt project
  • Bump the using scala setting in your Scala CLI project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.12.19: Scala 2.12.19

Compare Source

This release improves compatibility:

And it has bugfixes:

For complete 2.12.19 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.12.19 is binary-compatible with the whole Scala 2.12 series.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 9 contributors, according to git shortlog -sn --no-merges @&#8203; ^v2.12.18 ^2.11.x. Thank you Scala Steward, Seth Tisue, A. P. Marki, Lukas Rytz, Stefan Zeiger, Dmitry Komanov, Philippus Baalman, cahilltr, dependabot.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala 2.

Scala 2.12 notes

The release notes for Scala 2.12.0 have important information applicable to the whole 2.12 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the scalaVersion setting in your sbt project
  • Bump the using scala setting in your Scala CLI project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

v2.12.18: Scala 2.12.18

Compare Source

This release improves compatibility:

It also aids migration to Scala 2.13 and Scala 3:

  • Under -Xsource:2.13, warn when inherited takes precedence over outer definitions (#​10297, #​10321)
  • Under -Xsource:2.13, flag eta-expanding methods without parameter lists (#​10283)
  • Under -Xsource:2.13, don't GLB binders of type patterns, use the type directly (#​10298)

and improves linting:

  • Lint for integral divisions that are widened to a float (#​10313)

and enables improved tooling:

  • Preserve tree attachment in the typer's Block/Apply inversion transform (#​10176)

For complete 2.12.18 change lists, see all merged MRs and all closed bugs.

Compatibility

As usual for our minor releases, Scala 2.12.18 is binary-compatible with the whole Scala 2.12 series.

Contributors

A big thank you to everyone who's helped improve Scala by reporting bugs, improving our documentation, spreading kindness in discussions around Scala, and submitting and reviewing pull requests! You are all magnificent.

This release was brought to you by 6 contributors, according to git shortlog -sn --no-merges @&#8203; ^v2.12.17 ^2.11.x. Thank you Seth Tisue, Lukas Rytz, Scala Steward, A. P. Marki, Jason Zaugg, Philippus Baalman.

Thanks to Lightbend for their continued sponsorship of the Scala 2 team’s efforts. Lightbend offers commercial support for Scala.

Scala 2.12 notes

The release notes for Scala 2.12.0 have important information applicable to the whole 2.12 series.

Obtaining Scala

Scala releases are available through a variety of channels, including (but not limited to):

  • Bump the scalaVersion setting in your sbt project
  • Bump the using scala setting in your Scala-CLI project
  • Download a distribution from scala-lang.org
  • Obtain JARs via Maven Central

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

♻️ Rebasing: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this MR and you won't be reminded about these updates again.


  • If you want to rebase/retry this MR, check this box

This MR has been generated by Renovate Bot.

Edited by Renovate Bot

Merge request reports

Loading