VLDB 2026 Research / reviewers in the wild / expert
Simon Marlow
dblp:52/3787 · also Simon David Marlow
· DBLP profile ↗
32ranked-venue papers
17as first author
0since 2021 · last 2019
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 31 · 17 first-authorSystems, architecture and hardware · 1
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
5 papers |
Programming languages and type systems · 86% Concurrent programming · 14% | |
| Computer architecture, parallel and distributed computing, and storage systems
1 paper |
Parallel and multicore computing · 100% |
Topics — the 12 heaviest of 12, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems › type checking
modular typechecking |
0.2 | 1 | 2014 | Backpack: retrofitting Haskell with interfaces · POPL 2014 |
Programming languages and type systems
module systems |
0.2 | 1 | 2014 | Backpack: retrofitting Haskell with interfaces · POPL 2014 |
Programming languages and type systems › language semantics › dynamic semantics
exception semantics |
0.1 | 2 | 2001 | Asynchronous Exceptions in Haskell · PLDI 2001 A Semantics for Imprecise Exceptions · PLDI 1999 |
Concurrent programming
concurrency models |
0.1 | 1 | 2005 | Composable memory transactions · PPoPP 2005 |
Programming languages and type systems
elaboration |
0.1 | 1 | 2005 | Associated types with class · POPL 2005 |
Concurrent programming
transactional memory |
0.1 | 1 | 2005 | Composable memory transactions · PPoPP 2005 |
Programming languages and type systems › type systems › polymorphism
type classes |
0.1 | 1 | 2005 | Associated types with class · POPL 2005 |
Programming languages and type systems › language semantics
formal semantics |
0.0 | 1 | 2001 | Asynchronous Exceptions in Haskell · PLDI 2001 |
Programming languages and type systems
language design |
0.0 | 1 | 2001 | Asynchronous Exceptions in Haskell · PLDI 2001 |
Programming languages and type systems › functional language
haskell |
0.0 | 1 | 1999 | A Semantics for Imprecise Exceptions · PLDI 1999 |
Programming languages and type systems › functional language
lazy functional languages |
0.0 | 1 | 1999 | A Semantics for Imprecise Exceptions · PLDI 1999 |
Parallel and multicore computing
concurrent data structures |
0.0 | 1 | 2005 | Composable memory transactions · PPoPP 2005 |
Methods — techniques the papers use, named apart from their topics
type system design · 0.1system f · 0.1operational semantics · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2019 | Selective applicative functorsabstractApplicative functors and monads have conquered the world of functional programming by providing general and powerful ways of describing effectful computations using pure functions. Applicative functors provide a way to compose independent effects that cannot depend on values produced by earlier computations, and all of which are declared statically. Monads extend the applicative interface by making it possible to compose dependent effects, where the value computed by one effect determines all subsequent effects, dynamically. This paper introduces an intermediate abstraction called selective applicative functors that requires all effects to be declared statically, but provides a way to select which of the effects to execute dynamically. We demonstrate applications of the new abstraction on several examples, including two industrial case studies. Andrey Mokhov, Georgy Lukyanov, Simon Marlow, Jerémie Dimino |
Proc. ACM Program. Lang. | 3 |
| 2016 | Desugaring Haskell's do-notation into applicative operationsabstractMonads have taken the world by storm, and are supported by do-notation (at least in Haskell). Programmers are increasingly waking up to the usefulness and ubiquity of Applicatives, but they have so far been hampered by the absence of supporting notation. In this paper we show how to re-use the very same do-notation to work for Applicatives as well, providing efficiency benefits for some types that are both Monad and Applicative, and syntactic convenience for those that are merely Applicative. The result is fully implemented as an optional extension in GHC, and is in use at Facebook to make it easy to write highly-parallel queries in a distributed system. Simon Marlow, Simon L. Peyton Jones, Edward Kmett, Andrey Mokhov |
Haskell | 1 |
| 2016 | Non-recursive make considered harmful: build systems at scaleabstractMost build systems start small and simple, but over time grow into hairy monsters that few dare to touch. As we demonstrate in this paper, there are a few issues that cause build systems major scalability challenges, and many pervasively used build systems (e.g. Make) do not scale well. Andrey Mokhov, Neil Mitchell, Simon L. Peyton Jones, Simon Marlow |
Haskell | 4 |
| 2016 | Composable scheduler activations for HaskellabstractAbstract The runtime for a modern, concurrent, garbage collected language like Java or Haskell is like an operating system: sophisticated, complex, performant, but alas very hard to change. If more of the runtime system were in the high-level language, it would be far more modular and malleable. In this paper, we describe a novel concurrency substrate design for the Glasgow Haskell Compiler that allows multicore schedulers for concurrent and parallel Haskell programs to be safely and modularly described as libraries in Haskell. The approach relies on abstracting the interface to the user-implemented schedulers through scheduler activations, together with the use of Software Transactional Memory to promote safety in a multicore context. K. C. Sivaramakrishnan, Tim Harris 0001, Simon Marlow, Simon L. Peyton Jones |
J. Funct. Program. | 3 |
| 2014 | There is no fork: an abstraction for efficient, concurrent, and concise data accessabstractWe describe a new programming idiom for concurrency, based on Applicative Functors, where concurrency is implicit in the Applicative <*> operator. The result is that concurrent programs can be written in a natural applicative style, and they retain a high degree of clarity and modularity while executing with maximal concurrency. This idiom is particularly useful for programming against external data sources, where the application code is written without the use of explicit concurrency constructs, while the implementation is able to batch together multiple requests for data from the same source, and fetch data from multiple sources concurrently. Our abstraction uses a cache to ensure that multiple requests for the same data return the same result, which frees the programmer from having to arrange to fetch data only once, which in turn leads to greater modularity. Simon Marlow, Louis Brandy, Jonathan Coens, Jon Purdy |
ICFP | 1 |
| 2014 | Backpack: retrofitting Haskell with interfacesabstractModule systems like that of Haskell permit only a weak form of modularity in which module implementations depend directly on other implementations and must be processed in dependency order. Module systems like that of ML, on the other hand, permit a stronger form of modularity in which explicit interfaces express assumptions about dependencies, and each module can be typechecked and reasoned about independently. Scott Kilpatrick, Derek Dreyer, Simon L. Peyton Jones, Simon Marlow |
POPL | 4 |
| 2012 | Safe haskellabstractThough Haskell is predominantly type-safe, implementations contain a few loopholes through which code can bypass typing and module encapsulation. This paper presents Safe Haskell, a language extension that closes these loopholes. Safe Haskell makes it possible to confine and safely execute untrusted, possibly malicious code. By strictly enforcing types, Safe Haskell allows a variety of different policies from API sandboxing to information-flow control to be implemented easily as monads. Safe Haskell is aimed to be as unobtrusive as possible. It enforces properties that programmers tend to meet already by convention. We describe the design of Safe Haskell and an implementation (currently shipping with GHC) that infers safety for code that lies in a safe subset of the language. We use Safe Haskell to implement an online Haskell interpreter that can securely execute arbitrary untrusted code with no overhead. The use of Safe Haskell greatly simplifies this task and allows the use of a large body of existing code and tools. David Terei, Simon Marlow, Simon L. Peyton Jones, David Mazières |
Haskell | 2 |
| 2011 | A monad for deterministic parallelismabstractWe present a new programming model for deterministic parallel computation in a pure functional language. The model is monadic and has explicit granularity, but allows dynamic construction of dataflow networks that are scheduled at runtime, while remaining deterministic and pure. The implementation is based on monadic concurrency, which has until now only been used to simulate concurrency in functional languages, rather than to provide parallelism. We present the API with its semantics, and argue that parallel execution is deterministic. Furthermore, we present a complete work-stealing scheduler implemented as a Haskell library, and we show that it performs at least as well as the existing parallel programming models in Haskell. Simon Marlow, Ryan Newton, Simon L. Peyton Jones |
Haskell | 1 |
| 2011 | Multicore garbage collection with local heapsabstractIn a parallel, shared-memory, language with a garbage collected heap, it is desirable for each processor to perform minor garbage collections independently. Although obvious, it is difficult to make this idea pay off in practice, especially in languages where mutation is common. We present several techniques that substantially improve the state of the art. We describe these techniques in the context of a full-scale implementation of Haskell, and demonstrate that our local-heap collector substantially improves scaling, peak performance, and robustness. Simon Marlow, Simon L. Peyton Jones |
ISMM | 1 |
| 2010 | Seq no more: better strategies for parallel HaskellabstractWe present a complete redesign of evaluation strategies, a key abstraction for specifying pure, deterministic parallelism in Haskell. Our new formulation preserves the compositionality and modularity benefits of the original, while providing significant new benefits. First, we introduce an evaluation-order monad to provide clearer, more generic, and more efficient specification of parallel evaluation. Secondly, the new formulation resolves a subtle space management issue with the original strategies, allowing parallelism (sparks) to be preserved while reclaiming heap associated with superfluous parallelism. Related to this, the new formulation provides far better support for speculative parallelism as the garbage collector now prunes unneeded speculation. Finally, the new formulation provides improved compositionality: we can directly express parallelism embedded within lazy data structures, producing more compositional strategies, and our basic strategies are parametric in the coordination combinator, facilitating a richer set of parallelism combinators. Simon Marlow, Patrick Maier 0001, Hans-Wolfgang Loidl, Mustafa Aswad, Philip W. Trinder |
Haskell | 1 |
| 2009 | Parallel performance tuning for HaskellabstractParallel Haskell programming has entered the mainstream with support now included in GHC for multiple parallel programming models, along with multicore execution support in the runtime. However, tuning programs for parallelism is still something of a black art. Without much in the way of feedback provided by the runtime system, it is a matter of trial and error combined with experience to achieve good parallel speedups. Don Jones Jr., Simon Marlow, Satnam Singh |
Haskell | 2 |
| 2009 | Runtime support for multicore HaskellabstractPurely functional programs should run well on parallel hardware because of the absence of side effects, but it has proved hard to realise this potential in practice. Plenty of papers describe promising ideas, but vastly fewer describe real implementations with good wall-clock performance. We describe just such an implementation, and quantitatively explore some of the complex design tradeoffs that make such implementations hard to build. Our measurements are necessarily detailed and specific, but they are reproducible, and we believe that they offer some general insights. Simon Marlow, Simon L. Peyton Jones, Satnam Singh |
ICFP | 1 |
| 2008 | Parallel generational-copying garbage collection with a block-structured heapabstractWe present a parallel generational-copying garbage collector implemented for the Glasgow Haskell Compiler. We use a block-structured memory allocator, which provides a natural granularity for dividing the work of GC between many threads, leading to a simple yet effective method for parallelising copying GC. The results are encouraging: we demonstrate wall-clock speedups of on average a factor of 2 in GC time on a commodity 4-core machine with no programmer intervention, compared to our best sequential GC. Simon Marlow, Tim Harris 0001, Roshan P. James, Simon L. Peyton Jones |
ISMM | 1 |
| 2007 | Lightweight concurrency primitives for GHCabstractThe Glasgow Haskell Compiler (GHC) has quite sophisticated support for concurrency in its runtime system, which is written in low-level C code. As GHC evolves, the runtime system becomes increasingly complex, error-prone, difficult to maintain and difficult to add new concurrency features. Simon Marlow, Simon L. Peyton Jones, Andrew P. Tolmach |
Haskell | 2 |
| 2007 | A lightweight interactive debugger for haskellabstractThis paper describes the design and construction of a Haskell source-level debugger built into the GHCi interactive environment. We have taken a pragmatic approach: the debugger is based on the traditional stop-examine-continue model of online debugging, which is simple and intuitive, but has traditionally been shunned in the context of Haskell because it exposes the lazy evaluation order. We argue that this drawback is not as severe as it may seem, and in some cases is an advantage. Simon Marlow, José Iborra, Bernard J. Pope, Andy Gill |
Haskell | 1 |
| 2007 | Faster laziness using dynamic pointer taggingabstractIn the light of evidence that Haskell programs compiled by GHC exhibit large numbers of mispredicted branches on modern processors, we re-examine the "tagless" aspect of the STG-machine that GHC uses as its evaluation model. Simon Marlow, Alexey Rodriguez Yakushev, Simon L. Peyton Jones |
ICFP | 1 |
| 2006 | An extensible dynamically-typed hierarchy of exceptionsabstractIn this paper we address the lack of extensibility of the exception type in Haskell. We propose a lightweight solution involving the use of existential types and the Typeable class only, and show how our solution allows a fully extensible hierarchy of exception types to be declared, in which a single overloaded catch operator can be used to catch either specific exception types, or exceptions belonging to any subclass in the hierarchy. We also show how to combine the existing object-oriented framework OOHaskell with our design, such that OOHaskell objects can be thrown and caught as exceptions, with full support for implicit OOHaskell subtyping in the catch operator. Simon Marlow |
Haskell | 1 |
| 2006 | Making a fast curry: push/enter vs. eval/apply for higher-order languagesabstractHigher-order languages that encourage currying are typically implemented using one of two basic evaluation models: push/enter or eval/apply. Implementors use their intuition and qualitative judgements to choose one model or the other. Our goal in this paper is to provide, for the first time, a more substantial basis for this choice, based on our qualitative and quantitative experience of implementing both models in a state-of-the-art compiler for Haskell. Our conclusion is simple, and contradicts our initial intuition: compiled implementations should use eval/apply. Simon Marlow, Simon L. Peyton Jones |
J. Funct. Program. | 1 |
| 2005 | Visual haskell: a full-featured haskell development environmentabstractWe describe the design and implementation of a full-featured Haskell development environment, based on Microsoft's extensible Visual Studio environment.Visual Haskell provides a number of features not found in existing Haskell development environments: interactive error-checking, displaying of inferred types in the editor, and other features based on static properties of the source code. Visual Haskell also provides full support for developing and building multi-module Haskell projects, based on the Cabal architecture. Visual Haskell supports the full GHC language, and can be used to develop real Haskell applications (including the code of the plugin itself).Visual Haskell has driven developments in other Haskell-related projects: Cabal, the Concurrent FFI extension, and an API to allow programmatic access to GHC itself. Furthermore, development of the Visual Haskell plugin required industrial-strength foreign language interoperability; we describe all our experiences in detail. Krasimir Angelov, Simon Marlow |
Haskell | 2 |
| 2005 | Haskell on a shared-memory multiprocessorabstractMulti-core processors are coming, and we need ways to program them. The combination of purely-functional programming and explicit, monadic threads, communicating using transactional memory, looks like a particularly promising way to do so. This paper describes a full-scale implementation of shared-memory parallel Haskell, based on the Glasgow Haskell Compiler. Our main technical contribution is a lock-free mechanism for evaluating shared thunks that eliminates the major performance bottleneck in parallel evaluation of a lazy language. Our results are preliminary but promising: we can demonstrate wall-clock speedups of a serious application (GHC itself), even with only two processors, compared to the same application compiled for a uni-processor. Tim Harris 0001, Simon Marlow, Simon L. Peyton Jones |
Haskell | 2 |
| 2005 | Associated types with classabstractHaskell's type classes allow ad-hoc overloading, or type-indexing, of functions. A natural generalisation is to allow type-indexing of data types as well. It turns out that this idea directly supports a powerful form of abstraction called associated types, which are available in C++ using traits classes. Associated types are useful in many applications, especially for self-optimising libraries that adapt their data representations and algorithms in a type-directed manner.In this paper, we introduce and motivate associated types as a rather natural generalisation of Haskell's existing type classes. Formally, we present a type system that includes a type-directed translation into an explicitly typed target language akin to System F; the existence of this translation ensures that the addition of associated data types to an existing Haskell compiler only requires changes to the front end. Manuel M. T. Chakravarty, Gabriele Keller, Simon L. Peyton Jones, Simon Marlow |
POPL | 4 |
| 2005 | Composable memory transactionsabstractWriting concurrent programs is notoriously difficult, and is of increasing practical importance. A particular source of concern is that even correctly-implemented concurrency abstractions cannot be composed together to form larger abstractions. In this paper we present a new concurrency model, based on transactional memory, that offers far richer composition. All the usual benefits of transactional memory are present (e.g. freedom from deadlock), but in addition we describe new modular forms of blocking and choice that have been inaccessible in earlier work. Tim Harris 0001, Simon Marlow, Simon L. Peyton Jones, Maurice Herlihy |
PPoPP | 2 |
| 2004 | Extending the Haskell foreign function interface with concurrencyabstractA Haskell system that includes both the Foreign Function Interface and the Concurrent Haskell extension must consider how Concurrent Haskell threads map to external Operating System threads for the purposes of specifying in which thread a foreign call is made.Many concurrent languages take the easy route and specify a one-to-one correspondence between the language's own threads and external OS threads. However, OS threads tend to be expensive, so this choice can limit the performance and scalability of the concurrent language.The main contribution of this paper is a language design that provides a neat solution to this problem, allowing the implementor of the language enough flexibility to provide cheap lightweight threads, while still providing the programmer with control over the mapping between internal threads and external threads where necessary. Simon Marlow, Simon L. Peyton Jones, Wolfgang Thaller |
Haskell | 1 |
| 2004 | Making a fast curry: push/enter vs. eval/apply for higher-order languagesabstractHigher-order languages that encourage currying are implemented using one of two basic evaluation models: push/enter or eval/apply. Implementors use their intuition and qualitative judgements to choose one model or the other.Our goal in this paper is to provide, for the first time, a more substantial basis for this choice, based on our qualitative and quantitative experience of implementing both models in a state-of-the-art compiler for Haskell.Our conclusion is simple, and contradicts our initial intuition: compiled implementations should use eval/apply. Simon Marlow, Simon L. Peyton Jones |
ICFP | 1 |
| 2004 | Exploring the barrier to entry: incremental generational garbage collection for HaskellabstractWe document the desi n and implementation of a "production" incremental garbage collector for GHC 6.2.It builds on our earlier work (Non-stop Haskell)that exploited GHC's dynamic dispatch mechanism to hijack object code pointers so that objects in to-space automatically scavenge themselves when the mutator attempts to "enter" them. This paper details various optimisations based on code specialisation that remove the dynamic space,and associated time, overheads that accompanied our earlier scheme.We detail important implementation issues and provide a detailed evaluation of a range of design alternatives in comparison with Non-stop Haskell and GHC's current generational collector.We also show how the same code specialisation techniques can be used to eliminate the write barrier in a enerational collector. Andrew M. Cheadle, Tony Field, Simon Marlow, Simon L. Peyton Jones, Lyndon While |
ISMM | 3 |
| 2002 | Haddock, a Haskell documentation toolabstractThis paper describes Haddock, a tool for automatically generating documentation from Haskell source code. Haddock's unique approach to source code annotations provides a useful separation between the implementation of a library and the interface (and hence also the documentation) of that library, so that as far as possible the documentation annotations in the source code do not affect the programmer's freedom over the structure of the implementation. The internal structure and implementation of Haddock is also discussed. Simon Marlow |
Haskell | 1 |
| 2002 | Secrets of the Glasgow Haskell Compiler inlinerabstractHigher-order languages such as Haskell encourage the programmer to build abstractions by composing functions. A good compiler must inline many of these calls to recover an efficiently executable program. In principle, inlining is dead simple: just replace the call of a function by an instance of its body. But any compiler-writer will tell you that inlining is a black art, full of delicate compromises that work together to give good performance without unnecessary code bloat. The purpose of this paper is, therefore, to articulate the key lessons we learned from a full-scale “production” inliner, the one used in the Glasgow Haskell compiler. We focus mainly on the algorithmic aspects, but we also provide some indicative measurements to substantiate the importance of various aspects of the inliner. Simon L. Peyton Jones, Simon Marlow |
J. Funct. Program. | 2 |
| 2002 | Developing a high-performance web server in Concurrent HaskellabstractServer applications, and in particular network-based server applications, place a unique combination of demands on a programming language: lightweight concurrency, high I/O throughput, and fault tolerance are all important. This paper describes a prototype web server written in Concurrent Haskell (with extensions), and presents two useful results: firstly, a conforming server could be written with minimal effort, leading to an implementation in less than 1500 lines of code, and secondly the naive implementation produced reasonable performance. Furthermore, making minor modifications to a few time-critical components improved performance to a level acceptable for anything but the most heavily loaded web servers. Simon Marlow |
J. Funct. Program. | 1 |
| 2001 | Asynchronous Exceptions in HaskellabstractAsynchronous exceptions, such as timeouts are important for robust, modular programs, but are extremely difficult to program with — so much so that most programming languages either heavily restrict them or ban them altogether. We extend our earlier work, in which we added synchronous exceptions to Haskell, to support asynchronous exceptions too. Our design introduces scoped combinators for blocking and unblocking asynchronous interrupts, along with a somewhat surprising semantics for operations that can suspend. Uniquely, we also give a formal semantics for our system. Simon Marlow, Simon L. Peyton Jones, Andrew Moran, John H. Reppy |
PLDI | 1 |
| 2000 | Non-stop HaskellabstractWe describe an efficient technique for incorporating Baker's incremental garbage collection algorithm into the Spineless Tagless G-machine on stock hardware. This algorithm eliminates the stop/go execution associated with bulk copying collection algorithms, allowing the system to place an upper bound on the pauses due to garbage collection. The technique exploits the fact that objects are always accessed by jumping to code rather than being explicitly dereferenced. It works by modifying the entry code-pointer when an object is in the transient state of being evacuated but not scavenged. An attempt to enter it from the mutator causes the object to "self-scavenge" transparently before resetting its entry code pointer. We describe an implementation of the scheme in v4.01 of the Glasgow Haskell Compiler and report performance results obtained by executing a range of applications. These experiments show that the read barrier can be implemented in dynamic dispatching systems such as the STG-machine with very short mutator pause times and with negligible overhead on execution time. Andrew M. Cheadle, Tony Field, Simon Marlow, Simon L. Peyton Jones, Lyndon While |
ICFP | 3 |
| 1999 | A Semantics for Imprecise ExceptionsabstractSome modern superscalar microprocessors provide only imprecise exceptions. That is, they do not guarantee to report the same exception that would be encountered by a straightforward sequential execution of the program. In exchange, they offer increased performance or decreased chip area (which amount to much the same thing).This performance/precision tradeoff has not so far been much explored at the programming language level. In this paper we propose a design for imprecise exceptions in the lazy functional programming language Haskell. We discuss several designs, and conclude that imprecision is essential if the language is still to enjoy its current rich algebra of transformations. We sketch a precise semantics for the language extended with exceptions.The paper shows how to extend Haskell with exceptions without crippling the language or its compilers. We do not yet have enough experience of using the new mechanism to know whether it strikes an appropriate balance between expressiveness and performance. Simon L. Peyton Jones, Alastair Reid 0001, Fergus Henderson, Tony Hoare, Simon Marlow |
PLDI | 5 |
| 1997 | A Practical Subtyping System For ErlangabstractWe present a type system for the programming language Erlang. The type system supports subtyping and declaration-free recursive types, using subtyping constraints. Our system is similar to one explored by Aiken and Wimmers, though it sacrifices expressive power in favour of simplicity. We cover our techniques for type inference, type simplification, and checking when an inferred type conforms to a user-supplied type signature, and report on early experience with our prototype. Simon Marlow, Philip Wadler |
ICFP | 1 |