Lightweight affine types and object capabilities in Scala
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


LaCasa is a type system and programming model to enforce the object capability discipline in Scala, and to provide unique object references. One important application of LaCasa's type system is software isolation of concurrent processes. Isolation is important for several reasons including security and data-race freedom. Moreover, LaCasa's unique references enable efficient, by-reference message passing while guaranteeing a "deep-copy" semantics. This deep-copy semantics enables programmers to seamlessly port concurrent programs running on a single machine to distributed programs running on large-scale clusters of machines.

Paper (preprint): Philipp Haller and Alex Loiko. LaCasa: Lightweight Affinity and Object Capabilities in Scala. Proc. OOPSLA. ACM, 2016. [ACM DL]

Talk at Scala World '16: video, slides


Building LaCasa requires sbt. The build consists of two steps. The first step consists of building and packaging the LaCasa compiler plugin:

sbt 'project lacasa-plugin' package

The second step consists of building and running projects like lacasa-samples which depend on the packaged plugin. This requires starting sbt with the lacasa.plugin.jar JVM system property set to the path of the packaged plugin:

sbt -Dlacasa.plugin.jar=plugin/target/scala-2.11/lacasa-plugin_2.11.7-0.1.0-SNAPSHOT.jar

Build and run samples:

> project lacasa-samples
> run


Once sbt has been started with the lacasa.plugin.jar JVM system property set, the plugin tests can be run as follows:

> project lacasa-plugin
> test

The plugin tests are located in directory plugin/src/test/scala/lacasa/.