EDBT 2026 Demo / reviewers in the wild / expert
Hans-Juergen Boehm
dblp:43/2339
· DBLP profile ↗
33ranked-venue papers
23as first author
0since 2021 · last 2020
—ORCID · none
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 28 · 18 first-authorSystems, architecture and hardware · 6 · 4 first-authorTheory of computation · 1 · 1 first-author
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
23 papers |
Concurrent programming · 36% Programming languages and type systems · 24% Program analysis · 19% | |
| Computer architecture, parallel and distributed computing, and storage systems
7 papers |
Memory systems · 44% Storage systems · 34% Parallel and multicore computing · 16% |
Topics — the 30 heaviest of 61, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Programming languages and type systems › type systems
numeric types |
0.4 | 2 | 2020 | Towards an API for the real numbers · PLDI 2020 Constructive real interpretation of numerical programs · PLDI 1987 |
Memory systems
non-volatile memory |
0.4 | 2 | 2016 | Makalu: fast recoverable allocation of non-volatile memory · OOPSLA 2016 Atlas: leveraging locks for non-volatile memory consistency · OOPSLA 2014 |
Program analysis
data flow analysis |
0.3 | 2 | 2012 | On a Technique for Transparently Empowering Classical Compiler Optimizations on Multithreaded Code · ACM Trans. Program. Lang. Syst. 2012 A technique for the effective and automatic reuse of classical compiler optimizations on multithreaded code · POPL 2011 |
Storage systems
crash recovery |
0.2 | 1 | 2016 | Makalu: fast recoverable allocation of non-volatile memory · OOPSLA 2016 |
Memory systems › non-volatile memory
non-volatile memory management |
0.2 | 1 | 2016 | Makalu: fast recoverable allocation of non-volatile memory · OOPSLA 2016 |
Storage systems
storage reliability |
0.2 | 1 | 2016 | Makalu: fast recoverable allocation of non-volatile memory · OOPSLA 2016 |
Concurrent programming
synchronization |
0.2 | 4 | 2014 | Reordering constraints for pthread-style locks · PPoPP 2007 Atlas: leveraging locks for non-volatile memory consistency · OOPSLA 2014 An almost non-blocking stack · PODC 2004 |
Concurrent programming
memory models |
0.2 | 3 | 2008 | Foundations of the C++ concurrency memory model · PLDI 2008 Reordering constraints for pthread-style locks · PPoPP 2007 Threads cannot be implemented as a library · PLDI 2005 |
Storage systems
crash consistency |
0.2 | 1 | 2014 | Atlas: leveraging locks for non-volatile memory consistency · OOPSLA 2014 |
Memory systems › non-volatile memory
persistent memory |
0.2 | 1 | 2014 | Atlas: leveraging locks for non-volatile memory consistency · OOPSLA 2014 |
Parallel and multicore computing
shared-memory parallel programs |
0.2 | 2 | 2012 | On a Technique for Transparently Empowering Classical Compiler Optimizations on Multithreaded Code · ACM Trans. Program. Lang. Syst. 2012 A technique for the effective and automatic reuse of classical compiler optimizations on multithreaded code · POPL 2011 |
Programming languages and type systems
language design |
0.2 | 3 | 2008 | Foundations of the C++ concurrency memory model · PLDI 2008 Threads cannot be implemented as a library · PLDI 2005 Destructors, finalizers, and synchronization · POPL 2003 |
Runtime systems and virtual machines
garbage collection |
0.2 | 7 | 2004 | The space cost of lazy reference counting · POPL 2004 Destructors, finalizers, and synchronization · POPL 2003 Bounding space usage of conservative garbage collectors · POPL 2002 |
Concurrent programming › concurrency bug detection
data race detection |
0.1 | 1 | 2012 | IFRit: interference-free regions for dynamic data-race detection · OOPSLA 2012 |
Program analysis
dynamic analysis |
0.1 | 1 | 2012 | IFRit: interference-free regions for dynamic data-race detection · OOPSLA 2012 |
Concurrent programming › concurrency bug detection › data race detection
dynamic race detection |
0.1 | 1 | 2012 | IFRit: interference-free regions for dynamic data-race detection · OOPSLA 2012 |
Program analysis › data flow analysis
parallel dataflow analysis |
0.1 | 1 | 2012 | On a Technique for Transparently Empowering Classical Compiler Optimizations on Multithreaded Code · ACM Trans. Program. Lang. Syst. 2012 |
Parallel and multicore computing
parallel programming models |
0.1 | 1 | 2012 | On a Technique for Transparently Empowering Classical Compiler Optimizations on Multithreaded Code · ACM Trans. Program. Lang. Syst. 2012 |
Compilers and program optimization
floating-point arithmetic |
0.1 | 2 | 2020 | Towards an API for the real numbers · PLDI 2020 Constructive real interpretation of numerical programs · PLDI 1987 |
Concurrent programming › concurrency bugs
data races |
0.1 | 1 | 2010 | Conflict exceptions: simplifying concurrent language semantics with precise hardware exceptions for data-races · ISCA 2010 |
Concurrent programming
concurrency semantics |
0.1 | 1 | 2008 | Foundations of the C++ concurrency memory model · PLDI 2008 |
Runtime systems and virtual machines › garbage collection
conservative garbage collection |
0.1 | 3 | 2002 | Bounding space usage of conservative garbage collectors · POPL 2002 Simple Garbage-Collector-Safety · PLDI 1996 Space Efficient Conservative Garbage Collection · PLDI 1993 |
Concurrent programming › concurrency primitives
compare-and-swap |
0.0 | 1 | 2004 | An almost non-blocking stack · PODC 2004 |
Concurrent programming
concurrent data structures |
0.0 | 1 | 2004 | An almost non-blocking stack · PODC 2004 |
Concurrent programming › non-blocking algorithms
non-blocking data structures |
0.0 | 1 | 2004 | An almost non-blocking stack · PODC 2004 |
Runtime systems and virtual machines › garbage collection
reference counting |
0.0 | 1 | 2004 | The space cost of lazy reference counting · POPL 2004 |
Compilers and program optimization
compiler optimization |
0.0 | 1 | 2012 | On a Technique for Transparently Empowering Classical Compiler Optimizations on Multithreaded Code · ACM Trans. Program. Lang. Syst. 2012 |
Runtime systems and virtual machines › garbage collection
finalization |
0.0 | 1 | 2003 | Destructors, finalizers, and synchronization · POPL 2003 |
Programming languages and type systems › language semantics
concurrent language semantics |
0.0 | 1 | 2010 | Conflict exceptions: simplifying concurrent language semantics with precise hardware exceptions for data-races · ISCA 2010 |
Compilers and program optimization
compiler correctness |
0.0 | 2 | 2005 | Threads cannot be implemented as a library · PLDI 2005 Simple Garbage-Collector-Safety · PLDI 1996 |
Methods — techniques the papers use, named apart from their topics
lock-based consistency protocol · 0.4siloing · 0.3recovery-time garbage collection · 0.2allocator design · 0.2happens-before analysis · 0.1data-flow transformation · 0.1data flow transformation · 0.1compile-time instrumentation · 0.1pthreads · 0.1GC-robustness analysis · 0.1source annotation · 0.0preprocessor · 0.0pointer identification · 0.0undecidability proof · 0.0axiomatic definition · 0.0
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2020 | Towards an API for the real numbersabstractThe 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. Hans-Juergen Boehm |
PLDI | 1 |
| 2016 | Persistence programming models for non-volatile memoryabstractIt is expected that DRAM memory will be augmented, and perhaps eventually replaced, by one of several up-and-coming memory technologies. These are all non-volatile, in that they retain their contents without power. This allows primary memory to be used as a fast disk replacement. It also enables more aggressive programming models that directly leverage persistence of primary memory. However, it is challenging to maintain consistency of memory in such an environment. There is no consensus on the right programming model for doing so, and subtle differences can have large, and sometimes surprising, effects on the implementation and its performance. The existing literature describes multiple programming systems that provide point solutions to the selective persistence for user data structures. Real progress in this area requires a choice of programming model, which we cannot reasonably make without a real understanding of the design space. Point solutions are insufficient. We systematically explore what we consider to be the most promising part of the space, precisely defining semantics and identifying implementation costs. This allows us to be much more explicit and precise about semantic and implementation trade-offs that were usually glossed over in prior work. It also exposes some promising new design alternatives. Hans-Juergen Boehm, Dhruva R. Chakrabarti |
ISMM | 1 |
| 2016 | Makalu: fast recoverable allocation of non-volatile memoryabstractByte 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 present Makalu, a system that addresses non-volatile memory management. Makalu offers an integrated allocator and recovery-time garbage collector that maintains internal consistency, avoids NVRAM memory leaks, and is efficient, all in the face of failures. Kumud Bhandari, Dhruva R. Chakrabarti, Hans-Juergen Boehm |
OOPSLA | 3 |
| 2015 | Myths and Misconceptions about ThreadsabstractThe semantics of variables shared across threads, usually called "memory models", have evolved significantly over the last decade, but open problems and some controversy remains. I'll briefly review where we are, and argue that a number of assumptions that still appear common in large parts of the research and programming communities are wrong, or at least questionable, especially for programming languages like C and C++. In particular, I will argue that: Hans-Juergen Boehm |
SPAA | 1 |
| 2014 | Atlas: leveraging locks for non-volatile memory consistencyabstractNon-volatile main memory, such as memristors or phase change memory, can revolutionize the way programs persist data. In-memory objects can themselves be persistent without the need for a separate persistent data storage format. However, the challenge is to ensure that such data remains consistent if a failure occurs during execution. Dhruva R. Chakrabarti, Hans-Juergen Boehm, Kumud Bhandari |
OOPSLA | 2 |
| 2012 | IFRit: interference-free regions for dynamic data-race detectionabstractWe propose a new algorithm for dynamic data-race detection. Our algorithm reports no false positives and runs on arbitrary C and C++ code. Unlike previous algorithms, we do not have to instrument every memory access or track a full happens-before relation. Our data-race detector, which we call IFRit, is based on a run-time abstraction called an interference-free region (IFR). An IFR is an interval of one thread's execution during which any write to a specific variable by a different thread is a data race. We insert instrumentation at compile time to monitor active IFRs at run-time. If the runtime observes overlapping IFRs for conflicting accesses to the same variable in two different threads, it reports a race. The static analysis aggregates information for multiple accesses to the same variable, avoiding the expense of having to instrument every memory access in the program. Laura Effinger-Dean, Brandon Lucia, Luis Ceze, Dan Grossman, Hans-Juergen Boehm |
OOPSLA | 5 |
| 2012 | On a Technique for Transparently Empowering Classical Compiler Optimizations on Multithreaded CodeabstractA large body of data-flow analyses exists for analyzing and optimizing sequential code. Unfortunately, much of it cannot be directly applied on parallel code, for reasons of correctness. This article presents a technique to automatically, aggressively, yet safely apply sequentially-sound data-flow transformations, without change , on shared-memory programs. The technique is founded on the notion of program references being “siloed” on certain control-flow paths. Intuitively, siloed references are free of interference from other threads within the confines of such paths. Data-flow transformations can, in general, be unblocked on siloed references. The solution has been implemented in a widely used compiler. Results on benchmarks from SPLASH-2 show that performance improvements of up to 41% are possible, with an average improvement of 6% across all the tested programs over all thread counts. Pramod G. Joisha, Robert S. Schreiber, Prithviraj Banerjee, Hans-Juergen Boehm, Dhruva R. Chakrabarti |
ACM Trans. Program. Lang. Syst. | 4 |
| 2011 | The runtime abort graph and its application to software transactional memory optimizationabstractProgramming with atomic sections is a promising alternative to locks since it raises the abstraction and removes deadlocks at the programmer level. However, implementations of atomic sections using software transactional memory (STM) support have significant bookkeeping overheads. Additionally, because of the speculative nature of transactions, aborts can be frequent greatly lowering application performance. Thus regardless of the STM implementation, tools need to be available to programmers that provide insights into the runtime characteristics of an application as well as provide means to improve performance. This paper attempts to identify the source of an abort at the granularity of a transactional memory reference. The resulting abort patterns are captured in the form of a runtime abort graph (RAG). We show how to build this graph efficiently using compiler instrumentation. We then describe a technique that works on the RAG and automatically recommends STM policy changes to improve performance. Detailed experimental results are presented showing the tradeoffs in building the RAG and its use in reducing aborts and improving performance. Dhruva R. Chakrabarti, Prithviraj Banerjee, Hans-Juergen Boehm, Pramod G. Joisha, Robert S. Schreiber |
CGO | 3 |
| 2011 | A technique for the effective and automatic reuse of classical compiler optimizations on multithreaded codeabstractA large body of data-flow analyses exists for analyzing and optimizing sequential code. Unfortunately, much of it cannot be directly applied on parallel code, for reasons of correctness. This paper presents a technique to automatically, aggressively, yet safely apply sequentially-sound data-flow transformations, without change, on shared-memory programs. The technique is founded on the notion of program references being "siloed" on certain control-flow paths. Intuitively, siloed references are free of interference from other threads within the confines of such paths. Data-flow transformations can, in general, be unblocked on siloed references. Pramod G. Joisha, Robert S. Schreiber, Prithviraj Banerjee, Hans-Juergen Boehm, Dhruva R. Chakrabarti |
POPL | 4 |
| 2010 | Conflict exceptions: simplifying concurrent language semantics with precise hardware exceptions for data-racesabstractWe argue in this paper that concurrency errors should be treated as exceptions, i.e., have fail-stop behavior and precise semantics. We propose an exception model based on conflict of synchronization free regions, which precisely detects a broad class of data-races. We show that our exceptions provide enough guarantees to simplify high-level programming language semantics and debugging, but are significantly cheaper to enforce than traditional data-race detection. To make the performance cost of enforcement negligible, we propose architecture support for accurately detecting and precisely delivering these exceptions. We evaluate the suitability of our model as well as the behavior of our architectural mechanisms using the PARSEC benchmark suite and commercial applications. Our results show that the exception model largely reflects how programmers are already writing code and that the main memory, traffic and performance overheads of the enforcement mechanisms we propose are very low. Brandon Lucia, Luis Ceze, Karin Strauss, Shaz Qadeer, Hans-Juergen Boehm |
ISCA | 5 |
| 2009 | Garbage collection in the next C++ standardabstractC++ has traditionally relied on manual memory management. Sometimes this has been augmented by limited reference counting, implemented in libraries, and requiring use of separate pointer types. In spite of the fact that conservative garbage collectors have been used with C for decades, and with C++ for almost as long, they have not been well-supported by language standards. This in turn has limited their use. Hans-Juergen Boehm, Mike Spertus |
ISMM | 1 |
| 2008 | Foundations of the C++ concurrency memory modelabstractCurrently multi-threaded C or C++ programs combine a single-threaded programming language with a separate threads library. This is not entirely sound [7]. Hans-Juergen Boehm, Sarita V. Adve |
PLDI | 1 |
| 2007 | Reordering constraints for pthread-style locksabstractC or C++ programs relying on the pthreads interface for concurrency are required to use a specified set of functions to avoid data races, and to ensure memory visibility across threads. Although the detailed rules are not completely, it is not hard to refine them to a simple set of clear and uncontroversial rules for at least a subset of the C language that excludes structures (and hence bit-fields). Hans-Juergen Boehm |
PPoPP | 1 |
| 2005 | Threads cannot be implemented as a libraryabstractIn many environments, multi-threaded code is written in a language that was originally designed without thread support (e.g. C), to which a library of threading primitives was subsequently added. There appears to be a general understanding that this is not the right approach. We provide specific arguments that a pure library approach, in which the compiler is designed independently of threading issues, cannot guarantee correctness of the resulting code.We first review why the approach almost works, and then examine some of the surprising behavior it may entail. We further illustrate that there are very simple cases in which a pure library-based approach seems incapable of expressing an efficient parallel algorithm.Our discussion takes place in the context of C with Pthreads, since it is commonly used, reasonably well specified, and does not attempt to ensure type-safety, which would entail even stronger constraints. The issues we raise are not specific to that context. Hans-Juergen Boehm |
PLDI | 1 |
| 2004 | An almost non-blocking stackabstractNon-blocking data structure implementations can be useful for performance and fault-tolerance reasons. And they are far easier to use correctly in a signal- or interrupt-handler context.We describe a weaker class of "almost non-blocking" data structures, which block only if more than some number N of threads attempt to simultaneously access the same data structure. We argue that this gives much of the benefit of fully non-blocking data structures, particularly for signal or interrupt handlers.We present an almost non-blocking linked stack implementation which is efficiently implementable even on hardware providing a single word compare-and-swap operation, while potentially providing the same interface as a well-known fully non-blocking solution, which relies on a double-width compare-and-swap instruction. By making a platform-dependent choice between these, we can implement a signal-handler-safe stack or free-list abstraction that is both portable and exhibits uniformly high performance with any flavor of compare-and-swap instruction. Hans-Juergen Boehm |
PODC | 1 |
| 2004 | The space cost of lazy reference countingabstractReference counting memory management is often advocated as a technique for reducing or avoiding the pauses associated with tracing garbage collection. We present some measurements to remind the reader that classic reference count implementations may in fact exhibit longer pauses than tracing collectors.We then analyze reference counting with lazy deletion, the standard technique for avoiding long pauses by deferring deletions and associated reference count decrements, usually to allocation time. Our principal result is that if each reference count operation is constrained to take constant time, then the overall space requirements can be increased by a factor of Ω(R) in the worst case, where R is the ratio between the size of the largest and smallest allocated object. This bound is achievable, but probably large enough to render this design point useless for most real-time applications.We show that this space cost can largely be avoided if allocating an $n$ byte object is allowed to additionally perform O(n) reference counting work. Hans-Juergen Boehm |
POPL | 1 |
| 2003 | Destructors, finalizers, and synchronizationabstractWe compare two different facilities for running cleanup actions for objects that are about to reach the end of their life.Destructors, such as we find in C++, are invoked synchronously when an object goes out of scope. They make it easier to implement cleanup actions for objects of well-known lifetime, especially in the presence of exceptions.Languages like Java[8], Modula-3[12], and C\#[6] provide a different kind of "finalization" facility: Cleanup methods may be run when the garbage collector discovers a heap object to be otherwise inaccessible. Unlike C++ destructors, such methods run in a separate thread at some much less well-defined time.Languages like Java[8], Modula-3[12], and C\#[6] provide a different kind of "finalization" facility: Cleanup methods may be run when the garbage collector discovers a heap object to be otherwise inaccessible. Unlike C++ destructors, such methods run in a separate thread at some much less well-defined time.We argue that these are fundamentally different, and potentially complementary, language facilities. We also try to resolve some common misunderstandings about finalization in the process. In particular: Hans-Juergen Boehm |
POPL | 1 |
| 2002 | Bounding space usage of conservative garbage collectorsabstractConservative garbage collectors can automatically reclaim unused memory in the absence of precise pointer location information. If a location can possibly contain a pointer, it is treated by the collector as though it contained a pointer. Although it is commonly assumed that this can lead to unbounded space use due to misidentified pointers, such extreme space use is rarely observed in practice, and then generally only if the number of misidentified pointers is itself unbounded.We show that if the program manipulates only data structures satisfying a simple GC-robustness criterion, then a bounded number of misidentified pointers can at most result in increasing space usage by a constant factor. We argue that nearly all common data structures are already GC-robust, and it is typically easy to identify and replace those that are not. Thus it becomes feasible to prove space bounds on programs collected by mildly conservative garbage collectors, such as the one in [2]. The worst-case space overhead introduced by such mild conservatism is comparable to the worst-case fragmentation overhead for inherent in any non-moving storage allocator.The same GC-robustness criterion also ensures the absence of temporary space leaks of the kind discussed in [13] for generational garbage collectors. Hans-Juergen Boehm |
POPL | 1 |
| 2000 | Understanding memory allocation of scheme programsabstractMemory is the performance bottleneck of modern architectures. Keeping memory consumption as low as possible enables fast and unobtrusive applications. But it is not easy to estimate the memory use of programs implemented in functional languages, due to both the complex translations of some high level constructs, and the use of automatic memory managers.To help understand memory allocation behavior of Scheme programs, we have designed two complementary tools. The first one reports on frequency of allocation, heap configurations and on memory reclamation. The second tracks down memory leaks1. We have applied these tools to our Scheme compiler, the largest Scheme program we have been developing. This has allowed us to drastically reduce the amount of memory consumed during its bootstrap process, without requiring much development time.Development tools will be neglected unless they are both conveniently accessible and easy to use. In order to avoid this pitfall, we have carefully designed the user interface of these two tools. Their integration into a real programming environment for Scheme is detailed in the paper. Manuel Serrano, Hans-Juergen Boehm |
ICFP | 2 |
| 2000 | Reducing Garbage Collector Cache MissesabstractCache misses are currently a major factor in the cost of garbage collection, and we expect them to dominate in the future. Traditional garbage collection algorithms exhibit relatively little temporal locality; each live object in the heap is likely to be touched exactly once during each garbage collection. We measure two techniques for dealing with this issue: prefetch-on-grey, and lazy sweeping. The first of these is new in this context. Lazy sweeping has been in common use for a decade. It was introduced as a mechanism for reducing paging and pause times; we argue that it is also crucial for eliminating cache misses during the sweep phase. Hans-Juergen Boehm |
ISMM | 1 |
| 1996 | Simple Garbage-Collector-SafetyabstractA conservative garbage collector can typically be used with conventionally compiled programs written in C or C++. But two safety issues must be considered. First, the source code must not hide pointers from the garbage collector. This primarily requires stricter adherence to existing restrictions in the language definition. Second, we must ensure that the compiler will not perform transformations that invalidate this requirement.We argue that the same technique can be used to address both issues. We present an algorithm for annotating source or intermediate code to either check the validity of pointer arithmetic in the source, or to guarantee that under minimal, clearly defined assumptions about the compiler, the optimizer cannot "disguise" pointers. We discuss an implementation based on a preprocessor for the GNU C compiler (gcc), and give some measurements of program slow down. Hans-Juergen Boehm |
PLDI | 1 |
| 1995 | Ropes: An Alternative to StringsabstractAbstract Programming languages generally provide a ‘string’ or ‘text’ type to allow manipulation of sequences of characters. This type is usually of crucial importance, since it is normally mentioned in most interfaces between system components. We claim that the traditional implementations of strings, and often the supported functionality, are not well suited to such general‐purpose use. They should be confined to applications with specific, and unusual, performance requirements. We present ‘ropes’ or ‘heavyweight’ strings as an alternative that, in our experience leads to systems that are more robust, both in functionality and in performance. Ropes have been in use in the Cedar environment almost since its inception, but this appears to be neither well‐known, nor discussed in the literature. The algorithms have been gradually refined. We have also recently built a second similar, but somewhat lighter weight, C‐language implementation, which is included in our publically released garbage collector distribution. We describe the algorithms used in both, and give some performance measurements for the C version. Hans-Juergen Boehm, Russell R. Atkinson, Michael F. Plass |
Softw. Pract. Exp. | 1 |
| 1993 | Space Efficient Conservative Garbage CollectionabstractWe call a garbage collector conservative if it has only partial information about the location of pointers, and is thus forced to treat arbitrary bit patterns as though they might be pointers, in at least some cases. We show that some very inexpensive, but previously unused techniques can have dramatic impact on the effectiveness of conservative garbage collectors in reclaiming memory. Our most significant observation is that static data that appears to point to the heap should not result in misidentified references to the heap. The garbage collector has enough information to allocate around such references. We also observe that programming style has a significant impact on the amount of spuriously retained storage, typically even if the collector is not terribly conservative. Some fairly common C and C programming styles significantly decrease the effectiveness of any garbage collector. These observations suffice to explain some of the different assessments of conservative collection that have appeared in the literature. Hans-Juergen Boehm |
PLDI | 1 |
| 1991 | Mostly Parallel Garbage CollectionabstractWe present a method for adapting garbage collectors designed to run sequentially with the client, so that they may run concurrently with it.We rely on virtual memory hardware to provide information about pages that have been updated or "dirtied" during a given period of time.This method has been used to construct a mostly parallel trace-and-sweep collector that exhibits very short pause times.Performance measurements are given. Hans-Juergen Boehm, Alan J. Demers, Scott Shenker |
PLDI | 1 |
| 1990 | Optimizing Programs over the Constructive RealsabstractThe constructive reals provide programmers with a useful mechanism for prototyping numerical programs, and for experimenting with numerical algorithms. Unfortunately, the performance of current implementations is inadequate for some potential applications. In particular, these implementations tend to be space inefficient, in that they essentially require a complete computation history to be maintained. Vernon A. Lee Jr., Hans-Juergen Boehm |
PLDI | 2 |
| 1990 | Combining Generational and Conservative Garbage Collection: Framework and ImplementationsabstractTwo key ideas in garbage collection are generational collection and conservative pointer-finding. Generational collection and conservative pointer-finding are hard to use together, because generational collection is usually expressed in terms of copying objects, while conservative pointer-finding precludes copying. We present a new framework for defining garbage collectors. When applied to generational collection, it generalizes the notion of younger/older to a partial order. It can describe traditional generational and conservative techniques, and lends itself to combining different techniques in novel ways. We study in particular two new garbage collectors inspired by this framework. Both these collectors use conservative pointer-finding. The first one is based on a rewrite of an existing trace-and-sweep collector to use one level of generation. The second one has a single parameter, which controls how objects are partitioned into generations: the value of this parameter can be changed dynamically with no overhead. We have implemented both collectors and present measurements of their performance in practice. Alan J. Demers, Mark D. Weiser, Barry Hayes, Hans-Juergen Boehm, Daniel G. Bobrow, Scott Shenker |
POPL | 4 |
| 1989 | Type Inference in the Presence of Type AbstractionabstractA number of recent programming language designs incorporate a type checking system based on the Girard-Reynolds polymorphic λ-calculus. This allows the construction of general purpose, reusable software without sacrificing compile-time type checking. A major factor constraining the implementation of these languages is the difficulty of automatically inferring the lengthy type information that is otherwise required if full use is made of these languages. There is no known algorithm to solve any natural and fully general formulation of this “type inference” problem. One very reasonable formulation of the problem is known to be undecidable. Hans-Juergen Boehm |
PLDI | 1 |
| 1988 | Garbage Collection in an Uncooperative EnvironmentabstractAbstract We describe a technique for storage allocation and garbage collection in the absence of significant co‐operation from the code using the allocator. This limits garbage collection overhead to the time actually required for garbage collection. In particular, application programs that rarely or never make use of the collector no longer encounter a substantial performance penalty. This approach greatly simplifies the implementation of languages supporting garbage collection. It further allows conventional compilers to be used with a garbage collector, either as the primary means of storage reclamation, or as a debugging tool. Our approach has two potential disadvantages. First, some garbage may fail to be reclaimed. Secondly, we use a ‘stop and collect’ approach, thus making the strategy unsuitable for applications with severe real‐time constraints. We argue that the first problem is, to some extent, inherent in any garbage collection system. Furthermore, based on our experience, it is usually not significant in practice. In spite of the second problem, we have had favourable experiences with interactive applications, including some that use a heap of several megabytes. Hans-Juergen Boehm, Mark D. Weiser |
Softw. Pract. Exp. | 1 |
| 1987 | Parallel Attribute Grammar Evaluation
Hans-Juergen Boehm, Willy Zwaenepoel |
ICDCS | 1 |
| 1987 | Constructive real interpretation of numerical programsabstractWe explore the feasibility of providing exact real arithmetic for use in conventional numerical programs. We have built a prototype interpreter which replaces floating point operations with operations on constructive real numbers in the execution of conventional Fortran programs. Such a facility makes it unnecessary to concern oneself with issues of numerical stability in the solution of small problems. It also provides a useful tool for the development of larger numerical programs.We discuss the computability and algorithmic issues involved in the design of the interpreter, as well as some preliminary experiences and performance measurements. Hans-Juergen Boehm |
PLDI | 1 |
| 1985 | Partial Polymorphic Type Inference Is UndecidableabstractPolymorphic type systems combine the reliability and efficiency of static type-checking with the flexibility of dynamic type checking. Unfortunately, such languages tend to be unwieldy unless they accommodate omission of much of the information necessary to perform type checking. The automatic inference of omitted type information has emerged as one of the fundamental new implementation problems of these languages. We show here that a natural formalization of the problem is undecidable. The proof is directly applicable to some practical situations, and provides a partial explanation of the difficulties encountered in other cases. Hans-Juergen Boehm |
FOCS | 1 |
| 1985 | Side Effects and Aliasing Can Have Simple Axiomatic DescriptionsabstractWe present a different style of axiomatic definition for programming languages. It is oriented toward imperative languages, such as Algol 68, that do not distinguish between statements and expressions. Rather than basing the logic on a notion of pre- or postcondition, we use the value of a programming language expression as the underlying primitive. A number of language constructs are examined in this framework. We argue that this style of definition gives us a significantly different view of the notion of “easy axiomatixability.” Side effects in expressions as well as aliasing between variables are shown to be “easily axiomatizable” in our system. Hans-Juergen Boehm |
ACM Trans. Program. Lang. Syst. | 1 |
| 1982 | A Logic for Expressions with Side-EffectsabstractThis paper presents a simple programming logic LES, which is particularly well suited for reasoning about so-called expression languages, i.e. languages that incorporate imperative features into expressions rather than distinguishing between expressions and statements. An axiomatization of a simple programming language is presented using this formalism. It is shown that this axiomatization is relatively complete, roughly in the sense of [Coo 76]. Hans-Juergen Boehm |
POPL | 1 |