Programming Languages

Paper accepted for publication in the Journal of Functional Programming

Our paper “Effekt: Capability-Passing Style for Type- and Effect-Safe, Extensible Effect Handlers in Scala” (Jonathan Brachthäuser
Alumni
Jonathan Immanuel Brachthäuser
, Philipp Schuster
Alumni
Philipp Schuster
and Klaus Ostermann
Head
Klaus Ostermann
) has been accepted for been accepted for publication in the Journal of Functional Programming (JFP).

Abstract

Effect handlers encourage programmers to abstract over repeated patterns of complex control flow. As of today, this abstraction comes at a significant price in performance. In this paper, we aim to achieve abstraction without regret for effect handlers. We present a language for effect handlers in capability-passing style (lambda-cap) and an implementation of this language as a translation to simply-typed lambda calculus in iterated continuation-passing style. A suite of benchmarks indicates that the novel combination of capability-passing style and iterated CPS enables significant speedups over existing languages with effect handlers or control operators. Our implementation technique is very general and allows us to generate code in any language that supports first-class functions. We then identify a subset of programs for which we can further improve the performance and guarantee full elimination of the effect handler abstraction. To formally capture this subset, we refine lambda-cap; to llambda-cap; with a more restrictive type system. We present a type-directed translation for llambda-cap; that inserts staging annotations and prove that no abstractions or applications related to effect handlers occur in the translated program. Using this second translation we observe additional speedups in some of the benchmarks.

More about this publication

Further Information

Publications

Effekt: Capability-Passing Style for Type- and Effect-Safe, Extensible Effect Handlers in Scala

by Jonathan Immanuel Brachthäuser, Philipp Schuster, and Klaus Ostermann

In Journal of Functional Programming 30: , 2020.

Learn More