Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data.

Ryan G. Scott

dblp:195/6445 · DBLP profile ↗
← Back
6ranked-venue papers
2as first author
1since 2021 · last 2023
0009-0006-5642-5667ORCID · corroborated

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

Software engineering, systems software and programming languages · 5 · 2 first-author · 1 since 2021Systems, architecture and hardware · 2

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
4 papers
Operating systems · 30% Program verification · 20% Programming languages and type systems · 20%
Computer architecture, parallel and distributed computing, and storage systems
2 papers
Parallel and multicore computing · 34% Cloud and datacenter computing · 34% Distributed systems · 31%
Theoretical computer science
1 paper
Automated reasoning and model checking · 100%

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

TopicWeightPapersLastEvidence papers
Software maintenance and evolution › build systems
build reproducibility
0.412020
Reproducible Containers · ASPLOS 2020
Operating systems › system security › operating system security › protection mechanism › isolation
container isolation
0.412020
Reproducible Containers · ASPLOS 2020
Program verification
deductive verification
0.312018
Refinement reflection: complete verification with SMT · Proc. ACM Program. Lang. 2018
Programming languages and type systems › type systems › refinement types
liquid types
0.312018
Refinement reflection: complete verification with SMT · Proc. ACM Program. Lang. 2018
Programming languages and type systems › type systems
refinement types
0.312018
Refinement reflection: complete verification with SMT · Proc. ACM Program. Lang. 2018
Program verification
SMT-based verification
0.312018
Refinement reflection: complete verification with SMT · Proc. ACM Program. Lang. 2018
Automated reasoning and model checking › theorem proving
proof search
0.312018
Refinement reflection: complete verification with SMT · Proc. ACM Program. Lang. 2018
Concurrent programming
memory models
0.312017
SC-Haskell: Sequential Consistency in Languages That Minimize Mutable Shared Heap · PPoPP 2017
Operating systems › system security › operating system security › protection mechanism › isolation
process isolation
0.312017
Monadic composition for deterministic, parallel batch processing · Proc. ACM Program. Lang. 2017
Operating systems › system security › operating system security › protection mechanism › isolation
sandboxing
0.312017
Monadic composition for deterministic, parallel batch processing · Proc. ACM Program. Lang. 2017
Concurrent programming › memory models
sequential consistency
0.312017
SC-Haskell: Sequential Consistency in Languages That Minimize Mutable Shared Heap · PPoPP 2017
Cloud and datacenter computing › datacenter workloads
batch processing
0.312017
Monadic composition for deterministic, parallel batch processing · Proc. ACM Program. Lang. 2017
Parallel and multicore computing
deterministic execution
0.312017
Monadic composition for deterministic, parallel batch processing · Proc. ACM Program. Lang. 2017
Distributed systems
fault tolerance
0.112020
Reproducible Containers · ASPLOS 2020
Distributed systems
replication
0.112020
Reproducible Containers · ASPLOS 2020

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

model checking · 0.7equational reasoning · 0.7abstract interpretation · 0.7SMT solving · 0.7static typing · 0.6monadic composition · 0.6dynamic determinism enforcement · 0.6language design · 0.3
YearPublicationVenuePosition
2023 Trustworthy Runtime Verification via Bisimulation (Experience Report)
abstract
When runtime verification is used to monitor safety-critical systems, it is essential that monitoring code behaves correctly. The Copilot runtime verification framework pursues this goal by automatically generating C monitor programs from a high-level DSL embedded in Haskell. In safety-critical domains, every piece of deployed code must be accompanied by an assurance argument that is convincing to human auditors. However, it is difficult for auditors to determine with confidence that a compiled monitor cannot crash and implements the behavior required by the Copilot semantics. In this paper we describe CopilotVerifier, which runs alongside the Copilot compiler, generating a proof of correctness for the compiled output. The proof establishes that a given Copilot monitor and its compiled form produce equivalent outputs on equivalent inputs, and that they either crash in identical circumstances or cannot crash. The proof takes the form of a bisimulation broken down into a set of verification conditions. We leverage two pieces of SMT-backed technology: the Crucible symbolic execution library for LLVM and the What4 solver interface library. Our results demonstrate that dramatically increased compiler assurance can be achieved at moderate cost by building on existing tools. This paves the way to our ultimate goal of generating formal assurance arguments that are convincing to human auditors.
Ryan G. Scott, Mike Dodds, Ivan Perez 0001, Alwyn Goodloe, Robert Dockins
Proc. ACM Program. Lang.1
2020 Reproducible Containers
abstract
We describe the design and implementation of DetTrace, a reproducible container abstraction for Linux implemented in user space. All computation that occurs inside a DetTrace container is a pure function of the initial filesystem state of the container. Reproducible containers can be used for a variety of purposes, including replication for fault-tolerance, reproducible software builds and reproducible data analytics. We use DetTrace to achieve, in an automatic fashion, reproducibility for 12,130 Debian package builds, containing over 800 million lines of code, as well as bioinformatics and machine learning workflows. We show that, while software in each of these domains is initially irreproducible, DetTrace brings reproducibility without requiring any hardware, OS or application changes. DetTrace's performance is dictated by the frequency of system calls: IO-intensive software builds have an average overhead of 3.49x, while a compute-bound bioinformatics workflow is under 2%.
Omar S. Navarro Leija, Kelly Shiptoski, Ryan G. Scott, Baojun Wang, Nicholas Renner, Ryan Newton, Joseph Devietti
ASPLOS3
2020 Lower your guards: a compositional pattern-match coverage checker
abstract
A compiler should warn if a function defined by pattern matching does not cover its inputs—that is, if there are missing or redundant patterns. Generating such warnings accurately is difficult for modern languages due to the myriad of language features that interact with pattern matching. This is especially true in Haskell, a language with a complicated pattern language that is made even more complex by extensions offered by the Glasgow Haskell Compiler (GHC). Although GHC has spent a significant amount of effort towards improving its pattern-match coverage warnings, there are still several cases where it reports inaccurate warnings. We introduce a coverage checking algorithm called Lower Your Guards, which boils down the complexities of pattern matching into guard trees . While the source language may have many exotic forms of patterns, guard trees only have three different constructs, which vastly simplifies the coverage checking process. Our algorithm is modular, allowing for new forms of source-language patterns to be handled with little changes to the overall structure of the algorithm. We have implemented the algorithm in GHC and demonstrate places where it performs better than GHC’s current coverage checker, both in accuracy and performance.
Sebastian Graf 0004, Simon L. Peyton Jones, Ryan G. Scott
Proc. ACM Program. Lang.3
2018 Refinement reflection: complete verification with SMT
abstract
We introduce Refinement Reflection , a new framework for building SMT-based deductive verifiers. The key idea is to reflect the code implementing a user-defined function into the function’s (output) refinement type. As a consequence, at uses of the function, the function definition is instantiated in the SMT logic in a precise fashion that permits decidable verification. Reflection allows the user to write equational proofs of programs just by writing other programs using pattern-matching and recursion to perform case-splitting and induction. Thus, via the propositions-as-types principle, we show that reflection permits the specification of arbitrary functional correctness properties. Finally, we introduce a proof-search algorithm called Proof by Logical Evaluation that uses techniques from model checking and abstract interpretation, to completely automate equational reasoning. We have implemented reflection in Liquid Haskell and used it to verify that the widely used instances of the Monoid, Applicative, Functor, and Monad typeclasses actually satisfy key algebraic laws required to make the clients safe, and have used reflection to build the first library that actually verifies assumptions about associativity and ordering that are crucial for safe deterministic parallelism.
Niki Vazou, Anish Tondwalkar, Vikraman Choudhury, Ryan G. Scott, Ryan Newton, Philip Wadler, Ranjit Jhala
Proc. ACM Program. Lang.4
2017 SC-Haskell: Sequential Consistency in Languages That Minimize Mutable Shared Heap
abstract
A core, but often neglected, aspect of a programming language design is its memory (consistency) model. Sequential consistency~(SC) is the most intuitive memory model for programmers as it guarantees sequential composition of instructions and provides a simple abstraction of shared memory as a single global store with atomic read and writes. Unfortunately, SC is widely considered to be impractical due to its associated performance overheads.
Michael Vollmer 0003, Ryan G. Scott, Madan Musuvathi, Ryan Newton
PPoPP2
2017 Monadic composition for deterministic, parallel batch processing
abstract
Achieving determinism on real software systems remains difficult. Even a batch-processing job, whose task is to map input bits to output bits, risks nondeterminism from thread scheduling, system calls, CPU instructions, and leakage of environmental information such as date or CPU model. In this work, we present a system for achieving low-overhead deterministic execution of batch-processing programs that read and write the file system—turning them into pure functions on files. We allow multi-process executions where a permissions system prevents races on the file system. Process separation enables different processes to enforce permissions and enforce determinism using distinct mechanisms. Our prototype, DetFlow, allows a statically-typed coordinator process to use shared-memory parallelism, as well as invoking process-trees of sandboxed legacy binaries. DetFlow currently implements the coordinator as a Haskell program with a restricted I/O type for its main function: a new monad we call DetIO. Legacy binaries launched by the coordinator run concurrently, but internally each process schedules threads sequentially, allowing dynamic determinism-enforcement with predictably low overhead. We evaluate DetFlow by applying it to bioinformatics data pipelines and software build systems. DetFlow enables determinizing these data-processing workflows by porting a small amount of code to become a statically-typed coordinator. This hybrid approach of static and dynamic determinism enforcement permits freedom where possible but restrictions where necessary.
Ryan G. Scott, Omar S. Navarro Leija, Joseph Devietti, Ryan Newton
Proc. ACM Program. Lang.1