Quantifying and Explaining Immutability in Scala

Philipp Haller
Ludvig Axelsson

Functional programming typically emphasizes programming with first-class functions and immutable data. Immutable data types enable fault tolerance in distributed systems, and ensure process isolation in message-passing concurrency, among other applications. However, beyond the distinction between reassignable and non-reassignable fields, Scala's type system does not have a built-in notion of immutability for type definitions. As a result, immutability is "by-convention" in Scala, and statistics about the use of immutability in real-world Scala code are non-existent.

This paper reports on the results of an empirical study on the use of immutability in several medium-to-large Scala open-source code bases, including Scala's standard library and the Akka actor framework. The study investigates both shallow and deep immutability, two widely-used forms of immutability in Scala. Perhaps most interestingly, for type definitions determined to be mutable, explanations are provided for why neither the shallow nor the deep immutability property holds; in turn, these explanations are aggregated into statistics in order to determine the most common reasons for why type definitions are mutable rather than immutable.

In Vasco T. Vasconcelos and Philipp Haller: Proceedings Tenth Workshop on Programming Language Approaches to Concurrency- and Communication-cEntric Software (PLACES 2017), Uppsala, Sweden, 29th April 2017, Electronic Proceedings in Theoretical Computer Science 246, pp. 21–27.
Published: 8th April 2017.

ArXived at: https://dx.doi.org/10.4204/EPTCS.246.5 bibtex PDF
References in reconstructed bibtex, XML and HTML format (approximated).
Comments and questions to: eptcs@eptcs.org
For website issues: webmaster@eptcs.org