A Taste of 2.8: Scala Collections

Created by dubochet on 2009-06-02.
Updated: 2009-06-04, 19:38

The collection library is undergoing a complete overhaul for Scala 2.8, with three goals in mind: a more coherent design; more code reuse; compatibility with existing sources. Download a recent nightly build (linux-mac / windows) to try the new library for yourself.

A coherent design

A visit of the 2.8 collections library (see its API) starts in the scala.collection package that contains an abstract version of all major collection types: maps, sets, sequences, etc. Two sub-packages contain actual implementations: mutable for implementations in which elements can be added and removed, immutable for implementations that can only be changed by creating a new copy (functional-style). Usual operations, such as creating a new collection, are available for all collections using a coherent design: Vector(1, 2), Set(1, 2) or Map("x" -> 1, "y" -> 2) will create new instances. Even abstract collections have standard constructors: call Iterable(1, 2) to get a default implementation.

Code reuse

As a user of the collection library, you may not have noticed the degree of code duplication in the 2.7 collections library. However, you may have noticed the bugs caused by it. The 2.8 collection library abstracts most of the implementation of collections to classes in the generic package. Collection classes are created by extending various bits of generic implementation, maximising the degree of code reuse. If you design new collections, you can also grab whatever bit of implementation you require from the generic package, and simplify your own implementation.

Compatibility with existing sources

Despite the Scala 2.8 collection library being rewritten from scratch, compatibility with existing source has been mostly retained. Some methods, which had to go, have been deprecated but will still be available in 2.8. Only users of JCL will be directly affected by the change: Java-compatibility mappings are provided by the collection library, but they could not be made compatible with JCL. Don't forget to recompile though: Scala 2.8 bytecode format is not compatible with that of 2.7.

Get ready for Scala 2.8

Nightly builds of Scala 2.8 ship with an early version of the new collections library. We are still tweaking the design, so let us know what you think of it. Also, download it (linux-mac / windows), try it on your code and let us know about your own experience of moving from the old collections to the new collections. If you want to know more about the 2.8 collection library, read Martin Odersky's SID that describes their implementation in details.

Very interesting, especially the the new implicit conversions. But - AFAIU - the conversions still are compiler-magic right? I still have to define them in my scala-code for JAVA to use? Or is it so that I can in 2.8 do from JAVA: