Hans-Juergen Boehm
Hans Boehm joined Google as a software engineer in the Android runtime group in 2014. Before that he held various positions at the University of Washington, Rice University, Xerox PARC, SGI (on the same campus as now), and most recently as research manager at HP Labs. He is an ACM Fellow.
Research Areas
Authored Publications
Google Publications
Other Publications
Sort By
Towards an API for the Real Numbers
ACM, pp. 562-576
Preview abstract
The real numbers are pervasive, both in daily life, and in mathematics.
Students spend much time studying their properties. Yet computers and
programming languages generally provide only an approximation geared
towards performance, at the expense of many of the nice properties we
were taught in high school.
Although this is entirely appropriate for many applications, particularly
those that are sensitive to arithmetic performance in the usual sense,
we argue that there are others, where it is a poor choice. If arithmetic
computations and result are directly exposed to human users who are
not floating point experts, floating point approximations tend to be
viewed as bugs. For applications such as calculators,
spreadsheets, and various verification tasks, the cost of
precision sacrifices are high, and the performance benefit is often not
critical. We argue that although previous attempts to provide accurate
and understandable results for such applications using the recursive
reals, were great steps in the right direction, they do not suffice.
Comparing such numbers diverges if they are equal. But in many cases
we cannot produce results expected by users without resolving
equality of numbers. We propose an API for such a real number type,
describe a detailed, and surprisingly compact and simple implementation, and
demonstrate its utility. The approach relies heavily on classical number theory
results.
The resulting arithmetic, which takes advantage of these partial decision procedures,
is used in a calculator application with more than 100 million users.
View details
Small-data computing: Correct calculator arithmetic
Communications of the ACM (CACM Vol. 60 No. 8, August 2017), vol. 60 (2017), pp. 44-49
Preview abstract
Calculators conventionally use some flavor of fixed precision floating point arithmetic. The bundled Android 6.0 Marshmallow calculator instead uses demand-drive evaluation or “constructive real” arithmetic to guarantee fully accurate results. We explain why this matters, the opportunities it creates, and the challenges in incorporating constructive real arithmetic in a tool aimed at a very broad audience.
View details
Preview abstract
Byte addressable non-volatile memory (NVRAM) is likely to
supplement, and perhaps eventually replace, DRAM. Applications
can then persist data structures directly in memory
instead of serializing them and storing them onto a
durable block device. However, failures during execution
can leave data structures in NVRAM unreachable or corrupt. In
this paper, we address memory management of non-volatile
memory, offering an integrated allocator and garbage collector
that maintains internal consistency, minimizes memory
leaks, and is efficient in the face of failures.
We show that a careful allocator design can both support a
less restrictive and much more familiar programming model.
By lazily persisting non-essential metadata and by employing
a post-failure recovery-time garbage collector, the per
allocation persistence overhead is greatly reduced. Experimental
results show that the resulting online speed and scalability
of our allocator are comparable to well-known transient
allocators and significantly better than state-of-the-art
persistent allocators.
View details
Outlawing ghosts: avoiding out-of-thin-air results
Preview
Brian Demsky
Workshop on Memory Systems Performance and Correctness (MSPC), ACM, New York, NY (2014)
Durability Semantics for Lock-based Multithreaded Programs
IFRit: interference-free regions for dynamic data-race detection
Laura Effinger-Dean
Brandon Lucia
Luis Ceze
Dan Grossman
OOPSLA (2012), pp. 467-484
Can seqlocks get along with programming language memory models?
MSPC (2012), pp. 12-20
You don't know jack about shared variables or memory models
On a Technique for Transparently Empowering Classical Compiler Optimizations on Multithreaded Code
Pramod G. Joisha
Robert S. Schreiber
Prithviraj Banerjee
Dhruva R. Chakrabarti
ACM Trans. Program. Lang. Syst., vol. 34 (2012), pp. 9
How to Miscompile Programs with "Benign" Data Races
HotPar (2011)
Multi-Core Memory Models and Concurrency Theory (Dagstuhl Seminar 11011)
Ursula Goltz
Holger Hermanns
Peter Sewell
Dagstuhl Reports, vol. 1 (2011), pp. 1-26
Extended sequential reasoning for data-race-free programs
Laura Effinger-Dean
Dhruva R. Chakrabarti
Pramod G. Joisha
MSPC (2011), pp. 22-29
Performance implications of fence-based memory models
MSPC (2011), pp. 13-19
The runtime abort graph and its application to software transactional memory optimization
Dhruva R. Chakrabarti
Prithviraj Banerjee
Pramod G. Joisha
Robert S. Schreiber
CGO (2011), pp. 42-53
A technique for the effective and automatic reuse of classical compiler optimizations on multithreaded code
Pramod G. Joisha
Robert S. Schreiber
Prithviraj Banerjee
Dhruva R. Chakrabarti
POPL (2011), pp. 623-636
Memory Models
A solid foundation for x86 shared memory: technical perspective
Commun. ACM, vol. 53 (2010), pp. 88
Conflict exceptions: simplifying concurrent language semantics with precise hardware exceptions for data-races
Memory models: a case for rethinking parallel languages and hardware
Garbage collection in the next C++ standard
Foundations of the C++ concurrency memory model
Reordering constraints for pthread-style locks
PPOPP (2007), pp. 173-182
The constructive reals as a Java library
J. Log. Algebr. Program., vol. 64 (2005), pp. 3-11
Threads cannot be implemented as a library
PLDI (2005), pp. 261-268
The space cost of lazy reference counting
POPL (2004), pp. 210-219
An almost non-blocking stack
PODC (2004), pp. 40-49
Destructors, finalizers, and synchronization
POPL (2003), pp. 262-272
Bounding space usage of conservative garbage collectors
POPL (2002), pp. 93-100
SIGPLANet - A Modest Proposal for SIGPLAN in the 21st Century
Letter from the Newly Elected Chair
SIGPLAN Notices, vol. 36 (2001), pp. 1-2
Reducing Garbage Collector Cache Misses
ISMM (2000), pp. 59-64
Understanding memory allocation of scheme programs
Simple Garbage-Collector-Safety
PLDI (1996), pp. 89-98
Ropes: An Alternative to Strings
Russell R. Atkinson
Michael F. Plass
Softw., Pract. Exper., vol. 25 (1995), pp. 1315-1330
Implementing Multiple Locks Using Lamport's Mutual Exclusion Algorithm
Space efficient conservative garbage collection (with retrospective)
Best of PLDI (1993), pp. 490-501
Space Efficient Conservative Garbage Collection
PLDI (1993), pp. 197-206
Mostly Parallel Garbage Collection
Optimizing Programs over the Constructive Reals
Combining Generational and Conservative Garbage Collection: Framework and Implementations
Alan J. Demers
Mark Weiser
Barry Hayes
Daniel G. Bobrow
Scott Shenker
POPL (1990), pp. 261-269
Type Inference in the Presence of Type Abstraction
PLDI (1989), pp. 192-206
Garbage Collection in an Uncooperative Environment
Constructive real interpretation of numerical programs
PLDI (1987), pp. 214-221
Parallel Attribute Grammar Evaluation
Implementing RUSSELL
Exact Real Arithmetic: A Case Study in Higher Order Programming
Robert Cartwright
Mark Riggle
Michael J. O'Donnell
LISP and Functional Programming (1986), pp. 162-173
Partial Polymorphic Type Inference Is Undecidable
FOCS (1985), pp. 339-345
Side Effects and Aliasing Can Have Simple Axiomatic Descriptions
ACM Trans. Program. Lang. Syst., vol. 7 (1985), pp. 637-655
A Logic for Expressions with Side-Effects
POPL (1982), pp. 268-280