Vincent St-Amour

dblp:37/9698 · DBLP profile ↗
← Back
13ranked-venue papers
6as first author
0since 2021 · last 2019
—ORCID · none

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

Software engineering, systems software and programming languages · 12 · 6 first-authorSystems, 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
7 papers
Programming languages and type systems · 44% Compilers and program optimization · 28% Program analysis · 9%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Parallel and multicore computing · 100%

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

TopicWeightPapersLastEvidence papers
Programming languages and type systems › language design
language features
0.412019
Feature-Specific Profiling · ACM Trans. Program. Lang. Syst. 2019
Program analysis › dynamic analysis
profiling
0.412019
Feature-Specific Profiling · ACM Trans. Program. Lang. Syst. 2019
Programming languages and type systems
domain-specific languages
0.422018
POP-PL: A Patient-Oriented Prescription Programming Language · ACM Trans. Program. Lang. Syst. 2018
Languages as libraries · PLDI 2011
Programming languages and type systems › language design
language extension
0.322015
Profile-guided meta-programming · PLDI 2015
Languages as libraries · PLDI 2011
Compilers and program optimization › parallelization
automatic parallelization
0.312018
Unconventional Parallelization of Nondeterministic Applications · ASPLOS 2018
Program verification › contract verification
contract checking
0.312018
Collapsible contracts: fixing a pathology of gradual typing · Proc. ACM Program. Lang. 2018
Programming languages and type systems › type systems
gradual typing
0.312018
Collapsible contracts: fixing a pathology of gradual typing · Proc. ACM Program. Lang. 2018
Compilers and program optimization › parallelization
speculative parallelization
0.312018
Unconventional Parallelization of Nondeterministic Applications · ASPLOS 2018
Parallel and multicore computing
thread-level parallelism
0.312018
Unconventional Parallelization of Nondeterministic Applications · ASPLOS 2018
Programming languages and type systems
metaprogramming
0.212015
Profile-guided meta-programming · PLDI 2015
Compilers and program optimization › dynamic optimization
profile-guided optimization
0.212015
Profile-guided meta-programming · PLDI 2015
Compilers and program optimization › compiler construction
compiler diagnostics
0.112012
Optimization coaching: optimizers learn to communicate with programmers · OOPSLA 2012
Programming languages and type systems › metaprogramming
macros
0.112011
Languages as libraries · PLDI 2011
Debugging and program repair
performance debugging
0.112019
Feature-Specific Profiling · ACM Trans. Program. Lang. Syst. 2019
Medical and health informatics
clinical decision support
0.112018
POP-PL: A Patient-Oriented Prescription Programming Language · ACM Trans. Program. Lang. Syst. 2018
Usability and user experience research › psychology of programming
programming language usability
0.112018
POP-PL: A Patient-Oriented Prescription Programming Language · ACM Trans. Program. Lang. Syst. 2018
Programming languages and type systems › type systems
type soundness
0.112018
Collapsible contracts: fixing a pathology of gradual typing · Proc. ACM Program. Lang. 2018

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

profiling · 1.3user evaluation · 1.0language design · 1.0runtime system · 0.7auto-tuning · 0.7feature-specific profiling · 0.4contract collapsing · 0.3macro expansion · 0.1
YearPublicationVenuePosition
2019 Feature-Specific Profiling
abstract
While high-level languages come with significant readability and maintainability benefits, their performance remains difficult to predict. For example, programmers may unknowingly use language features inappropriately, which cause their programs to run slower than expected. To address this issue, we introduce feature-specific profiling , a technique that reports performance costs in terms of linguistic constructs. Feature-specific profilers help programmers find expensive uses of specific features of their language. We describe the architecture of a profiler that implements our approach, explain prototypes of the profiler for two languages with different characteristics and implementation strategies, and provide empirical evidence for the approach’s general usefulness as a performance debugging tool.
Leif Andersen, Vincent St-Amour, Jan Vitek, Matthias Felleisen
ACM Trans. Program. Lang. Syst.2
2018 Unconventional Parallelization of Nondeterministic Applications
abstract
The demand for thread-level-parallelism (TLP) on commodity processors is endless as it is essential for gaining performance and saving energy. However, TLP in today's programs is limited by dependences that must be satisfied at run time. We have found that for nondeterministic programs, some of these actual dependences can be satisfied with alternative data that can be generated in parallel, thus boosting the program's TLP. Satisfying these dependences with alternative data nonetheless produces final outputs that match those of the original nondeterministic program. To demonstrate the practicality of our technique, we describe the design, implementation, and evaluation of our compilers, autotuner, profiler, and runtime, which are enabled by our proposed C++ programming language extensions. The resulting system boosts the performance of six well-known nondeterministic and multi-threaded benchmarks by 158.2% (geometric mean) on a 28-core Intel-based platform.
Enrico Armenio Deiana, Vincent St-Amour, Peter A. Dinda, Nikos Hardavellas, Simone Campanoni
ASPLOS2
2018 Collapsible contracts: fixing a pathology of gradual typing
abstract
The promise of gradual typing is that programmers should get the best of both worlds: the static guarantees of static types, and the dynamic flexibility of untyped programming. This is an enticing benefit, but one that, in practice, may carry significant costs. Significant enough, in fact, to threaten the very practicality of gradual typing; slowdowns as high as 120x are reported as arising from gradual typing. If one examines these results closely, though, it becomes clear that the costs of gradual typing are not evenly distributed. Indeed, while mixing typed and untyped code almost invariably carries non-trivial costs, many truly deal-breaking slowdowns exhibit pathological performance. Unfortunately, the very presence of these pathological cases---and therefore the possibility of hitting them during development---makes gradual typing a risky proposition in any setting that even remotely cares about performance. This work attacks one source of large overheads in these pathological cases: an accumulation of contract wrappers that perform redundant checks. The work introduces a novel strategy for contract checking---collapsible contracts---which eliminates this redundancy for function and vector contracts and drastically reduces the overhead of contract wrappers. We implemented this checking strategy as part of the Racket contract system, which is used in the Typed Racket gradual typing system. Our experiments show that our strategy successfully brings a class of pathological cases in line with normal cases, while not introducing an undue overhead to any of the other cases. Our results also show that the performance of gradual typing in Racket remains prohibitive for many programs, but that collapsible contracts are one essential ingredient in reducing the cost of gradual typing.
Daniel Feltey, Ben Greenman, Christophe Scholliers, Robert Bruce Findler, Vincent St-Amour
Proc. ACM Program. Lang.5
2018 POP-PL: A Patient-Oriented Prescription Programming Language
abstract
A medical prescription is a set of health care instructions that govern the plan of care for an individual patient, which may include orders for drug therapy, diet, clinical assessment, and laboratory testing. Clinicians have long used algorithmic thinking to describe and implement prescriptions but without the benefit of a formal programming language. Instead, medical algorithms are expressed using a natural language patois, flowcharts, or as structured data in an electronic medical record system. The lack of a prescription programming language inhibits expressiveness; results in prescriptions that are difficult to understand, hard to debug, and awkward to reuse; and increases the risk of fatal medical error. This article reports on the design and evaluation of Patient-Oriented Prescription Programming Language (POP-PL), a domain-specific programming language designed for expressing prescriptions. The language is based around the idea that programs and humans have complementary strengths that, when combined properly, can make for safer, more accurate performance of prescriptions. Use of POP-PL facilitates automation of certain low-level vigilance tasks, freeing up human cognition for abstract thinking, compassion, and human communication. We implemented this language and evaluated its design attempting to write prescriptions in the new language and evaluated its usability by assessing whether clinicians can understand and modify prescriptions written in the language. We found that some medical prescriptions can be expressed in a formal domain-specific programming language, and we determined that medical professionals can understand and correctly modify programs written in POP-PL. We also discuss opportunities for refining and further developing POP-PL.
Spencer P. Florence, Burke Fetscher, Matthew Flatt, William H. Temps, Vincent St-Amour, Tina Kiguradze, Dennis P. West, Charlotte Niznik, Paul R. Yarnold, Robert Bruce Findler, Steven M. Belknap
ACM Trans. Program. Lang. Syst.5
2017 POSTER: The Liberation Day of Nondeterministic Programs
abstract
The demand for thread-level parallelism (TLP) is endless, especially on commodity processors, as TLP is essential for gaining performance. However, the TLP of today's programs is limited by dependences that must be satisfied at run time. We have found that for nondeterministic programs, some of these actual dependences can be satisfied with alternative data that can be generated in parallel, therefore boosting the program's TLP. We show how these dependences (which we call "state dependences" because they are related to the program's state) can be exploited using algorithm-specific knowledge. To demonstrate the practicality of our technique, we implemented a system called April25th that incorporates the concept of "state dependences". This system boosts the performance of five nondeterministic, multi-threaded PARSEC benchmarks by 100.5%.
Enrico Armenio Deiana, Vincent St-Amour, Peter A. Dinda, Nikos Hardavellas, Simone Campanoni
PACT2
2017 Herbarium Racketensis: a stroll through the woods (functional pearl)
abstract
Domain-specific languages are the ultimate abstraction, dixit Paul Hudak. But what abstraction should we use to build such ultimate abstractions? What is sauce for the goose is sauce for the gander: a language, of course! Racket is the ultimate abstraction-abstraction, a platform for quickly and easily building new ultimate abstractions. This pearl demonstrates Racket's power by taking a leisurely walk through the implementation of a DSL for Lindenmayer systems, the computational model par excellence of theoretical botany.
Vincent St-Amour, Daniel Feltey, Spencer P. Florence, Shu-Hung You, Robert Bruce Findler
Proc. ACM Program. Lang.1
2015 Feature-Specific Profiling
Vincent St-Amour, Leif Andersen, Matthias Felleisen
CC1
2015 Optimization Coaching for JavaScript
abstract
The performance of dynamic object-oriented programming languages such as JavaScript depends heavily on highly optimizing just-in-time compilers. Such compilers, like all compilers, can silently fall back to generating conservative, low-performance code during optimization. As a result, programmers may inadvertently cause performance issues on users' systems by making seemingly inoffensive changes to programs. This paper shows how to solve the problem of silent optimization failures. It specifically explains how to create a so-called optimization coach for an object-oriented just-in-time-compiled programming language. The development and evaluation build on the SpiderMonkey JavaScript engine, but the results should generalize to a variety of similar platforms.
Vincent St-Amour, Shu-yu Guo
ECOOP1
2015 Profile-guided meta-programming
abstract
Contemporary 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
PLDI3
2013 Experience report: applying random testing to a base type environment
abstract
As programmers, programming in typed languages increases our confidence in the correctness of our programs. As type system designers, soundness proofs increase our confidence in the correctness of our type systems. There is more to typed languages than their typing rules, however. To be usable, a typed language needs to provide a well-furnished standard library and to specify types for its exports.
Vincent St-Amour, Neil Toronto
ICFP1
2012 Optimization coaching: optimizers learn to communicate with programmers
abstract
Optimizing compilers map programs in high-level languages to high-performance target language code. To most programmers, such a compiler constitutes an impenetrable black box whose inner workings are beyond their understanding. Since programmers often must understand the workings of their compilers to achieve their desired performance goals, they typically resort to various forms of reverse engineering, such as examining compiled code or intermediate forms. Instead, optimizing compilers should engage programmers in a dialog. This paper introduces one such possible form of dialog: optimization coaching. An optimization coach watches while a program is compiled, analyzes the results, generates suggestions for enabling further compiler optimization in the source program, and presents a suitable synthesis of its results to the programmer. We present an evaluation based on case studies, which illustrate how an optimization coach can help programmers achieve optimizations resulting in substantial performance improvements.
Vincent St-Amour, Sam Tobin-Hochstadt, Matthias Felleisen
OOPSLA1
2012 Typing the Numeric Tower
Vincent St-Amour, Sam Tobin-Hochstadt, Matthew Flatt, Matthias Felleisen
PADL1
2011 Languages as libraries
abstract
Programming 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
PLDI2