Stephen Chang 0001

dblp:37/5018-1 · DBLP profile ↗
← Back
9ranked-venue papers
6as first author
2since 2021 · last 2026
0000-0002-4760-0658ORCID · verified

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

Software engineering, systems software and programming languages · 9 · 6 first-author · 2 since 2021
YearPublicationVenuePosition
2026 Mixing visual and textual code
Leif Andersen, Michael Ballantyne, Cameron Moy, Matthias Felleisen, Stephen Chang 0001
J. Funct. Program.5
2024 Type Tailoring
Ashton Wiersdorf, Stephen Chang 0001, Matthias Felleisen, Ben Greenman
ECOOP2
2020 Dependent type systems as macros
abstract
We present Turnstile+, a high-level, macros-based metaDSL for building dependently typed languages. With it, programmers may rapidly prototype and iterate on the design of new dependently typed features and extensions. Or they may create entirely new DSLs whose dependent type ``power'' is tailored to a specific domain. Our framework's support of language-oriented programming also makes it suitable for experimenting with systems of interacting components, e.g., a proof assistant and its companion DSLs. This paper explains the implementation details of Turnstile+, as well as how it may be used to create a wide-variety of dependently typed languages, from a lightweight one with indexed types, to a full spectrum proof assistant, complete with a tactic system and extensions for features like sized types and SMT interaction.
Stephen Chang 0001, Michael Ballantyne, Milo Turner, William J. Bowman
Proc. ACM Program. Lang.1
2018 Symbolic types for lenient symbolic execution
abstract
We present lambda_sym, a typed λ-calculus for lenient symbolic execution , where some language constructs do not recognize symbolic values. Its type system, however, ensures safe behavior of all symbolic values in a program. Our calculus extends a base occurrence typing system with symbolic types and mutable state, making it a suitable model for both functional and imperative symbolically executed languages. Naively allowing mutation in this mixed setting introduces soundness issues, however, so we further add concreteness polymorphism , which restores soundness without rejecting too many valid programs. To show that our calculus is a useful model for a real language, we implemented Typed Rosette, a typed extension of the solver-aided Rosette language. We evaluate Typed Rosette by porting a large code base, demonstrating that our type system accommodates a wide variety of symbolically executed programs.
Stephen Chang 0001, Alex Knauth, Emina Torlak
Proc. ACM Program. Lang.1
2017 Type systems as macros
abstract
We present Turnstile, a metalanguage for creating typed embedded languages. To implement the type system, programmers write type checking rules resembling traditional judgment syntax. To implement the semantics, they incorporate elaborations into these rules. Turnstile critically depends on the idea of linguistic reuse. It exploits a macro system in a novel way to simultaneously type check and rewrite a surface program into a target language. Reusing a macro system also yields modular implementations whose rules may be mixed and matched to create other languages. Combined with typical compiler and runtime reuse, Turnstile produces performant typed embedded languages with little effort.
Stephen Chang 0001, Alex Knauth, Ben Greenman
POPL1
2017 Super 8 languages for making movies (functional pearl)
abstract
The Racket doctrine tells developers to narrow the gap between the terminology of a problem domain and general programming constructs by creating languages instead of just plain programs. This pearl illustrates this point with the creation of a relatively simple domain-specific language for editing videos. To produce the video proceedings of a conference, for example, video professionals traditionally use "non-linear" GUI editors to manually edit each talk, despite the repetitive nature of the process. As it turns out, video editing naturally splits the work into a declarative phase and an imperative rendering phase at the end. Hence it is natural to create a functional-declarative language for the first phase, which reduces a lot of manual labor. This user-facing DSL utilizes a second, internal DSL to implement the second phase, which is an interface to a general, low-level C library. Finally, we inject type checking into our language via another DSL that supports programming in the language of type formalisms. In short, the development of the video editing language cleanly demonstrates how the Racket doctrine naturally leads to the creation of language hierarchies, analogous to the hierarchies of modules found in conventional functional languages.
Leif Andersen, Stephen Chang 0001, Matthias Felleisen
Proc. ACM Program. Lang.2
2014 Profiling for laziness
abstract
While many programmers appreciate the benefits of lazy programming at an abstract level, determining which parts of a concrete program to evaluate lazily poses a significant challenge for most of them. Over the past thirty years, experts have published numerous papers on the problem, but developing this level of expertise requires a significant amount of experience.
Stephen Chang 0001, Matthias Felleisen
POPL1
2013 Laziness by Need
Stephen Chang 0001
ESOP1
2012 The Call-by-Need Lambda Calculus, Revisited
Stephen Chang 0001, Matthias Felleisen
ESOP1