16 research outputs found
Imperative functional programs that explain their work
Program slicing provides explanations that illustrate how program outputs
were produced from inputs. We build on an approach introduced in prior work by
Perera et al., where dynamic slicing was defined for pure higher-order
functional programs as a Galois connection between lattices of partial inputs
and partial outputs. We extend this approach to imperative functional programs
that combine higher-order programming with references and exceptions. We
present proofs of correctness and optimality of our approach and a
proof-of-concept implementation and experimental evaluation.Comment: Full version of ICFP 2017 paper, with appendice
Language-integrated provenance by trace analysis
Language-integrated provenance builds on language-integrated query techniques
to make provenance information explaining query results readily available to
programmers. In previous work we have explored language-integrated approaches
to provenance in Links and Haskell. However, implementing a new form of
provenance in a language-integrated way is still a major challenge. We propose
a self-tracing transformation and trace analysis features that, together with
existing techniques for type-directed generic programming, make it possible to
define different forms of provenance as user code. We present our design as an
extension to a core language for Links called LinksT, give examples showing its
capabilities, and outline its metatheory and key correctness properties.Comment: DBPL 201
Language-integrated provenance by trace analysis
Language-integrated provenance builds on language-integrated query techniques
to make provenance information explaining query results readily available to
programmers. In previous work we have explored language-integrated approaches
to provenance in Links and Haskell. However, implementing a new form of
provenance in a language-integrated way is still a major challenge. We propose
a self-tracing transformation and trace analysis features that, together with
existing techniques for type-directed generic programming, make it possible to
define different forms of provenance as user code. We present our design as an
extension to a core language for Links called LinksT, give examples showing its
capabilities, and outline its metatheory and key correctness properties.Comment: DBPL 201
Language-integrated provenance
Provenance, or information about the origin or derivation of data, is
important for assessing the trustworthiness of data and identifying and
correcting mistakes. Most prior implementations of data provenance have
involved heavyweight modifications to database systems and little attention has
been paid to how the provenance data can be used outside such a system. We
present extensions to the Links programming language that build on its support
for language-integrated query to support provenance queries by rewriting and
normalizing monadic comprehensions and extending the type system to distinguish
provenance metadata from normal data. The main contribution of this article is
to show that the two most common forms of provenance can be implemented
efficiently and used safely as a programming language feature with no changes
to the database system.Comment: Accepted to Science of Computer Programming special issue on PPDP
201