Title
Revisiting software transactional memory in Haskell.
Abstract
Software Transactional Memory (STM) has become very popular in Haskell. Currently, there are nearly 500 packages on Haskell’s package archive that directly use STM. Despite the widespread use in real world applications, Haskell’s STM implementation has seen very few updates since its introduction in 2005. In this work, we describe our efforts to redesign the STM implementation in the Glasgow Haskell Compiler (GHC), based on a TL2-like implementation that is able to support both <code>orElse</code> and <code>retry</code> without the use of traditional nested transactions. We argue that our implementation is simpler than the current GHC implementation while supporting opacity. We also demonstrate that our implementation performs better than the current GHC implementation on a number of benchmarks by multiple orders of magnitude for long-running transactions. In an effort to measure the performance of <code>orElse</code> and <code>retry</code>, we present an STM-based work stealing scheduler. With <code>orElse</code> and <code>retry</code>, we are able to elegantly implement the scheduler in just a few lines of code. We have modified the Par Monad, a real-world Haskell package that provides deterministic parallelism, to use our STM-based work stealing scheduler and show that it is not only simpler but is able to perform as well as the current scheduler.
Year
DOI
Venue
2016
10.1145/2976002.2976020
Haskell
Field
DocType
Citations 
Software transactional memory,Programming language,Computer science,Parallel computing,Compiler,Work stealing,Haskell,Nested transaction,Monad (functional programming),Source lines of code
Conference
1
PageRank 
References 
Authors
0.38
7
3
Name
Order
Citations
PageRank
Matthew Le1172.55
Ryan Yates210.38
Matthew Fluet329620.32