Nathaniel Nystrom

dblp:54/2322 · also Nate Nystrom · DBLP profile ↗
← Back
19ranked-venue papers
6as first author
0since 2021 · last 2019
0009-0003-4405-0907ORCID · corroborated

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

Software engineering, systems software and programming languages · 18 · 6 first-authorSystems, architecture and hardware · 1

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
9 papers
Programming languages and type systems · 63% Empirical software engineering · 25% Program analysis · 6%
Network and information security
3 papers
Systems and software security · 100%

Topics — the 18 heaviest of 22, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Programming languages and type systems
type systems
0.632019
Casting about in the dark: an empirical study of cast operations in Java programs · Proc. ACM Program. Lang. 2019
Constrained kinds · OOPSLA 2012
Thorn: robust, concurrent, extensible scripting on the JVM · OOPSLA 2009
Empirical software engineering
mining software repositories
0.622019
Casting about in the dark: an empirical study of cast operations in Java programs · Proc. ACM Program. Lang. 2019
Use at your own risk: the Java unsafe API in the wild · OOPSLA 2015
Programming languages and type systems › type systems
static typing
0.412019
Casting about in the dark: an empirical study of cast operations in Java programs · Proc. ACM Program. Lang. 2019
Empirical software engineering › software engineering research methodology
empirical study
0.212016
The Truth, The Whole Truth, and Nothing But the Truth: A Pragmatic Guide to Assessing Empirical Evaluations · ACM Trans. Program. Lang. Syst. 2016
Programming languages and type systems › type theory
dependent types
0.222012
Constrained kinds · OOPSLA 2012
Constrained types for object-oriented languages · OOPSLA 2008
Programming languages and type systems › type systems › polymorphism
qualified types
0.222012
Constrained kinds · OOPSLA 2012
Constrained types for object-oriented languages · OOPSLA 2008
Program analysis › binary analysis
bytecode analysis
0.212015
Use at your own risk: the Java unsafe API in the wild · OOPSLA 2015
Programming languages and type systems
language-based safety
0.212015
Use at your own risk: the Java unsafe API in the wild · OOPSLA 2015
Programming languages and type systems
inheritance
0.122006
J&: nested intersection for scalable software composition · OOPSLA 2006
Scalable extensibility via nested inheritance · OOPSLA 2004
Programming languages and type systems › module systems
software composition
0.122006
J&: nested intersection for scalable software composition · OOPSLA 2006
Scalable extensibility via nested inheritance · OOPSLA 2004
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 › object-oriented programming
object-oriented languages
0.112008
Constrained types for object-oriented languages · OOPSLA 2008
Systems and software security › isolation
secure program partitioning
0.122002
Secure program partitioning · ACM Trans. Comput. Syst. 2002
Untrusted Hosts and Confidentiality: Secure Program Partitioning · SOSP 2001
Systems and software security
memory safety
0.112015
Use at your own risk: the Java unsafe API in the wild · OOPSLA 2015
Programming languages and type systems
information flow control
0.012002
Secure program partitioning · ACM Trans. Comput. Syst. 2002
Systems and software security
information flow control
0.012001
Untrusted Hosts and Confidentiality: Secure Program Partitioning · SOSP 2001
Distributed systems
peer-to-peer systems
0.012006
J&: nested intersection for scalable software composition · OOPSLA 2006

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

static analysis · 0.4repository mining · 0.4empirical study · 0.4constraint system · 0.1language-based security · 0.1type-safe composition · 0.1compiler plugin mechanism · 0.1static type checking · 0.1dependent types · 0.1security type annotation · 0.1automatic program partitioning · 0.1security type system · 0.1program partitioning · 0.1type system · 0.0operational semantics · 0.0
YearPublicationVenuePosition
2019 Casting about in the dark: an empirical study of cast operations in Java programs
abstract
The main goal of a static type system is to prevent certain kinds of errors from happening at run time. A type system is formulated as a set of constraints that gives any expression or term in a program a well-defined type. Yet mainstream programming languages are endowed with type systems that provide the means to circumvent their constraints through casting. We want to understand how and when developers escape the static type system to use dynamic typing. We empirically study how casting is used by developers in more than seven thousand Java projects. We find that casts are widely used (8.7% of methods contain at least one cast) and that 50% of casts we inspected are not guarded locally to ensure against potential run-time errors. To help us better categorize use cases and thus understand how casts are used in practice, we identify 25 cast-usage patterns---recurrent programming idioms using casts to solve a specific issue. This knowledge can be: (a) a recommendation for current and future language designers to make informed decisions (b) a reference for tool builders, e.g., by providing more precise or new refactoring analyses, (c) a guide for researchers to test new language features, or to carry out controlled programming experiments, and (d) a guide for developers for better practices.
Luis Mastrangelo, Matthias Hauswirth, Nathaniel Nystrom
Proc. ACM Program. Lang.3
2016 The Truth, The Whole Truth, and Nothing But the Truth: A Pragmatic Guide to Assessing Empirical Evaluations
Steve Blackburn, Amer Diwan, Matthias Hauswirth, Peter F. Sweeney, José Nelson Amaral, Tim Brecht, Lubomír Bulej, Cliff Click, Lieven Eeckhout, Sebastian Fischmeister, Daniel Frampton, Laurie J. Hendren, Michael Hind, Antony L. Hosking, Richard E. Jones, Tomas Kalibera, Nathan Keynes, Nathaniel Nystrom, Andreas Zeller
ACM Trans. Program. Lang. Syst.18
2015 A Refactoring Library for Scala Compiler Extensions
Amanj Sherwany, Nosheen Zaza, Nathaniel Nystrom
CC3
2015 Use at your own risk: the Java unsafe API in the wild
abstract
Java is a safe language. Its runtime environment provides strong safety guarantees that any Java application can rely on. Or so we think. We show that the runtime actually does not provide these guarantees---for a large fraction of today's Java code. Unbeknownst to many application developers, the Java runtime includes a "backdoor" that allows expert library and framework developers to circumvent Java's safety guarantees. This backdoor is there by design, and is well known to experts, as it enables them to write high-performance "systems-level" code in Java. For much the same reasons that safe languages are preferred over unsafe languages, these powerful---but unsafe---capabilities in Java should be restricted. They should be made safe by changing the language, the runtime system, or the libraries. At the very least, their use should be restricted. This paper is a step in that direction. We analyzed 74 GB of compiled Java code, spread over 86,479 Java archives, to determine how Java's unsafe capabilities are used in real-world libraries and applications. We found that 25% of Java bytecode archives depend on unsafe third-party Java code, and thus Java's safety guarantees cannot be trusted. We identify 14 different usage patterns of Java's unsafe capabilities, and we provide supporting evidence for why real-world code needs these capabilities. Our long-term goal is to provide a foundation for the design of new language features to regain safety in Java.
Luis Mastrangelo, Luca Ponzanelli, Andrea Mocci, Michele Lanza 0001, Matthias Hauswirth, Nathaniel Nystrom
OOPSLA6
2015 Tapir: a language for verified OS kernel probes
abstract
Kernel probes allow code to be inserted into a running operating system kernel to gather information for debugging or profiling. Inserting code into the kernel raises a number of safety issues. Current solutions follow one of the two paths: a VM-based approach, where safety properties are checked dynamically by an interpreter, or a static-analysis approach, where probe code is guaranteed to be safe statically. While more attractive, existing static solutions depend on ad-hoc and error-prone analysis. We propose to explore enforcing safety properties using a type system, thus building our analysis on top of the well-studied ground of type theory.
Ilya Yanok, Nathaniel Nystrom
PLOS@SOSP2
2012 Constrained kinds
abstract
Modern object-oriented languages such as X10 require a rich framework for types capable of expressing both value-dependency and genericity, and supporting pluggable, domain-specific extensions. In earlier work, we presented a framework for constrained types in object-oriented languages, parametrized by an underlying constraint system. Types are viewed as formulas C{c} where C is the name of a class or an interface and c is a constraint on the immutable instance state (the properties) of C. Constraint systems are a very expressive framework for partial information. Many (value-)dependent type systems for object-oriented languages can be viewed as constrained types.
Olivier Tardieu, Nathaniel Nystrom, Igor Peshansky, Vijay A. Saraswat
OOPSLA2
2012 SimFuzz: Test case similarity directed deep fuzzing
Dazhi Zhang, Donggang Liu, Yu Lei 0001, David Chenho Kung, Christoph Csallner, Nathaniel Nystrom
J. Syst. Softw.6
2011 Harmless compiler plugins
abstract
Languages such as Java and Scala allow programmers to write compiler extensions, or plugins, that extend the host programming language with new functionality to enable additional static checking and code transformations.
Nathaniel Nystrom
FTfJP@ECOOP1
2011 Firepile: run-time compilation for GPUs in scala
abstract
Recent advances have enabled GPUs to be used as general-purpose parallel processors on commodity hardware for little cost. However, the ability to program these devices has not kept up with their performance. The programming model for GPUs has a number of restrictions that make it difficult to program. For example, software running on the GPU cannot perform dynamic memory allocation, requiring the programmer to pre-allocate all memory the GPU might use. To achieve good performance, GPU programmers must also be aware of how data is moved between host and GPU memory and between the different levels of the GPU memory hierarchy.
Nathaniel Nystrom, Derek White, Kishen Das
GPCE1
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
OOPSLA3
2008 Constrained types for object-oriented languages
abstract
X10 is a modern object-oriented language designed for productivity and performance in concurrent and distributed systems. In this setting, dependent types offer significant opportunities for detecting design errors statically, documenting design decisions, eliminating costly run-time checks (e.g., for array bounds, null values), and improving the quality of generated code.
Nathaniel Nystrom, Vijay A. Saraswat, Jens Palsberg, Christian Grothoff
OOPSLA1
2008 Matchete: Paths through the Pattern Matching Jungle
Martin Hirzel, Nathaniel Nystrom, Bard Bloom, Jan Vitek
PADL2
2006 J&: nested intersection for scalable software composition
abstract
This paper introduces a programming language that makes it convenient to compose large software systems, combining their features in a modular way. J& supports nested intersection, building on earlier work on nested inheritance in the language Jx. Nested inheritance permits modular, type-safe extension of a package (including nested packages and classes), while preserving existing type relationships. Nested intersection enables composition and extension of two or more packages, combining their types and behavior while resolving conflicts with a relatively small amount of code. The utility of J& is demonstrated by using it to construct two composable, extensible frameworks: a compiler framework for Java, and a peer-to-peer networking system. Both frameworks support composition of extensions. For example, two compilers adding different, domain-specific features to Java can be composed to obtain a compiler for a language that supports both sets of features.
Nathaniel Nystrom, Xin Qi 0012, Andrew C. Myers
OOPSLA1
2004 Scalable extensibility via nested inheritance
abstract
Inheritance is a useful mechanism for factoring and reusing code. However, it has limitations for building extensible systems. We describe nested inheritance, a mechanism that addresses some of the limitations of ordinary inheritance and other code reuse mechanisms. Using our experience with an extensible compiler framework, we show how nested inheritance can be used to construct highly extensible software frameworks. The essential aspects of nested inheritance are formalized in a simple object-oriented language with an operational semantics and type system. The type system of this language is sound, so no run-time type checking is required to implement it and no run-time type errors can occur. We describe our implementation of nested inheritance as an unobtrusive extension of the Java language, called Jx. Our prototype implementation translates Jx code to ordinary Java code, without duplicating inherited code.
Nathaniel Nystrom, Stephen Chong, Andrew C. Myers
OOPSLA1
2003 Polyglot: An Extensible Compiler Framework for Java
Nathaniel Nystrom, Michael R. Clarkson, Andrew C. Myers
CC1
2002 Code Sharing among Virtual Machines
Grzegorz Czajkowski, Laurent Daynès, Nathaniel Nystrom
ECOOP3
2002 Secure program partitioning
abstract
This paper presents secure program partitioning, a language-based technique for protecting confidential data during computation in distributed systems containing mutually untrusted hosts. Confidentiality and integrity policies can be expressed by annotating programs with security types that constrain information flow; these programs can then be partitioned automatically to run securely on heterogeneously trusted hosts. The resulting communicating subprograms collectively implement the original program, yet the system as a whole satisfies the security requirements of participating principals without requiring a universally trusted host machine. The experience in applying this methodology and the performance of the resulting distributed code suggest that this is a promising way to obtain secure distributed computation.
Steve Zdancewic, Lantian Zheng, Nathaniel Nystrom, Andrew C. Myers
ACM Trans. Comput. Syst.3
2001 Untrusted Hosts and Confidentiality: Secure Program Partitioning
abstract
This paper presents secure program partitioning, a language-based technique for protecting confidential data during computation in distributed systems containing mutually untrusted hosts. Confidentiality and integrity policies can be expressed by annotating programs with security types that constrain information flow; these programs can then be partitioned automatically to run securely on heterogeneously trusted hosts. The resulting communicating subprograms collectively implement the original program, yet the system as a whole satisfies the security requirements of participating principals without requiring a universally trusted host machine. The experience in applying this methodology and the performance of the resulting distributed code suggest that this is a promising way to obtain secure distributed computation.
Steve Zdancewic, Lantian Zheng, Nathaniel Nystrom, Andrew C. Myers
SOSP3
2001 Partial redundancy elimination for access path expressions
abstract
Abstract Pointer traversals pose significant overhead to the execution of object‐oriented programs, since every access to an object's state requires a pointer dereference. Eliminating redundant pointer traversals reduces both instructions executed as well as redundant memory accesses to relieve pressure on the memory subsystem. We describe an approach to elimination of redundant access expressions that combines partial redundancy elimination (PRE) with type‐based alias analysis (TBAA). To explore the potential of this approach we have implemented an optimization framework for Java class files incorporating TBAA‐based PRE over pointer access expressions. The framework is implemented as a class‐file‐to‐class‐file transformer; optimized classes can then be run in any standard Java execution environment. Our experiments demonstrate improvements in the execution of optimized code for several Java benchmarks running in diverse execution environments: the standard interpreted JDK virtual machine, a virtual machine using ‘just‐in‐time’ compilation, and native binaries compiled off‐line (‘way‐ahead‐of‐time’). Overall, however, our experience is of mixed success with the optimizations, mainly because of the isolation between our optimizer and the underlying execution environments which prevents more effective cooperation between them. We isolate the impact of access path PRE using TBAA, and demonstrate that Java's requirement of precise exceptions can noticeably impact code‐motion optimizations like PRE. Copyright © 2001 John Wiley & Sons, Ltd.
Antony L. Hosking, Nathaniel Nystrom, David Whitlock, Quintin I. Cutts, Amer Diwan
Softw. Pract. Exp.2