Demo Data from EDBT 2026 / reviewers in the wild / expert
R. Kent Dybvig
dblp:d/RKentDybvig
· DBLP profile ↗
22ranked-venue papers
4as first author
0since 2021 · last 2020
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 21 · 4 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
11 papers |
Programming languages and type systems · 58% Runtime systems and virtual machines · 20% Compilers and program optimization · 16% |
Topics — the 27 heaviest of 31, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems
control flow |
0.4 | 1 | 2020 | Compiler and runtime support for continuation marks · PLDI 2020 |
Programming languages and type systems › control operators
delimited continuations |
0.4 | 1 | 2020 | Compiler and runtime support for continuation marks · PLDI 2020 |
Programming languages and type systems › language design
language extension |
0.2 | 1 | 2015 | Profile-guided meta-programming · PLDI 2015 |
Programming languages and type systems
metaprogramming |
0.2 | 1 | 2015 | Profile-guided meta-programming · PLDI 2015 |
Compilers and program optimization › dynamic optimization
profile-guided optimization |
0.2 | 1 | 2015 | Profile-guided meta-programming · PLDI 2015 |
Program analysis
control flow analysis |
0.1 | 1 | 2011 | Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Programming languages and type systems
type inference |
0.1 | 1 | 2011 | Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation |
0.0 | 1 | 2011 | Flow-sensitive type recovery in linear-log time · OOPSLA 2011 |
Programming languages and type systems › metaprogramming
macro systems |
0.0 | 1 | 1999 | Extending the Scope of Syntactic Abstraction · POPL 1999 |
Programming languages and type systems
module systems |
0.0 | 1 | 1999 | Extending the Scope of Syntactic Abstraction · POPL 1999 |
Programming languages and type systems › control operators
continuations |
0.0 | 2 | 1996 | Representing Control in the Presence of One-Shot Continuations · PLDI 1996 Continuations and Concurrency · PPoPP 1990 |
Program analysis
flow analysis |
0.0 | 1 | 1998 | A Practical and Flexible Flow Analysis for Higher-Order Languages · ACM Trans. Program. Lang. Syst. 1998 |
Program analysis › flow analysis
higher-order flow analysis |
0.0 | 1 | 1998 | A Practical and Flexible Flow Analysis for Higher-Order Languages · ACM Trans. Program. Lang. Syst. 1998 |
Programming languages and type systems
control operators |
0.0 | 1 | 1996 | Representing Control in the Presence of One-Shot Continuations · PLDI 1996 |
Compilers and program optimization
floating-point arithmetic |
0.0 | 1 | 1996 | Printing Floating-Point Numbers Quickly and Accurately · PLDI 1996 |
Compilers and program optimization › register allocation
linear scan register allocation |
0.0 | 1 | 1995 | Register Allocation Using Lazy Saves, Eager Restores, and Greedy Shuffling · PLDI 1995 |
Compilers and program optimization
register allocation |
0.0 | 1 | 1995 | Register Allocation Using Lazy Saves, Eager Restores, and Greedy Shuffling · PLDI 1995 |
Runtime systems and virtual machines › garbage collection
finalization |
0.0 | 1 | 1993 | Guardians in a Generation-Based Garbage Collector · PLDI 1993 |
Runtime systems and virtual machines
garbage collection |
0.0 | 1 | 1993 | Guardians in a Generation-Based Garbage Collector · PLDI 1993 |
Runtime systems and virtual machines › garbage collection
generational garbage collection |
0.0 | 1 | 1993 | Guardians in a Generation-Based Garbage Collector · PLDI 1993 |
Compilers and program optimization › compiler toolchain
separate compilation |
0.0 | 1 | 1999 | Extending the Scope of Syntactic Abstraction · POPL 1999 |
Programming languages and type systems
control structures |
0.0 | 1 | 1990 | Continuations and Concurrency · PPoPP 1990 |
Programming languages and type systems › control operators
first-class continuations |
0.0 | 1 | 1990 | Representing Control in the Presence of First-Class Continuations · PLDI 1990 |
Programming languages and type systems
higher-order languages |
0.0 | 1 | 1998 | A Practical and Flexible Flow Analysis for Higher-Order Languages · ACM Trans. Program. Lang. Syst. 1998 |
Programming languages and type systems › control flow
procedure calls |
0.0 | 1 | 1995 | Register Allocation Using Lazy Saves, Eager Restores, and Greedy Shuffling · PLDI 1995 |
Programming languages and type systems
language semantics |
0.0 | 1 | 1990 | Continuations and Concurrency · PPoPP 1990 |
Runtime systems and virtual machines › runtime memory management
stack allocation |
0.0 | 1 | 1990 | Representing Control in the Presence of First-Class Continuations · PLDI 1990 |
Methods — techniques the papers use, named apart from their topics
tail calls · 0.4dynamic binding · 0.4profiling · 0.2sub-0CFA · 0.1linear-log-time algorithm · 0.1projection operator · 0.0polyvariance operators · 0.0abstract interpretation · 0.00CFA · 0.0stack-based implementation · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2020 | Compiler and runtime support for continuation marksabstractContinuation marks enable dynamic binding and context inspection in a language with proper handling of tail calls and first-class, multi-prompt, delimited continuations. The simplest and most direct use of continuation marks is to implement dynamically scoped variables, such as the current output stream or the current exception handler. Other uses include stack inspection for debugging or security checks, serialization of an in-progress computation, and run-time elision of redundant checks. By exposing continuation marks to users of a programming language, more kinds of language extensions can be implemented as libraries without further changes to the compiler. At the same time, the compiler and runtime system must provide an efficient implementation of continuation marks to ensure that library-implemented language extensions are as effective as changing the compiler. Our implementation of continuation marks for Chez Scheme (in support of Racket) makes dynamic binding and lookup constant-time and fast, preserves the performance of Chez Scheme's first-class continuations, and imposes negligible overhead on program fragments that do not use first-class continuations or marks. Matthew Flatt, R. Kent Dybvig |
PLDI | 2 |
| 2019 | Rebuilding racket on chez scheme (experience report)abstractWe rebuilt Racket on Chez Scheme, and it works well—as long as we're allowed a few patches to Chez Scheme. DrRacket runs, the Racket distribution can build itself, and nearly all of the core Racket test suite passes. Maintainability and performance of the resulting implementation are good, although some work remains to improve end-to-end performance. The least predictable part of our effort was how big the differences between Racket and Chez Scheme would turn out to be and how we would manage those differences. We expect Racket on Chez Scheme to become the main Racket implementation, and we encourage other language implementers to consider Chez Scheme as a target virtual machine. Matthew Flatt, Caner Derici, R. Kent Dybvig, Andrew W. Keep, Gustavo E. Massaccesi, Sarah Spall, Sam Tobin-Hochstadt, Jon Zeppieri |
Proc. ACM Program. Lang. | 3 |
| 2015 | Profile-guided meta-programmingabstractContemporary compiler systems such as GCC, .NET, and LLVM incorporate profile-guided optimizations (PGOs) on low-level intermediate code and basic blocks, with impressive results over purely static heuristics. Recent work shows that profile information is also useful for performing source-to-source optimizations via meta-programming. For example, using profiling information to inform decisions about data structures and algorithms can potentially lead to asymptotic improvements in performance. We present a design for profile-guided meta-programming in a general-purpose meta-programming system. Our design is parametric over the particular profiler and meta-programming system. We implement this design in two different meta-programming systems---the syntactic extensions systems of Chez Scheme and Racket---and provide several profile-guided meta-programs as usability case studies. William J. Bowman, Swaha Miller, Vincent St-Amour, R. Kent Dybvig |
PLDI | 4 |
| 2014 | A run-time representation of scheme record typesabstractAbstract The Revised 6 Report on the Algorithmic Language Scheme added a mechanism to the Scheme programming language for creating new record types procedurally. While many programming languages support user defined, structured data types, these are usually handled syntactically, so that the compiler can make choices at compile time about the memory layout of these data types. The procedural record types in Scheme, however, can be constructed at run time, making the efficient run-time representation of record types important to ensure good run-time performance. The run-time representation used in our implementation provides an extended model for record types allowing record types to represent foreign scalar data types, e.g., machine word integers, and allows the base record type to be extended to create non-R6RS record-type systems. This article describes our run-time representation for record types, how the garbage collector handles foreign scalar data types, and includes extended record type systems both for an object-oriented programming model and a representation of foreign structured data types. Andrew W. Keep, R. Kent Dybvig |
J. Funct. Program. | 2 |
| 2013 | A nanopass framework for commercial compiler developmentabstractContemporary compilers must typically handle sophisticated high-level source languages, generate efficient code for multiple hardware architectures and operating systems, and support source-level debugging, profiling, and other program development tools. As a result, compilers tend to be among the most complex of software systems. Nanopass frameworks are designed to help manage this complexity. A nanopass compiler is comprised of many single-task passes with formally defined intermediate languages. The perceived downside of a nanopass compiler is that the extra passes will lead to substantially longer compilation times. To determine whether this is the case, we have created a plug replacement for the commercial Chez Scheme compiler, implemented using an updated nanopass framework, and we have compared the speed of the new compiler and the code it generates against the original compiler for a large set of benchmark programs. This paper describes the updated nanopass framework, the new compiler, and the results of our experiments. The compiler produces faster code than the original, averaging 15-27% depending on architecture and optimization level, due to a more sophisticated but slower register allocator and improvements to several optimizations. Compilation times average well within a factor of two of the original compiler, despite the slower register allocator and the replacement of five passes of the original 10 with over 50 nanopasses. Andrew W. Keep, R. Kent Dybvig |
ICFP | 2 |
| 2011 | Flow-sensitive type recovery in linear-log timeabstractThe flexibility of dynamically typed languages such as JavaScript, Python, Ruby, and Scheme comes at the cost of run-time type checks. Some of these checks can be eliminated via control-flow analysis. However, traditional control-flow analysis (CFA) is not ideal for this task as it ignores flow-sensitive information that can be gained from dynamic type predicates, such as JavaScript's 'instanceof' and Scheme's 'pair?', and from type-restricted operators, such as Scheme's 'car'. Yet, adding flow-sensitivity to a traditional CFA worsens the already significant compile-time cost of traditional CFA. This makes it unsuitable for use in just-in-time compilers. In response, we have developed a fast, flow-sensitive type-recovery algorithm based on the linear-time, flow-insensitive sub-0CFA. The algorithm has been implemented as an experimental optimization for the commercial Chez Scheme compiler, where it has proven to be effective, justifying the elimination of about 60% of run-time type checks in a large set of benchmarks. The algorithm processes on average over 100,000 lines of code per second and scales well asymptotically, running in only O(n log n) time. We achieve this compile-time performance and scalability through a novel combination of data structures and algorithms. Michael D. Adams 0001, Andrew W. Keep, Jan Midtgaard, Matthew Might, Arun Chauhan 0001, R. Kent Dybvig |
OOPSLA | 6 |
| 2008 | Efficient nondestructive equality checking for trees and graphsabstractThe Revised6 Report on Scheme requires its generic equivalence predicate, equal?, to terminate even on cyclic inputs. While the terminating equal? can be implemented via a DFA-equivalence or union-find algorithm, these algorithms usually require an additional pointer to be stored in each object, are not suitable for multithreaded code due to their destructive nature, and may be unacceptably slow for the small acyclic values that are the most likely inputs to the predicate. Michael D. Adams 0001, R. Kent Dybvig |
ICFP | 2 |
| 2007 | Implicit phasing for R6RS librariesabstractThe forthcoming Revised6 Report on Scheme differs from previous reports in that the language it describes is structured as a set of libraries. It also provides a syntax for defining new portable libraries. The same library may export both procedure and hygienic macro definitions, which allows procedures and syntax to be freely intermixed, hidden, and exported. Abdulaziz Ghuloum, R. Kent Dybvig |
ICFP | 2 |
| 2007 | A monadic framework for delimited continuationsabstractAbstract Delimited continuations are more expressive than traditional abortive continuations and they apparently require a framework beyond traditional continuation-passing style (CPS). We show that this is not the case: standard CPS is sufficient to explain the common control operators for delimited continuations. We demonstrate this fact and present an implementation as a Scheme library. We then investigate a typed account of delimited continuations that makes explicit where control effects can occur. This results in a monadic framework for typed and encapsulated delimited continuations, which we design and implement as a Haskell library. R. Kent Dybvig, Simon L. Peyton Jones, Amr Sabry |
J. Funct. Program. | 1 |
| 2006 | The development of Chez SchemeabstractChez Scheme is now over 20 years old, the first version having been released in 1985. This paper takes a brief look back on the history of Chez Scheme's development to explore how and why it became the system it is today. R. Kent Dybvig |
ICFP | 1 |
| 2005 | Educational Pearl: A Nanopass framework for compiler educationabstractA compiler structured as a small number of monolithic passes is difficult to understand and difficult to maintain. The steep learning curve is daunting, and even experienced developers find that modifying existing passes is difficult and often introduces subtle and tenacious bugs. These problems are especially frustrating when the developer is a student in a compiler class. An attractive alternative is to structure a compiler as a collection of many fine-grained passes, each of which performs a single task. This structure aligns the implementation of a compiler with its logical organization, simplifying development, testing, and debugging. This paper describes the methodology and tools comprising a framework for constructing such compilers. Dipanwita Sarkar, Oscar Waddell, R. Kent Dybvig |
J. Funct. Program. | 3 |
| 2004 | A nanopass infrastructure for compiler educationabstractCompilers structured as a small number of monolithic passes are difficult to understand and difficult to maintain. Adding new optimizations often requires major restructuring of existing passes that cannot be understood in isolation. The steep learning curve is daunting, and even experienced developers find it hard to modify existing passes without introducing subtle and tenacious bugs. These problems are especially frustrating when the developer is a student in a compiler class.An attractive alternative is to structure a compiler as a collection of many small passes, each of which performs a single task. This "micropass" structure aligns the actual implementation of a compiler with its logical organization, simplifying development, testing, and debugging. Unfortunately, writing many small passes duplicates code for traversing and rewriting abstract syntax trees and can obscure the meaningful transformations performed by individual passes.To address these problems, we have developed a methodology and associated tools that simplify the task of building compilers composed of many fine-grained passes. We describe these compilers as "nanopass" compilers to indicate both the intended granularity of the passes and the amount of source code required to implement each pass. This paper describes the methodology and tools comprising the nanopass framework. Dipanwita Sarkar, Oscar Waddell, R. Kent Dybvig |
ICFP | 3 |
| 1999 | Extending the Scope of Syntactic AbstractionabstractThe benefits of module systems and lexically scoped syntactic abstraction (macro) facilities are well-established in the literature. This paper presents a system that seamlessly integrates modules and lexically scoped macros. The system is fully static, permits mutually recursive modules, and supports separate compilation. We show that more dynamic module facilities are easily implemented at the source level in the extended language supported by the system. Oscar Waddell, R. Kent Dybvig |
POPL | 2 |
| 1998 | A Practical and Flexible Flow Analysis for Higher-Order LanguagesabstractA flow analysis collects data-flow and control-flow information about programs. A compiler can use this information to enable optimizations. The analysis described in this article unifies and extends previous work on flow analysis for higher-order languages supporting assignment and control operators. The analysis is abstract interpretation based and is parameterized over two polyvariance operators and a projection operator. These operators are used to regulate the speed and accuracy of the analysis. An implementation of the analysis is incorporated into and used in a production Scheme compiler. The analysis can process any legal Scheme program without modification. Others have demonstrated that a 0CFA analysis can enables the optimizations, but a 0CFA analysis is O ( n ) 3 ). An O ( n ) instantiation of our analysis successfully enables the optimization of closure representations and procedure calls. Experiments with the cheaper instantiation show that it is as effective as 0CFA for these optimizations. J. Michael Ashley, R. Kent Dybvig |
ACM Trans. Program. Lang. Syst. | 2 |
| 1997 | Fast and Effective Procedure Inlining
Oscar Waddell, R. Kent Dybvig |
SAS | 2 |
| 1996 | Representing Control in the Presence of One-Shot ContinuationsabstractTraditional first-class continuation mechanisms allow a captured continuation to be invoked multiple times. Many continuations, however, are invoked only once. This paper introduces one-shot continuations, shows how they interact with traditional multi-shot continuations, and describes a stack-based implementation of control that handles both one-shot and multi-shot continuations. The implementation eliminates the copying overhead for one-shot continuations that is inherent in multi-shot continuations. 1 Introduction Scheme [5] and some implementations of ML [17] provide continuations as first-class data objects. Continuations can be used to implement, at the source level, a number of interesting control features, such as loops, nonlocal exits, nonblind backtracking [22], nondeterministic computations [10, 14], and coroutines [7]. Source-level implementations of thread systems [9, 15, 21], especially in the area of graphical user interfaces (GUIs) [12, 13, 20, 23], are an important ... Carl Bruggeman, Oscar Waddell, R. Kent Dybvig |
PLDI | 3 |
| 1996 | Printing Floating-Point Numbers Quickly and AccuratelyabstractThis paper presents a fast and accurate algorithm for printing floating-point numbers in both free- and fixed-format modes. In free-format mode, the algorithm generates the shortest, correctly rounded output string that converts to the same number when read back in, accommodating whatever rounding mode the reader uses. In fixed-format mode, the algorithm generates a correctly rounded output string using special # marks to denote insignificant trailing digits. For both modes, the algorithm employs a fast estimator to scale floating-point numbers efficiently. Robert G. Burger, R. Kent Dybvig |
PLDI | 2 |
| 1995 | Register Allocation Using Lazy Saves, Eager Restores, and Greedy ShufflingabstractThis paper presents a fast and effective linear intraprocedural register allocation strategy that optimizes register usage across procedure calls. It capitalizes on our observation that while procedures that do not contain calls (syntactic leaf routines) account for under one third of all procedure activations, procedures that actually make no calls (effective leaf routines) account for over two thirds of all procedure activations. Well-suited for both caller-and calle-save registers, our strategy employs a “lazy” save mechanism that avoids saves for all effective leaf routines, an “eager” restore mechanism that reduces the effect of memory latency, and a “greedy” register shuffling algorithm that does a remarkbly good job of minimizing the need for temporaries in setting up procedure calls. Robert G. Burger, Oscar Waddell, R. Kent Dybvig |
PLDI | 3 |
| 1993 | Guardians in a Generation-Based Garbage CollectorabstractThis paper describes a new language feature that allows dynamically allocated objects to be saved from deallocation by an automatic storage management system so that clean-up or other actions can be performed using the data stored within the objects. The program has full control over the timing of clean-up actions, which eliminates several potential problems and often eliminates the need for critical sections in code that interacts with clean-up actions. Our implementation is “generation-friendly” in the sense that the additional overhead within a generation-based garbage collector is proportional to the work already done there, and the overhead within the mutator is proportional to the number of clean-up actions actually performed. R. Kent Dybvig, Carl Bruggeman, David Eby |
PLDI | 1 |
| 1990 | Representing Control in the Presence of First-Class ContinuationsabstractLanguages such as Scheme and Smalltalk that provide continuations as first-class data objects present a challenge to efficient implementation. Allocating activation records in a heap has proven unsatisfactory because of increased frame linkage costs, increased garbage collection overhead, and decreased locality of reference. However, simply allocating activation records on a stack and copying them when a continuation is created results in unbounded copying overhead. This paper describes a new approach based on stack allocation that does not require the stack to be copied when a continuation is created and that allows us to place a small upper bound on the amount copied when a continuation is reinstated. This new approach is faster than the naive stack allocation approach, and it does not suffer from the problems associated with unbounded copying. For continuation-intensive programs, our approach is at worst a constant factor slower than the heap allocation approach, and for typical programs, it is significantly faster. An important additional benefit is that recovery from stack overflow is handled gracefully and efficiently. Robert Hieb, R. Kent Dybvig, Carl Bruggeman |
PLDI | 2 |
| 1990 | Continuations and ConcurrencyabstractContinuations have proven to be useful for implementing a variety of control structures, including exception handling facilities and breadth-first searching algorithms. However, traditional continuations are not useful in the presence of concurrency, because the notion of the rest of the computation represented by a continuation does not in general make sense. This paper presents a new type of continuation, called a process continuation, that may be used to control tree-structured concurrency. Just as a traditional continuation represents the rest of a computation from a given point in the computation, a process continuation represents the rest of a subcomputation, or process, from a given point in the subcomputation. Process continuations allow nonlocal exits to arbitrary points in the process tree and allow the capture of a subtree of a computation as a composable continuation for later use. Even in the absence of multiple processes, the precise control achievable with process continuations makes them more useful than traditional continuations. Robert Hieb, R. Kent Dybvig |
PPoPP | 2 |
| 1989 | Engines From Continuations
R. Kent Dybvig, Robert Hieb |
Comput. Lang. | 1 |