Demo Data from EDBT 2026 / reviewers in the wild / expert
Ryan Culpepper
dblp:66/1454
· DBLP profile ↗
11ranked-venue papers
7as first author
1since 2021 · last 2022
0000-0002-3307-0326ORCID · corroborated
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 11 · 7 first-author · 1 since 2021
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
1 paper |
Programming languages and type systems · 100% |
Topics — the 3 heaviest of 3, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems › language design
language extension |
0.1 | 1 | 2011 | Languages as libraries · PLDI 2011 |
Programming languages and type systems › metaprogramming
macros |
0.1 | 1 | 2011 | Languages as libraries · PLDI 2011 |
Programming languages and type systems
domain-specific languages |
0.0 | 1 | 2011 | Languages as libraries · PLDI 2011 |
Methods — techniques the papers use, named apart from their topics
macro expansion · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2022 | Composable Sequence Macros for Fast IterationabstractRacket provides for loops with macro-extensible sequence expressions. Sequence macros offer better performance than dynamic sequence implementations, but they are complicated to define and Racket offers little support for creating new sequence macros by combining existing ones. In this paper, we develop such support in the form of sequence combinator macros and a general comprehension form. These utilities are implemented by manipulating compile-time records that contain binders and expressions; the binding relationships between the components are not trivial. We discuss how to diagnose and solve type and scoping problems in our implementation. Anna Bolotina, Ryan Culpepper |
GPCE | 2 |
| 2018 | Contextual equivalence for a probabilistic language with continuous random variables and recursionabstractWe present a complete reasoning principle for contextual equivalence in an untyped probabilistic language. The language includes continuous (real-valued) random variables, conditionals, and scoring. It also includes recursion, since the standard call-by-value fixpoint combinator is expressible. We demonstrate the usability of our characterization by proving several equivalence schemas, including familiar facts from lambda calculus as well as results specific to probabilistic programming. In particular, we use it to prove that reordering the random draws in a probabilistic program preserves contextual equivalence. This allows us to show, for example, that (let x = e 1 in let y = e 2 in e 0 ) = ctx (let y = e 2 in let x = e 1 in e 0 ) (provided x does not occur free in e 2 and y does not occur free in e 1 ) despite the fact that e 1 and e 2 may have sampling and scoring effects. Mitchell Wand, Ryan Culpepper, Theophilos Giannakopoulos, Andrew Cobb |
Proc. ACM Program. Lang. | 2 |
| 2017 | Contextual Equivalence for Probabilistic Programs with Continuous Random Variables and Scoring
Ryan Culpepper, Andrew Cobb |
ESOP | 1 |
| 2012 | Fortifying macrosabstractAbstract Existing macro systems force programmers to make a choice between clarity of specification and robustness. If they choose clarity, they must forgo validating significant parts of the specification and thus produce low-quality language extensions. If they choose robustness, they must write in a style that mingles the implementation with the specification and therefore obscures the latter. This paper introduces a new language for writing macros. With the new macro system, programmers naturally write robust language extensions using easy-to-understand specifications. The system translates these specifications into validators that detect misuses—including violations of context-sensitive constraints—and automatically synthesize appropriate feedback, eliminating the need for ad hoc validation code. Ryan Culpepper |
J. Funct. Program. | 1 |
| 2012 | Macros that Work Together - Compile-time bindings, partial expansion, and definition contextsabstractAbstract Racket is a large language that is built mostly within itself. Unlike the usual approach taken by non-Lisp languages, the self-hosting of Racket is not a matter of bootstrapping one implementation through a previous implementation, but instead a matter of building a tower of languages and libraries via macros. The upper layers of the tower include a class system, a component system, pedagogic variants of Scheme, a statically typed dialect of Scheme, and more. The demands of this language-construction effort require a macro system that is substantially more expressive than previous macro systems. In particular, while conventional Scheme macro systems handle stand-alone syntactic forms adequately, they provide weak support for macros that share information or macros that use existing syntactic forms in new contexts. This paper describes and models features of the Racket macro system, including support for general compile-time bindings, sub-form expansion and analysis, and environment management. The presentation assumes a basic familiarity with Lisp-style macros, and it takes for granted the need for macros that respect lexical scope. The model, however, strips away the pattern and template system that is normally associated with Scheme macros, isolating a core that is simpler, can support pattern and template forms themselves as macros, and generalizes naturally to Racket's other extensions. Matthew Flatt, Ryan Culpepper, David Darais, Robert Bruce Findler |
J. Funct. Program. | 2 |
| 2011 | Languages as librariesabstractProgramming language design benefits from constructs for extending the syntax and semantics of a host language. While C's string-based macros empower programmers to introduce notational shorthands, the parser-level macros of Lisp encourage experimentation with domain-specific languages. The Scheme programming language improves on Lisp with macros that respect lexical scope. Sam Tobin-Hochstadt, Vincent St-Amour, Ryan Culpepper, Matthew Flatt, Matthias Felleisen |
PLDI | 3 |
| 2010 | Fortifying macrosabstractExisting macro systems force programmers to make a choice between clarity of specification and robustness. If they choose clarity, they must forgo validating significant parts of the specification and thus produce low-quality language extensions. If they choose robustness, they must write in a style that mingles the implementation with the specification and therefore obscures the latter. Ryan Culpepper, Matthias Felleisen |
ICFP | 1 |
| 2010 | Debugging hygienic macros
Ryan Culpepper, Matthias Felleisen |
Sci. Comput. Program. | 1 |
| 2007 | Debugging macrosabstractOver the past two decades, Scheme macros have evolved into a powerful API for the compiler front-end. Like Lisp macros, their predecessors, Scheme macros expand source programs into a small core language; unlike Lisp systems, Scheme macro expanders preserve many desirable properties, including lexical scope and source location. Using such macros, Scheme programmers now routinely develop the ultimate abstraction: embedded domain-specific programming languages. Ryan Culpepper, Matthias Felleisen |
GPCE | 1 |
| 2005 | Syntactic Abstraction in Component Interfaces
Ryan Culpepper, Scott Owens, Matthew Flatt |
GPCE | 1 |
| 2004 | Taming Macros
Ryan Culpepper, Matthias Felleisen |
GPCE | 1 |