BT

New Early adopter or innovator? InfoQ has been working on some new features for you. Learn more

Scala 2.9.0 Introduces Parallel Collections

| by Mirko Stocker on May 18, 2011. Estimated reading time: 3 minutes |

Together with last week's announcement of the new Scala company Typesafe, the latest major version 2.9.0 of Scala was released. Compared to last years Scala 2.8 release, 2.9 contains a much smaller amount of new features and concentrated on improvements and bug fixes of existing ones.

The primary new feature of Scala 2.9 are the parallel collections, which are built on the same abstractions and provide the same interfaces as the existing collection implementations. From the release notes:

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.

For example, given a large array of strings which need to be filtered and then processed, the sequential code looks like this: 

val result = data.filter(line => line.contains("keyword")).map(line => process(line))

With a large enough data set and a computationally intensive process function, in Scala 2.9 the code can easily be adjusted to run on multiple CPUs: 

val result = data.par.filter(line => line.contains("keyword")).map(line => process(line))

Aleksandar Prokopec's presentation from Scala Days 2010 introduces and explains how the parallel collections work; there also exists a technical report.

Other new features in Scala 2.9 include some useful additions to the Scala REPL (the interactive Scala interpreter):

More robust cursor handling, bash-style ctrl-R history search, new commands like :imports, implicits, :keybindings.

From SBT, Scala's Simple Build System, the scala.sys and scala.sys.process packages were imported to make interacting with native processes easier. Another very useful improvement, even though it's not mentioned in the release notes, is the revamped ScalaDoc. For an example, compare the documentation of Scala's List in 2.9.0 to 2.8.1.

When Scala 2.8 was released last year, many users were concerned about the binary and source incompatibilities it introduced. Martin Odersky recently addressed the topic on the mailing list:

[..] 2.8.1 was binary compatible with 2.8. Now that 2.9 is around the corner, the question is what can we do for binary compatibility now and in the future?

[..] we not there yet, but are making progress. In particular, we have developed the basic technology that lets us maintain binary compatibility for future releases. [..]

Some binary incompatibilities are not accidental, but the result of conscious generalizations and enrichments of the libraries. We do not want to sacrifice these possible improvements for binary compatibility. What we do instead is search for technological solutions.

One such technological solution are compiler generated forwarders, so-called bridge methods, which delegate calls from an old to a new method. This technique is already used in Scala 2.9.0. Another solution is the migration manager that is being developed at Typesafe, which is not yet available. Martin concludes: 

For 2.9, bridge methods ensure that quite a lot of code compiled against 2.8 will continue to operate, but my no means all code. So it is very much advised to recompile your projects for 2.9. Recompilation should in most cases be painless because 2.9 is by-and-large source compatible with 2.8. There's one exception: If your application uses features that were already deprecated in 2.8, it might find these features removed in 2.9. So it's a good idea to get rid of deprecation warnings before upgrading.

In contrast to the release of Scala 2.8.0, 2.9.0 is a much smaller, incremental release and many libraries are already available for Scala 2.9.

Rate this Article

Adoption Stage
Style

Hello stranger!

You need to Register an InfoQ account or or login to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread
Community comments

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Discuss

Login to InfoQ to interact with what matters most to you.


Recover your password...

Follow

Follow your favorite topics and editors

Quick overview of most important highlights in the industry and on the site.

Like

More signal, less noise

Build your own feed by choosing topics you want to read about and editors you want to hear from.

Notifications

Stay up-to-date

Set up your notifications and dont miss out on content that matters to you

BT