John Launchbury

dblp:l/JLaunchbury · DBLP profile ↗
← Back
31ranked-venue papers
15as first author
0since 2021 · last 2015
0009-0009-7275-2811ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 27 · 14 first-authorTheory of computation · 6 · 2 first-authorDatabases, data management, data science and information retrieval · 1 · 1 first-authorApplied, interdisciplinary, general and emerging computing · 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
7 papers
Programming languages and type systems · 66% Software maintenance and evolution · 18% Compilers and program optimization · 10%
Theoretical computer science
1 paper
Graph algorithms and graph theory · 100%

Topics — the 21 heaviest of 23, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Software maintenance and evolution
software modularity
0.012003
Modularity in the New Millenium: A Panel Summary · ICSE 2003
Programming languages and type systems
type systems
0.022000
Implicit Parameters: Dynamic Scoping with Static Types · POPL 2000
Lazy Functional State Threads · PLDI 1994
Programming languages and type systems › language semantics
dynamic scoping
0.012000
Implicit Parameters: Dynamic Scoping with Static Types · POPL 2000
Compilers and program optimization
intermediate representation
0.011998
Bridging the Gulf: A Common Intermediate Language for ML and Haskell · POPL 1998
Programming languages and type systems › interoperability
language interoperability
0.011998
Bridging the Gulf: A Common Intermediate Language for ML and Haskell · POPL 1998
Programming languages and type systems
functional programming
0.021998
Structuring Depth-First Search Algorithms in Haskell · POPL 1995
Bridging the Gulf: A Common Intermediate Language for ML and Haskell · POPL 1998
Programming languages and type systems › functional language
lazy functional languages
0.011995
Structuring Depth-First Search Algorithms in Haskell · POPL 1995
Graph algorithms and graph theory › graph algorithms › graph search
depth-first search
0.011995
Structuring Depth-First Search Algorithms in Haskell · POPL 1995
Graph algorithms and graph theory
graph algorithms
0.011995
Structuring Depth-First Search Algorithms in Haskell · POPL 1995
Graph algorithms and graph theory › graph algorithms › connectivity
strongly connected components
0.011995
Structuring Depth-First Search Algorithms in Haskell · POPL 1995
Programming languages and type systems › type systems › polymorphism
parametric polymorphism
0.011994
Lazy Functional State Threads · PLDI 1994
Programming languages and type systems
evaluation strategies
0.011993
A Natural Semantics for Lazy Evaluation · POPL 1993
Programming languages and type systems
language semantics
0.011993
A Natural Semantics for Lazy Evaluation · POPL 1993
Programming languages and type systems
lazy evaluation
0.011993
A Natural Semantics for Lazy Evaluation · POPL 1993
Programming languages and type systems › language semantics › formal semantics
operational semantics
0.011993
A Natural Semantics for Lazy Evaluation · POPL 1993
Compilers and program optimization › partial evaluation
binding-time analysis
0.011991
Strictness and Binding-Time Analyses: Two for the Price of One · PLDI 1991
Program analysis
static analysis
0.011991
Strictness and Binding-Time Analyses: Two for the Price of One · PLDI 1991
Program analysis › static analysis › abstract interpretation
strictness analysis
0.011991
Strictness and Binding-Time Analyses: Two for the Price of One · PLDI 1991
Electronic design automation
hardware verification and test
0.011999
Elementary Microarchitecture Algebra · CAV 1999
Programming languages and type systems › evaluation strategies
non-strict evaluation
0.011998
Bridging the Gulf: A Common Intermediate Language for ML and Haskell · POPL 1998
Runtime systems and virtual machines › runtime memory management
heap management
0.011993
A Natural Semantics for Lazy Evaluation · POPL 1993

Methods — techniques the papers use, named apart from their topics

monads · 0.0calculational proof · 0.0hindley-milner type inference · 0.0algebra · 0.0unpointed types · 0.0runST · 0.0sharing model · 0.0natural semantics · 0.0abstract interpretation · 0.0
YearPublicationVenuePosition
2015 Guilt free ivory
abstract
Ivory is a language that enforces memory safety and avoids most undefined behaviors while providing low-level control of memory- manipulation. Ivory is embedded in a modern variant of Haskell, as implemented by the GHC compiler. The main contributions of the paper are two-fold. First, we demonstrate how to embed the type-system of a safe-C language into the type extensions of GHC. Second, Ivory is of interest in its own right, as a powerful language for writing high-assurance embedded programs. Beyond invariants enforced by its type-system, Ivory has direct support for model-checking, theorem-proving, and property-based testing. Ivory’s semantics have been formalized and proved to guarantee memory safety.
Trevor Elliott, Lee Pike, Simon Winwood, Patrick C. Hickey, James Bielman, Jamey Sharp, Eric L. Seidel, John Launchbury
Haskell8
2014 Application-Scale Secure Multiparty Computation
John Launchbury, David W. Archer, Thomas DuBuisson, Eric Mertens
ESOP1
2014 Building embedded systems with embedded DSLs
abstract
We report on our experiences in synthesizing a fully-featured autopilot from embedded domain-specific languages (EDSLs) hosted in Haskell. The autopilot is approximately 50k lines of C code generated from 10k lines of EDSL code and includes control laws, mode logic, encrypted communications system, and device drivers. The autopilot was built in less than two engineer years. This is the story of how EDSLs provided the productivity and safety gains to do large-scale low-level embedded programming and lessons we learned in doing so.
Patrick C. Hickey, Lee Pike, Trevor Elliott, James Bielman, John Launchbury
ICFP5
2012 Efficient lookup-table protocol in secure multiparty computation
abstract
Secure multiparty computation (SMC) permits a collection of parties to compute a collaborative result, without any of the parties gaining any knowledge about the inputs provided by other parties. Specifications for SMC are commonly presented as boolean circuits, where optimizations come mostly from reducing the number of multiply-operations (including and-gates) - these are the operations which incur significant cost, either in computation overhead or in communication between the parties. Instead, we take a language-oriented approach, and consequently are able to explore many other kinds of optimizations. We present an efficient and general purpose SMC table-lookup algorithm that can serve as a direct alternative to circuits. Looking up a private (i.e. shared, or encrypted) n-bit argument in a public table requires log(n) parallel-and operations. We use the advanced encryption standard algorithm (AES) as a driving motivation, and by introducing different kinds of parallelization techniques, produce the fastest current SMC implementation of AES, improving the best previously reported results by well over an order of magnitude.
John Launchbury, Iavor S. Diatchki, Thomas DuBuisson, Andy Adams-Moran
ICFP1
2011 Theorem-based circuit derivation in cryptol
abstract
Even though step-by-step refinement has long been seen as desirable, it is hard to find compelling industrial applications of the technique. In theory, transforming a high-level specification into a high-performance implementation is an ideal means of producing a correct design, but in practice it is hard to make it work, and even harder to make it worthwhile. This talk describes an exception.
John Launchbury
GPCE1
2010 Concurrent orchestration in Haskell
abstract
We present a concurrent scripting language embedded in Haskell, emulating the functionality of the Orc orchestration language by providing many-valued (real) non-determinism in the context of concurrent effects. We provide many examples of its use, as well as a brief description of how we use the embedded Orc DSL in practice. We describe the abstraction layers of the implementation, and use the fact that we have a layered approach to demonstrate algebraic properties satisfied by the combinators.
John Launchbury, Trevor Elliott
Haskell1
2008 Industrial Functional Programming
John Launchbury
PADL1
2004 Galois: high assurance software
abstract
As a company, Galois began its life with the mission simply of supplying functional programming services, building tools and products for clients, leveraging the productivity of functional languages and the abilities of our engineers. This went well, except that our business lacked focus. Every new job had to be found and sold from scratch. We realized that we had to focus on a specific market if we wanted to achieve stability and growth. We chose High Assurance Software as it was a natural fit both for our technology and our expertise, further narrowing our attention to information assurance (IA).
John Launchbury
ICFP1
2003 Modularity in the New Millenium: A Panel Summary
Premkumar T. Devanbu, Robert Balzer, Don S. Batory, Gregor Kiczales, John Launchbury, David Lorge Parnas, Peri L. Tarr
ICSE5
2002 A recursive do for Haskell
abstract
Certain programs making use of monads need to perform recursion over the values of monadic actions. Although the do-notation of Haskell provides a convenient framework for monadic programming, it lacks the generality to support such recursive bindings. In this paper, we describe an enhanced translation schema for the donotation and its integration into Haskell. The new translation allows variables to be bound recursively, provided the underlying monad comes equipped with an appropriate fixed-point operator.
Levent Erkök, John Launchbury
Haskell2
2001 Categories of Processes Enriched in Final Coalgebras
Sava Krstic, John Launchbury, Dusko Pavlovic
FoSSaCS2
2000 Recursive monadic bindings
abstract
Monads have become a popular tool for dealing with computational effects in Haskell for two significant reasons: equational reasoning is retained even in the presence of effects; and program modularity is enhanced by hiding "plumbing" issues inside the monadic infrastructure. Unfortunately, not all the facilities provided by the underlying language are readily available for monadic computations. In particular, while recursive monadic computations can be defined directly using Haskell's built-in recursion capabilities, there is no natural way to express recursion over the values of monadic actions. Using examples, we illustrate why this is a problem, and we propose an extension to Haskell's donotation to remedy the situation. It turns out that the structure of monadic value-recursion depends on the structure of the underlying monad. We propose an axiomatization of the recursion operation and provide a catalogue of definitions that satisfy our criteria.
Levent Erkök, John Launchbury
ICFP2
2000 Implicit Parameters: Dynamic Scoping with Static Types
abstract
This paper introduces a language feature, called implicit parameters, that provides dynamically scoped variables within a statically-typed Hindley-Milner framework. Implicit parameters are lexically distinct from regular identifiers, and are bound by a special with construct whose scope is dynamic, rather than static as with let. Implicit parameters are treated by the type system as parameters that are not explicitly declared, but are inferred from their use.
Jeffrey R. Lewis, John Launchbury, Erik Meijer 0001, Mark Shields
POPL2
1999 Elementary Microarchitecture Algebra
John Matthews, John Launchbury
CAV2
1999 On Embedding a Microarchitectural Design Language within Haskell
abstract
Based on our experience with modelling and verifying microarchitectural designs within Haskell, this paper examines our use of Haskell as host for an embedded language. In particular, we highlight our use of Haskell's lazy lists, type classes, lazy state monad, and unsafe Perform I0, and point to several areas where Haskell could be improved in the future. We end with an example of a benefit gained by bringing the functional perspective to microarchitectural modelling.
John Launchbury, Jeffrey R. Lewis, Byron Cook
ICFP1
1998 Bridging the Gulf: A Common Intermediate Language for ML and Haskell
abstract
Compilers for ML and Haskell use intermediate languages that incorporate deeply-embedded assumptions about order of evaluation and side effects. We propose an intermediate language into which one can compile both ML and Haskell, thereby facilitating the sharing of ideas and infrastructure, and supporting language developments that move each language in the direction of the other. Achieving this goal without compromising the ability to Compile as good code as a more direct route turned out to be much more subtle than we expected. We address this challenge using monads and unpointed types, identify two alternative language designs, and explore the choices they embody.
Simon L. Peyton Jones, Mark Shields, John Launchbury, Andrew P. Tolmach
POPL3
1997 Disposable Memo Functions (Extended Abstract)
abstract
No abstract available.
Byron Cook, John Launchbury
ICFP2
1997 Monadic State: Axiomatization and Type Safety
abstract
Type safety of imperative programs is an area fraught with difficulty and requiring great care. The SML solution to the problem, originally involving imperative type variables, has been recently simplified to the syntactic-value restriction. In Haskell, the problem is addressed in a rather different way using explicit monadic state. We present an operational semantics for state in Haskell and the first full proof of type safety. We demonstrate that the semantic notion of value provided by the explicit monadic types is able to avoid any problems with generalization.
John Launchbury, Amr Sabry
ICFP1
1996 Parametricity and Unboxing with Unpointed Types
John Launchbury, Ross Paterson
ESOP1
1996 Representing Demand by Partial Projections
abstract
Abstract The projection-based strictness analysis of Wadler and Hughes is elegant and theoretically satisfying except in one respect: the need for lifting. The domains and functions over which the analysis is performed need to be transformed, leading to a less direct correspondence between analysis and program than might be hoped for. In this paper we shall see that the projection analysis may be reformulated in terms of partial projections, so removing this infelicity. There are additional benefits of the formulation: the two forms of information captured by the projection are distinguished, and the operational significance of the range of the projection fits exactly with the theory of unboxed types.
John Launchbury, Gebreselassie Baraki
J. Funct. Program.1
1995 Structuring Depth-First Search Algorithms in Haskell
abstract
Depth-first search is the key to a wide variety of graph algorithms. In this paper we express depth-first search in a lazy functional language, obtaining a linear-time implementation. Unlike traditional imperative presentations, we use the structuring methods of functional languages to construct algorithms from individual reusable components. This style of algorithm construction turns out to be quite amenable to formal proof, which we exemplify through a calculational-style proof of a far from obvious strongly-connected components algorithm.
David J. King, John Launchbury
POPL2
1994 Lazy Funtional State Threads: An Abstract
John Launchbury, Simon L. Peyton Jones
ICLP1
1994 Lazy Functional State Threads
abstract
Some algorithms make critical internal use of updatable state, even though their external specification is purely functional. Based on earlier work on monads, we present a way of securely encapsulating stateful computations that manipulate multiple, named, mutable objects, in the context of a non-strict, purely-functional language.
John Launchbury, Simon L. Peyton Jones
PLDI1
1994 Reversing Abstract Interpretations
John Hughes 0001, John Launchbury
Sci. Comput. Program.2
1993 A Natural Semantics for Lazy Evaluation
abstract
We define an operational semantics for lazy evaluation which provides an accurate model for sharing. The only computational structure we introduce is a set of bindings which corresponds closely to a heap. The semantics is set at a considerably higher level of abstraction than operational semantics for particular abstract machines, so is more suitable for a variety of proofs. Furthermore, because a heap is explicitly modelled, the semantics provides a suitable framework for studies about space behaviour of terms under lazy evaluation.
John Launchbury
POPL1
1992 Reversing Abstract Interpretations
John Hughes 0001, John Launchbury
ESOP2
1992 Relational Reversal of Abstract Interpretation
John Hughes 0001, John Launchbury
J. Log. Comput.2
1992 Projections for Polymorphic First-Order Strictness Analysis
abstract
We apply the categorical properties of polymorphic functions to compile-time analysis, specifically projection-based strictness analysis. First we interpret parameterised types as functors in a suitable category, and show that they preserve monics and epics. Then we define “strong” and “weak” polymorphism, the latter admitting certain projections that are not polymorphic in the usual sense. We prove that, under the right conditions, a weakly polymorphic function is characterised by a single instance. It follows that the strictness analysis of one simple instance of a polymorphic function yields results that apply to all. We show how this theory may be applied. In comparison with earlier polymorphic strictness analysis methods, ours can apply polymorphic information to a particular instance very simply. The categorical approach simplifies our proofs, enabling them to be carried out at a higher level, and making them independent of the precise form of the programming language to be analysed. The major limitation of our results is that they apply only to first-order functions.
John Hughes 0001, John Launchbury
Math. Struct. Comput. Sci.2
1991 Strictness and Binding-Time Analyses: Two for the Price of One
abstract
article Free Access Share on Strictness and binding-time analyses: two for the price of one Author: John Launchbury University of Glasgow University of GlasgowView Profile Authors Info & Claims ACM SIGPLAN NoticesVolume 26Issue 6June 1991 pp 80–91https://doi.org/10.1145/113446.113453Online:01 May 1991Publication History 9citation234DownloadsMetricsTotal Citations9Total Downloads234Last 12 Months8Last 6 weeks2 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteeReaderPDF
John Launchbury
PLDI1
1990 Strictness Analysis Aids Inductive Proofs
John Launchbury
Inf. Process. Lett.1
1989 Constructing Natural Language Interpreters in a Lazy Functional Language
abstract
In this paper, we describe a method by which language parsers and interpreters may be implemented in a lazy functional programming language. The visual appearance of such interpreters mimics the BNP description of the grammar of the language being interpreted. The method is particularly well suited to the implementation of language interpreters that are based on the principle of ‘rule to rule’ correspondence (in which each production rule of the grammar has a translation rule associated with it). The main objective of the paper is to demonstrate that the method described provides a useful framework within which both grammars and semantic theories of languages many be investigated. We present the method by example: the simple natural language interpreter we construct is based loosely on principles proposed by Richard Montague.
R. Frost, John Launchbury
Comput. J.2