Justin Pombrio

dblp:120/5116 · DBLP profile ↗
← Back
7ranked-venue papers
4as first author
1since 2021 · last 2023
0009-0004-0244-6193ORCID · corroborated

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

Software engineering, systems software and programming languages · 7 · 4 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
3 papers
Compilers and program optimization · 60% Programming languages and type systems · 40%

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

TopicWeightPapersLastEvidence papers
Compilers and program optimization
pretty printing
0.712023
A Pretty Expressive Printer · Proc. ACM Program. Lang. 2023
Programming languages and type systems
type systems
0.312018
Inferring type rules for syntactic sugar · PLDI 2018
Programming languages and type systems › language design
syntactic sugar
0.322018
Resugaring: lifting evaluation sequences through syntactic sugar · PLDI 2014
Inferring type rules for syntactic sugar · PLDI 2018
Compilers and program optimization
program transformation
0.112014
Resugaring: lifting evaluation sequences through syntactic sugar · PLDI 2014

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

lean theorem prover · 0.7cost factory · 0.7type rule reconstruction · 0.3evaluation sequence lifting · 0.2
YearPublicationVenuePosition
2023 A Pretty Expressive Printer
abstract
Pretty printers make trade-offs between the expressiveness of their pretty printing language, the optimality objective that they minimize when choosing between different ways to lay out a document, and the performance of their algorithm. This paper presents a new pretty printer, Π e , that is strictly more expressive than all pretty printers in the literature and provably minimizes an optimality objective. Furthermore, the time complexity of Π e is better than many existing pretty printers. When choosing among different ways to lay out a document, Π e consults a user-supplied cost factory , which determines the optimality objective, giving Π e a unique degree of flexibility. We use the Lean theorem prover to verify the correctness (validity and optimality) of Π e , and implement Π e concretely as a pretty printer that we call PrettyExpressive. To evaluate our pretty printer against others, we develop a formal framework for reasoning about the expressiveness of pretty printing languages, and survey pretty printers in the literature, comparing their expressiveness, optimality, worst-case time complexity, and practical running time. Our evaluation shows that PrettyExpressive is efficient and effective at producing optimal layouts. PrettyExpressive has also seen real-world adoption: it serves as a foundation of a code formatter for Racket.
Sorawee Porncharoenwase, Justin Pombrio, Emina Torlak
Proc. ACM Program. Lang.2
2018 The behavior of gradual types: a user study
abstract
There are several different gradual typing semantics, reflecting different trade-offs between performance and type soundness guarantees. Notably absent, however, are any data on which of these semantics developers actually prefer.
Preston Tunnell Wilson, Ben Greenman, Justin Pombrio, Shriram Krishnamurthi
DLS3
2018 Inferring type rules for syntactic sugar
abstract
Type systems and syntactic sugar are both valuable to programmers, but sometimes at odds. While sugar is a valuable mechanism for implementing realistic languages, the expansion process obscures program source structure. As a result, type errors can reference terms the programmers did not write (and even constructs they do not know), baffling them. The language developer must also manually construct type rules for the sugars, to give a typed account of the surface language. We address these problems by presenting a process for automatically reconstructing type rules for the surface language using rules for the core. We have implemented this theory, and show several interesting case studies.
Justin Pombrio, Shriram Krishnamurthi
PLDI1
2017 Inferring scope through syntactic sugar
abstract
Many languages use syntactic sugar to define parts of their surface language in terms of a smaller core. Thus some properties of the surface language, like its scoping rules , are not immediately evident. Nevertheless, IDEs, refactorers, and other tools that traffic in source code depend on these rules to present information to users and to soundly perform their operations. In this paper, we show how to lift scoping rules defined on a core language to rules on the surface, a process of scope inference . In the process we introduce a new representation of binding structure---scope as a preorder---and present a theoretical advance: proving that a desugaring system preserves α-equivalence even though scoping rules have been provided only for the core language. We have also implemented the system presented in this paper.
Justin Pombrio, Shriram Krishnamurthi, Mitchell Wand
Proc. ACM Program. Lang.1
2015 Hygienic resugaring of compositional desugaring
abstract
Syntactic sugar is widely used in language implementation. Its benefits are, however, offset by the comprehension problems it presents to programmers once their program has been transformed. In particular, after a transformed program has begun to evaluate (or otherwise be altered by a black-box process), it can become unrecognizable. We present a new approach to _resugaring_ programs, which is the act of reflecting evaluation steps in the core language in terms of the syntactic sugar that the programmer used. Relative to prior work, our approach has two important advances: it handles hygiene, and it allows almost arbitrary rewriting rules (as opposed to restricted patterns). We do this in the context of a DAG representation of programs, rather than more traditional trees.
Justin Pombrio, Shriram Krishnamurthi
ICFP1
2014 Resugaring: lifting evaluation sequences through syntactic sugar
abstract
Syntactic sugar is pervasive in language technology. It is used to shrink the size of a core language; to define domain-specific languages; and even to let programmers extend their language. Unfortunately, syntactic sugar is eliminated by transformation, so the resulting programs become unfamiliar to authors. Thus, it comes at a price: it obscures the relationship between the user's source program and the program being evaluated.
Justin Pombrio, Shriram Krishnamurthi
PLDI1
2012 A tested semantics for getters, setters, and eval in JavaScript
abstract
We present S5, a semantics for the strict mode of the ECMAScript 5.1 (JavaScript) programming language. S5 shrinks the large source language into a manageable core through an implemented transformation. The resulting specification has been tested against real-world conformance suites for the language. This paper focuses on two aspects of S5: accessors (getters and setters) and eval. Since these features are complex and subtle in JavaScript, they warrant special study. Variations on both features are found in several other programming languages, so their study is likely to have broad applicability.
Joe Gibbs Politz, Matthew J. Carroll, Benjamin S. Lerner, Justin Pombrio, Shriram Krishnamurthi
DLS4