Skip to content

Instantly share code, notes, and snippets.

@xuwei-k
Forked from SethTisue/scala-2.13.0-M5.md
Created August 22, 2018 03:06
Show Gist options
  • Save xuwei-k/401bbf9efa53a7dad6896d9f5e42cc60 to your computer and use it in GitHub Desktop.
Save xuwei-k/401bbf9efa53a7dad6896d9f5e42cc60 to your computer and use it in GitHub Desktop.
Scala 2.13.0-M5 draft release notes

Scala 2.13 is getting closer and closer!

We've been polishing the improved and simplified Scala collections library that first shipped in 2.13.0-M4. We expect the API to remain stable now, though there may still be minor changes in RC1.

M5 is our feature-freeze release for 2.13. From here forward, we’ll close existing open loops but not embark on or accept new work.

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)
  • Added immutable maps that maintain insertion order (VectorMap/SeqMap) (#6854)
  • A LazyList's empty-or-not status is now lazy too (#7000)
  • Variables bound in pattern matches by the x @ _* syntax are now typed scala.Seq (immutable); name-based pattern matching has changed to enable this (#7068)
  • Arrays passed as varargs are now defensively copied (#6970)
  • Offer stronger guarantees under the Java Memory Model for List and Vector (using releaseFence) (#6425)
  • Iterator and collection companion objects now have an .unfold method (#6851)
  • Collections now have .lengthIs, .sizeCompare and .sizeIs methods (#6950, #6758)
  • Improved support for extension methods on collections via IsIterableLike et al (#6674)
  • Now deprecated: .zipped (#7025), .filterKeys and .mapValues (#7014), symbolic methods with multiple arguments (#6719)

Language and compiler changes

  • Compiler output is now deterministic, for reproducible builds (scala-dev#405)
  • Support by-name implicits with recursive dictionaries (#6050)
  • Better typing for overloaded higher-order methods (#6871)
  • Improved compiled times by more aggressively pruning polymorphic implicits during search (#6580)
  • Explicit imports now shadow locally defined identifiers (#6589)
  • Mixin fields with trait setters are no longer JVM final (#7028)

Library additions and changes

  • Updated & revised Future and Promise implementation (#6610)
  • Added scala.util.Using, for automatic resource management (#6907)
  • Added Option-returning methods (e.g. toIntOption) for parsing literals (#6538)
  • Case classes and other Products now have productElementNames and productElementName methods (#6972
  • Left and Right now have .withRight and .withLeft methods for upcasting the other type parameter (#7011)
  • Added tap and pipe methods, for chaining operations, available via import scala.util.chaining._ (#7007)
  • Added total orderings for Float and Double (#6410)
  • String-building using + on non-String types is now deprecated (#6315, #6755)
  • Projections on Either are now deprecated (#6682)
  • PartialFunction.fromFunction replaces PartialFunction.apply (#6703)
  • Support implicitNotFound on parameters (#6340)

Environment and compiler option changes

  • Added -Yimports for implicit preamble imports (#6764)
  • Support JEP 293 style long command-line options (#6499)
  • The script runner no longer uses the fsc compilation daemon by default (#6747)
  • Removed -Yrepl-sync (#6626)

Other changes

For more details, see merged PRs and closed bugs.

See also the notes for the previous milestones: M4, M3, M2, M1.

Compiler performance in 2.13 is 5-10% better compared to 2.12. The integration of the new collections library shows up in the performance graph as a nice improvement.

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.

Special shout-outs this time to:

  • Matthew de Detrich (@mdedetrich) for contributing VectorMap
  • Kenji Yoshida (@xuwei-k), who has contributed to Scala before but in recent months has become ubiquitous in the PR queue

This release was brought to you by 70 contributors, according to git shortlog -sn --no-merges ^v2.13.0-M4 v2.13.0-M5. Thank you Jason Zaugg, A. P. Marki, Kenji Yoshida, Stefan Zeiger, NthPortal, Lukas Rytz, Martijn Hoekstra, Harrison Houghton, Josh Lemer, Dale Wijnand, Allan Renucci, exoego, Miles Sabin, Isaac Levy, Adriaan Moors, Matthew de Detrich, Greg Methvin, wholock, Julien Richard-Foy, Eugene Yokota, Dan Skells, Seth Tisue, Guillaume Martres, Georgi Krastev, Aaron S. Hawley, Jasper Moeys, Jonathan Frawley, Sébastien Doeraene, Matthias Sperl, Marco Zühlke, Mike Skells, Philippus, Chris Phelps, Viktor Klang, Yuval Dagan, Guillaume Massé, taku0, David Gregory, Diego E. Alonso-Blas, Yang Bo, Adianto Wibisono, Alejandro Sellero, Alessandro Buggin, Alexey-NM, Bakhytzhan Karabalin, Cong Zhao, Danila Matveev, Diego E. Alonso Blas, Eugene Platonov, Gabriel Claramunt, Georgi Chochov, Ismael Juma, Kamil Duda, Kamil Kloch, Kazuhiro Sera, Mark Petruska, Philippus Baalman, Piotr Kukielka, Robert Stoll, Robin Stephenson, Simão Martins, Sujeet Kausallya Gholap, Vince, jvican, naldo, pathikrit, sh0hei, valydia, veera venky, Ólafur Páll Geirsson.

Obtaining Scala

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment