Gregor Richards

dblp:48/7473 · DBLP profile ↗
← Back
11ranked-venue papers
6as first author
1since 2021 · last 2026
0000-0001-5058-2174ORCID · corroborated

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

Software engineering, systems software and programming languages · 11 · 6 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
5 papers
Programming languages and type systems · 43% Runtime systems and virtual machines · 21% Software maintenance and evolution · 17%
Computer architecture, parallel and distributed computing, and storage systems
1 paper
Performance modeling and evaluation · 67% Electronic design automation · 33%
Network and information security
1 paper
Authentication and access control · 77% Web and mobile security · 23%

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

TopicWeightPapersLastEvidence papers
Programming languages and type systems › type systems
gradual typing
0.312017
The VM already knew that: leveraging compile-time knowledge to optimize gradual typing · Proc. ACM Program. Lang. 2017
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.312017
The VM already knew that: leveraging compile-time knowledge to optimize gradual typing · Proc. ACM Program. Lang. 2017
Authentication and access control
access control
0.212013
Flexible access control for javascript · OOPSLA 2013
Software maintenance and evolution › refactoring
automated code transformation
0.112012
Eval begone!: semi-automated removal of eval from javascript programs · OOPSLA 2012
Programming languages and type systems › dynamic languages
javascript
0.112012
Eval begone!: semi-automated removal of eval from javascript programs · OOPSLA 2012
Software maintenance and evolution
refactoring
0.112012
Eval begone!: semi-automated removal of eval from javascript programs · OOPSLA 2012
Electronic design automation
benchmark generation
0.112011
Automated construction of JavaScript benchmarks · OOPSLA 2011
Performance modeling and evaluation
benchmarking
0.112011
Automated construction of JavaScript benchmarks · OOPSLA 2011
Performance modeling and evaluation
workload characterization
0.112011
Automated construction of JavaScript benchmarks · OOPSLA 2011
Programming languages and type systems
dynamic languages
0.112010
An analysis of the dynamic behavior of JavaScript programs · PLDI 2010
Programming languages and type systems
language design
0.112009
Thorn: robust, concurrent, extensible scripting on the JVM · OOPSLA 2009
Concurrent programming
message passing
0.112009
Thorn: robust, concurrent, extensible scripting on the JVM · OOPSLA 2009
Programming languages and type systems
type systems
0.112009
Thorn: robust, concurrent, extensible scripting on the JVM · OOPSLA 2009
Compilers and program optimization › compiler optimization
speculative optimization
0.112017
The VM already knew that: leveraging compile-time knowledge to optimize gradual typing · Proc. ACM Program. Lang. 2017
Web and mobile security
web application security
0.012013
Flexible access control for javascript · OOPSLA 2013
Compilers and program optimization › dynamic optimization
dynamic language optimization
0.012011
Automated construction of JavaScript benchmarks · OOPSLA 2011
Runtime systems and virtual machines › virtual machine implementation
javascript engine
0.012011
Automated construction of JavaScript benchmarks · OOPSLA 2011

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

shape checks · 0.3intrinsic object contracts · 0.3corpus analysis · 0.3record and replay · 0.2instrumentation · 0.2webkit implementation · 0.2policy enforcement · 0.2static pattern recognition · 0.1empirical study · 0.1compiler plugin mechanism · 0.1
YearPublicationVenuePosition
2026 Type-Safe Monotonic Object Evolution
abstract
Object evolution is a monotonic approach to typestate and object reclassification, enforcing that objects may gain, but not lose properties, to permit aliasing. We present a formalization and prototype implementation of our new language May , featuring inheritance-based evolution that changes the run-time class of an object to a subclass. To statically guarantee evolution succeeds, we introduce a simple affine permission system for ensuring evolvable references match the run-time type of an object. Furthermore, we demonstrate that our system provides an effective and type-safe way of expressing staged operations and complex initialization procedures.
Alexandra Mirrlees-Black, Gregor Richards, Fabian Muehlboeck
Proc. ACM Program. Lang.3
2020 Blame for Null
Abel Nieto, Marianna Rapoport, Gregor Richards, Ondrej Lhoták
ECOOP3
2019 Reasoning About Foreign Function Interfaces Without Modelling the Foreign Language
abstract
Object-oriented programming has long been regarded as too inefficient for SIMD high-performance computing, despite the fact that many important HPC applications have an inherent object structure. On SIMD accelerators, including GPUs, this is mainly due to performance problems with memory allocation and memory access: There are a few libraries that support parallel memory allocation directly on accelerator devices, but all of them suffer from uncoalesed memory accesses. We discovered a broad class of object-oriented programs with many important real-world applications that can be implemented efficiently on massively parallel SIMD accelerators. We call this class Single-Method Multiple-Objects (SMMO), because parallelism is expressed by running a method on all objects of a type. To make fast GPU programming available to average programmers, we developed DynaSOAr, a CUDA framework for SMMO applications. DynaSOAr consists of (1) a fully-parallel, lock-free, dynamic memory allocator, (2) a data layout DSL and (3) an efficient, parallel do-all operation. DynaSOAr achieves performance superior to state-of-the-art GPU memory allocators by controlling both memory allocation and memory access. DynaSOAr improves the usage of allocated memory with a Structure of Arrays data layout and achieves low memory fragmentation through efficient management of free and allocated memory blocks with lock-free, hierarchical bitmaps. Contrary to other allocators, our design is heavily based on atomic operations, trading raw (de)allocation performance for better overall application performance. In our benchmarks, DynaSOAr achieves a speedup of application code of up to 3x over state-of-the-art allocators. Moreover, DynaSOAr manages heap memory more efficiently than other allocators, allowing programmers to run up to 2x larger problem sizes with the same amount of memory.
Alexi Turcotte, Ellen Arteca, Gregor Richards
ECOOP3
2017 The VM already knew that: leveraging compile-time knowledge to optimize gradual typing
abstract
Programmers in dynamic languages wishing to constrain and understand the behavior of their programs may turn to gradually-typed languages, which allow types to be specified optionally and check values at the boundary between dynamic and static code. Unfortunately, the performance cost of these run-time checks can be severe, slowing down execution by at least 10x when checks are present. Modern virtual machines (VMs) for dynamic languages use speculative techniques to improve performance: If a particular value was seen once, it is likely that similar values will be seen in the future. They combine optimization-relevant properties of values into cacheable “shapes”, then use a single shape check to subsume checks for each property. Values with the same memory layout or the same field types have the same shape. This greatly reduces the amount of type checking that needs to be performed at run-time to execute dynamic code. While very valuable to the VM’s optimization, these checks do little to benefit the programmer aside from improving performance. We present in this paper a design for intrinsic object contracts, which makes the obligations of gradually-typed languages’ type checks an intrinsic part of object shapes, and thus can subsume run-time type checks into existing shape checks, eliminating redundant checks entirely. With an implementation on a VM for JavaScript used as a target for SafeTypeScript’s soundness guarantees, we demonstrate slowdown averaging 7% in fully-typed code relative to unchecked code, and no more than 45% in pessimal configurations.
Gregor Richards, Ellen Arteca, Alexi Turcotte
Proc. ACM Program. Lang.1
2015 Concrete Types for TypeScript
abstract
Typescript extends JavaScript with optional type annotations that are, by design, unsound and, that the Typescript compiler discards as it emits code. This design point preserves programming idioms developers are familiar with, and allows them to leave their legacy code unchanged, while offering a measure of static error checking in parts of the program that have type annotations. We present an alternative design for TypeScript, one where it is possible to support the same degree of dynamism, but where types can be strengthened to provide hard guarantees. We report on an implementation, called StrongScript, that improves runtime performance of typed programs when run on a modified version of the V8 JavaScript engine.
Gregor Richards, Francesco Zappa Nardelli, Jan Vitek
ECOOP1
2013 Flexible access control for javascript
abstract
Providing security guarantees for systems built out of untrusted components requires the ability to define and enforce access control policies over untrusted code. In Web 2.0 applications, JavaScript code from different origins is often combined on a single page, leading to well-known vulnerabilities. We present a security infrastructure which allows users and content providers to specify access control policies over subsets of a JavaScript program by leveraging the concept of delimited histories with revocation. We implement our proposal in WebKit and evaluate it with three policies on 50 widely used websites with no changes to their JavaScript code and report performance overheads and violations.
Gregor Richards, Christian Hammer 0001, Francesco Zappa Nardelli, Suresh Jagannathan, Jan Vitek
OOPSLA1
2012 Eval begone!: semi-automated removal of eval from javascript programs
abstract
Eval endows JavaScript developers with great power. It allows developers and end-users, by turning text into executable code, to seamlessly extend and customize the behavior of deployed applications as they are running. With great power comes great responsibility, though not in our experience. In previous work we demonstrated through a large corpus study that programmers wield that power in rather irresponsible and arbitrary ways. We showed that most calls to eval fall into a small number of very predictable patterns. We argued that those patterns could easily be recognized by an automated algorithm and that they could almost always be replaced with safer JavaScript idioms. In this paper we set out to validate our claim by designing and implementing a tool, which we call Evalorizer, that can assist programmers in getting rid of their unneeded evals. We use the tool to remove eval from a real-world website and validated our approach over logs taken from the top 100 websites with a success rate over 97% under an open world assumption.
Fadi Meawad, Gregor Richards, Floréal Morandat, Jan Vitek
OOPSLA2
2011 The Eval That Men Do - A Large-Scale Study of the Use of Eval in JavaScript Applications
Gregor Richards, Christian Hammer 0001, Brian Burg, Jan Vitek
ECOOP1
2011 Automated construction of JavaScript benchmarks
abstract
JavaScript is a highly dynamic language for web-based applications. Innovative implementation techniques for improving its speed and responsiveness have been developed in recent years. Industry benchmarks such as WebKit SunSpider are often cited as a measure of the efficacy of these techniques. However, recent studies have shown that these benchmarks fail to accurately represent the dynamic nature of modern JavaScript applications, and so may be poor predictors of real-world performance. Worse, they may guide the development of optimizations which are unhelpful for real applications. Our goal is to develop a tool and techniques to automate the creation of realistic and representative benchmarks from existing web applications. We propose a record-and-replay approach to capture JavaScript sessions which has sufficient fidelity to accurately recreate key characteristics of the original application, and at the same time is sufficiently flexible that a recording produced on one platform can be replayed on a different one. We describe JSBench, a flexible tool for workload capture and benchmark generation, and demonstrate its use in creating eight benchmarks based on popular sites. Using a variety of runtime metrics collected with instrumented versions of Firefox, Internet Explorer, and Safari, we show that workloads created by JSBench match the behavior of the original web applications.
Gregor Richards, Andreas Gal, Brendan Eich, Jan Vitek
OOPSLA1
2010 An analysis of the dynamic behavior of JavaScript programs
abstract
The JavaScript programming language is widely used for web programming and, increasingly, for general purpose computing. As such, improving the correctness, security and performance of JavaScript applications has been the driving force for research in type systems, static analysis and compiler techniques for this language. Many of these techniques aim to reign in some of the most dynamic features of the language, yet little seems to be known about how programmers actually utilize the language or these features. In this paper we perform an empirical study of the dynamic behavior of a corpus of widely-used JavaScript programs, and analyze how and why the dynamic features are used. We report on the degree of dynamism that is exhibited by these JavaScript programs and compare that with assumptions commonly made in the literature and accepted industry benchmark suites.
Gregor Richards, Sylvain Lebresne, Brian Burg, Jan Vitek
PLDI1
2009 Thorn: robust, concurrent, extensible scripting on the JVM
abstract
Scripting languages enjoy great popularity due to their support for rapid and exploratory development. They typically have lightweight syntax, weak data privacy, dynamic typing, powerful aggregate data types, and allow execution of the completed parts of incomplete programs. The price of these features comes later in the software life cycle. Scripts are hard to evolve and compose, and often slow. An additional weakness of most scripting languages is lack of support for concurrency - though concurrency is required for scalability and interacting with remote services. This paper reports on the design and implementation of Thorn, a novel programming language targeting the JVM. Our principal contributions are a careful selection of features that support the evolution of scripts into industrial grade programs - e.g., an expressive module system, an optional type annotation facility for declarations, and support for concurrency based on message passing between lightweight, isolated processes. On the implementation side, Thorn has been designed to accommodate the evolution of the language itself through a compiler plugin mechanism and target the Java virtual machine.
Bard Bloom, John Field, Nathaniel Nystrom, Johan Östlund, Gregor Richards, Rok Strnisa, Jan Vitek, Tobias Wrigstad
OOPSLA5