Demonstration venue · read-only. Every page can be browsed; the buttons that would change it are switched off. Create an account to run TaxoReview on your own data. A simulation from public publication records: the people listed were not invited and did not agree to review.
? Tutorial for this page

Peter Lee 0001

dblp:l/PeterLee1 · DBLP profile ↗
← Back
38ranked-venue papers
5as first author
0since 2021 · last 2015
—ORCID · conflict

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

Software engineering, systems software and programming languages · 25 · 5 first-authorTheory of computation · 9Artificial intelligence and machine learning · 7Systems, architecture and hardware · 6Computer networks · 1Security and privacy · 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
21 papers
Program verification · 50% Programming languages and type systems · 20% Compilers and program optimization · 10%
Human-computer interaction and pervasive computing
1 paper
Human-AI interaction · 100%
Artificial intelligence
4 papers
Language models and text generation · 34% Multi-agent systems · 34% Motion planning and robot control · 32%
Computer architecture, parallel and distributed computing, and storage systems
3 papers
Distributed systems · 49% Emerging computing paradigms · 37% Memory systems · 12%

Topics — the 30 heaviest of 56, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program verification
proof-carrying code
0.152000
A certifying compiler for Java · PLDI 2000
A Proof-Carrying Code Architecture for Java · CAV 2000
The Design and Implementation of a Certifying Compiler · PLDI 1998
Programming languages and type systems
heap-manipulating programs
0.112010
Automatic numeric abstractions for heap-manipulating programs · POPL 2010
Program verification
safety verification
0.112010
Automatic numeric abstractions for heap-manipulating programs · POPL 2010
Program verification
termination analysis
0.112010
Automatic numeric abstractions for heap-manipulating programs · POPL 2010
Programming languages and type systems
domain-specific languages
0.112008
Programming modular robots with locally distributed predicates · ICRA 2008
Program verification › pointer program verification
heap reasoning
0.112008
THOR: A Tool for Reasoning about Shape and Arithmetic · CAV 2008
Program analysis › static analysis › pointer analysis
shape analysis
0.112008
THOR: A Tool for Reasoning about Shape and Arithmetic · CAV 2008
Program verification
static verification
0.122007
Enforcing resource bounds via static verification of dynamic checks · ACM Trans. Program. Lang. Syst. 2007
Safe Kernel Extensions Without Run-Time Checking · OSDI 1996
Program verification › program logic
hoare logic
0.112007
Enforcing resource bounds via static verification of dynamic checks · ACM Trans. Program. Lang. Syst. 2007
Program verification › quantitative verification
resource bound verification
0.112007
Enforcing resource bounds via static verification of dynamic checks · ACM Trans. Program. Lang. Syst. 2007
Program verification › quantitative verification
resource verification
0.112007
Enforcing resource bounds via static verification of dynamic checks · ACM Trans. Program. Lang. Syst. 2007
Distributed systems
distributed debugging
0.112007
Distributed Watchpoints: Debugging Large Multi-Robot Systems · ICRA 2007
Knowledge, reasoning and agents › Multi-agent systems
modular robotics
0.132008
Programming modular robots with locally distributed predicates · ICRA 2008
Distributed Watchpoints: Debugging Large Multi-Robot Systems · ICRA 2007
Scalable Shape Sculpting via Hole Motion: Motion Planning in Lattice-constrained Modular Robots · ICRA 2006
Robotics › Motion planning and robot control
motion planning
0.112006
Scalable Shape Sculpting via Hole Motion: Motion Planning in Lattice-constrained Modular Robots · ICRA 2006
Program verification › code-level verification
java verification
0.112005
JVer: A Java Verifier · CAV 2005
Compilers and program optimization
verified compilation
0.022000
A certifying compiler for Java · PLDI 2000
The Design and Implementation of a Certifying Compiler · PLDI 1998
Runtime systems and virtual machines › dynamic compilation
run-time code generation
0.021998
Run-time Code Generation and Modal-ML · PLDI 1998
Optimizing ML with Run-Time Code Generation · PLDI 1996
Compilers and program optimization
compiler correctness
0.012000
A certifying compiler for Java · PLDI 2000
Programming languages and type systems
type systems
0.012000
A Proof-Carrying Code Architecture for Java · CAV 2000
Program verification
dynamic verification
0.012007
Enforcing resource bounds via static verification of dynamic checks · ACM Trans. Program. Lang. Syst. 2007
Runtime systems and virtual machines
garbage collection
0.011998
Generational Stack Collection and Profile-Driven Pretenuring · PLDI 1998
Runtime systems and virtual machines › garbage collection
generational garbage collection
0.011998
Generational Stack Collection and Profile-Driven Pretenuring · PLDI 1998
Programming languages and type systems › type systems
modal type systems
0.011998
Run-time Code Generation and Modal-ML · PLDI 1998
Runtime systems and virtual machines › garbage collection
pretenuring
0.011998
Generational Stack Collection and Profile-Driven Pretenuring · PLDI 1998
Compilers and program optimization › program specialization
runtime specialization
0.011998
Run-time Code Generation and Modal-ML · PLDI 1998
Programming languages and type systems › type systems
type soundness
0.011998
The Design and Implementation of a Certifying Compiler · PLDI 1998
Logic in computer science › proof theory
logical frameworks
0.011998
Efficient Representation and Validation of Proofs · LICS 1998
Internet of things and sensor networks
wireless sensor network
0.012005
Claytronics: highly scalable communications, sensing, and actuation networks · SenSys 2005
Runtime systems and virtual machines › dynamic compilation
just-in-time compilation
0.011996
Optimizing ML with Run-Time Code Generation · PLDI 1996
Operating systems › extensible operating systems › kernel extensibility
kernel extensions
0.011996
Safe Kernel Extensions Without Run-Time Checking · OSDI 1996

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

speech recognition · 0.7natural language processing · 0.7reactive programming · 0.2locally distributed predicates · 0.2online monitoring · 0.1distributed predicate detection · 0.1abstract interpretation · 0.1modular robotics algorithms · 0.1proof checking · 0.1static analysis · 0.1linear inequalities · 0.1hoare logic · 0.1proof-carrying code · 0.1hole motion · 0.1distributed parallel algorithm · 0.1type inference · 0.0reconstruction algorithm · 0.0proof representation · 0.0
YearPublicationVenuePosition
2015 Coding by Everyone, Every Day
abstract
In recent years, advances in machine learning and related fields have led to significant advances in a range of user-interface technologies, including audio processing, speech recognition, and natural language processing. These advances in turn have enabled speech-based digital assistants and speech-to-speech translation systems to become practical to deploy on a large scale. In essence, machines are becoming capable of hearing what we are saying. But will they understand what we want them to do when we talk to them? What are the prospects for getting useful work done in essence, by synthesizing programs -- through the act of having a conversation with a computer? In this lecture, I will speculate on the central role that programming-language design and program synthesis may have in this possible -- and I will argue, likely -- future of computing, one in which every user writes programs, every day, by conversing with a computing system.
Peter Lee 0001
POPL1
2011 Detecting Locally Distributed Predicates
abstract
In this article, we formalize locally distributed predicates , a concept previously introduced to address specific challenges associated with modular robotics and distributed debugging. A locally distributed predicate (LDP) is a novel construction for representing and detecting distributed properties in sparse-topology systems. Our previous work on LDPs presented empirical validation; here we show a formal model for two variants of the LDP algorithm, LDP-Basic and LDP-Snapshot, and establish performance bounds for these variants. We prove that LDP-Basic can detect strong stable predicates, that LDP-Snapshot can detect all stable predicates, and discuss their applicability to various distributed programming domains and to spatial computing in general. LDP detection in bounded-degree networks is shown to be scale-free, making the approach particularly attractive for specific topologies, even though LDPs are less efficient than snapshot algorithms in general distributed systems.
Michael DeRosa, Seth Copen Goldstein, Peter Lee 0001, Jason Campbell, Padmanabhan Pillai
ACM Trans. Auton. Adapt. Syst.3
2010 Automatic numeric abstractions for heap-manipulating programs
abstract
We present a logic for relating heap-manipulating programs to numeric abstractions. These numeric abstractions are expressed as simple imperative programs over integer variables and have the property that termination and safety of the numeric program ensures termination and safety of the original, heap-manipulating program. We have implemented an automated version of this abstraction process and present experimental results for programs involving a variety of data structures.
Stephen Magill, Ming-Hsien Tsai 0001, Peter Lee 0001, Yih-Kuen Tsay
POPL3
2009 A Language for Large Ensembles of Independently Executing Nodes
Michael P. Ashley-Rollman, Peter Lee 0001, Seth Copen Goldstein, Padmanabhan Pillai, Jason Campbell
ICLP2
2009 A tale of two planners: Modular robotic planning with LDP
abstract
LDP (Locally Distributed Predicates) is a distributed, high-level language for programming modular reconfigurable robot systems (MRRs). In this paper we present the implementation of two motion-planning algorithms in LDP, and analyze both their performance and ease of implementation. We present multiple variations of one planner, including a novel resource allocation algorithm. We then draw conclusions about both the utility of the motion-planning algorithms and the suitability of LDP to the problem space. Our experiments suggest that metamodule-based planning approaches have a cost in time and/or energy terms, but that the cost can be worth paying in exchange for the additional generality and separation-of-concerns offered by these techniques. The particular tradeoff for a given system will depend upon its goals and the details of the underlying modules.
Michael DeRosa, Seth Copen Goldstein, Peter Lee 0001, Padmanabhan Pillai, Jason Campbell
IROS3
2008 THOR: A Tool for Reasoning about Shape and Arithmetic
Stephen Magill, Ming-Hsien Tsai 0001, Peter Lee 0001, Yih-Kuen Tsay
CAV3
2008 Programming modular robots with locally distributed predicates
abstract
We present a high-level language for programming modular robotic systems, based on locally distributed predicates (LDP), which are distributed conditions that hold for a connected subensemble of the robotic system. An LDP program is a collection of LDPs with associated actions which are triggered on any subensemble that matches the predicate. The result is a reactive programming language which efficiently and concisely supports ensemble-level programming. We demonstrate the utility of LDP by implementing three common, but diverse, modular robotic tasks.
Michael DeRosa, Seth Copen Goldstein, Peter Lee 0001, Padmanabhan Pillai, Jason Campbell
ICRA3
2007 Distributed Watchpoints: Debugging Large Multi-Robot Systems
abstract
Tightly-coupled multi-agent systems such as modular robots frequently exhibit properties of interest that span multiple modules. These properties cannot easily be detected from any single module, though they might readily be detected by combining the knowledge of multiple modules. Testing for distributed conditions is especially important in debugging or verifying the correctness of software for modular robots. We have developed a technique we call distributed watchpoint triggers which can efficiently recognize such distributed conditions. Our watchpoint description language can handle a variety of temporal, spatial, and logical properties spanning multiple robots. This paper presents that language, describes our fully-distributed, online mechanism for detecting distributed conditions in a running system, and evaluates the performance of our implementation. We found that the performance of the system is highly dependent on the program being debugged, scales linearly with ensemble size, and is small enough to make the system practical in all but the worst case scenarios
Michael DeRosa, Jason Campbell, Padmanabhan Pillai, Seth Copen Goldstein, Peter Lee 0001, Todd C. Mowry
ICRA5
2007 Meld: A declarative approach to programming ensembles
abstract
This paper presents Meld, a programming language for modular robots, i.e., for independently executing robots where inter-robot communication is limited to immediate neighbors. Meld is a declarative language, based on P2, a logicprogramming language originally designed for programming overlay networks. By using logic programming, the code for an ensemble of robots can be written from a global perspective, as opposed to a large collection of independent robot views. This greatly simplifies the thought process needed for programming large ensembles. Initial experience shows that this also leads to a considerable reduction in code size and complexity. An initial implementation of Meld has been completed and has been used to demonstrate its effectiveness in the Claytronics simulator. Early results indicate that Meld programs are considerably more concise (more than 20× shorter) than programs written in C++, while running nearly as efficiently.
Michael P. Ashley-Rollman, Seth Copen Goldstein, Peter Lee 0001, Todd C. Mowry, Padmanabhan Pillai
IROS3
2007 Model-Driven Construction of Certified Binaries
Sagar Chaki, James Ivers, Peter Lee 0001, Kurt C. Wallnau, Noam Zeilberger
MoDELS3
2007 Enforcing resource bounds via static verification of dynamic checks
abstract
We show how to limit a program's resource usage in an efficient way, using a novel combination of dynamic checks and static analysis. Usually, dynamic checking is inefficient due to the overhead of checks, while static analysis is difficult and rejects many safe programs. We propose a hybrid approach that solves these problems. We split each resource-consuming operation into two parts. The first is a dynamic check, called reserve. The second is the actual operation, called consume, which does not perform any dynamic checks. The programmer is then free to hoist and combine reserve operations. Combining reserve operations reduces their overhead, while hoisting reserve operations ensures that the program does not run out of resources at an inconvenient time. A static verifier ensures that the program reserves resources before it consumes them. This verification is both easier and more flexible than an a priori static verification of resource usage. We present a sound and efficient static verifier based on Hoare logic and linear inequalities. As an example, we present a version of tar written in Java.
Ajay Chander, David Espinosa, Nayeem Islam, Peter Lee 0001, George C. Necula
ACM Trans. Program. Lang. Syst.4
2006 Scalable Shape Sculpting via Hole Motion: Motion Planning in Lattice-constrained Modular Robots
abstract
We describe a novel shape formation algorithm for ensembles of 2-dimensional lattice-arrayed modular robots, based on the manipulation of regularly shaped voids within the lattice ("holes"). The algorithm is massively parallel and fully distributed. Constructing a goal shape requires time proportional only to the complexity of the desired target geometry. Construction of the shape by the modules requires no global communication nor broadcast floods after distribution of the target shape. Results in simulation show 97.3% shape compliance in ensembles of approximately 60,000 modules, and we believe that the algorithm will generalize to 3D and scale to handle millions of modules
Michael DeRosa, Seth Copen Goldstein, Peter Lee 0001, Jason Campbell, Padmanabhan Pillai
ICRA3
2005 JVer: A Java Verifier
Ajay Chander, David Espinosa, Nayeem Islam, Peter Lee 0001, George C. Necula
CAV4
2005 Enforcing Resource Bounds via Static Verification of Dynamic Checks
Ajay Chander, David Espinosa, Nayeem Islam, Peter Lee 0001, George C. Necula
ESOP4
2005 Claytronics: highly scalable communications, sensing, and actuation networks
abstract
We propose a demonstration of extremely scalable modular robotics algorithms developed as part of the Claytronics Project (http://www-2.cs.cmu.edu/~claytronics/), as well as a demonstration of proof-of-concept prototypes. Our effort envisions multi-million-module robot ensembles able to morph into three-dimensional scenes, eventually with sufficient fidelity so as to convince a human observer the scenes are real. Although this work is potentially revolutionary in the sense that it holds out the possibility of radically altering the relationship between computation, humans, and the physical world, many of the research questions involved are similar in flavor to more mainstream systems research, albeit larger in scale. For instance, as in sensor networks, each robot will incorporate sensing, computation, and communications components. However, unlike most sensor networks each robot will also include mechanisms for actuation and motion. Many of the key challenges in this project involve coordination and communication of sensing and actuation across such large ensembles of independent units.
Burak Aksak, Preethi Srinivas Bhat, Jason Campbell, Michael DeRosa, Stanislav Funiak, Phillip B. Gibbons, Seth Copen Goldstein, Carlos Guestrin, Ashish Gupta 0003, Casey Helfrich, James F. Hoburg, Brian T. Kirby, James J. Kuffner, Peter Lee 0001, Todd C. Mowry, Padmanabhan Pillai, Ram Ravichandran, Benjamin D. Rister, Srinivasan Seshan, Metin Sitti
SenSys14
2003 What Are We Trying to Prove? Reflections on Experiences with Proof-Carrying Code
Peter Lee 0001
TACAS1
2003 Automated techniques for provably safe mobile code
Christopher Colby, Karl Crary, Robert Harper 0001, Peter Lee 0001, Frank Pfenning
Theor. Comput. Sci.4
2002 Temporal Logic for Proof-Carrying Code
Andrew Bernard, Peter Lee 0001
CADE2
2000 Proof Generation in the Touchstone Theorem Prover
George C. Necula, Peter Lee 0001
CADE2
2000 A Proof-Carrying Code Architecture for Java
Christopher Colby, Peter Lee 0001, George C. Necula
CAV2
2000 A certifying compiler for Java
abstract
This paper presents the initial results of a project to determine if the techniques of proof-carrying code and certifying compilers can be applied to programming languages of realistic size and complexity. The experiment shows that: (1) it is possible to implement a certifying native-code compiler for a large subset of the Java programming language; (2) the compiler is freely able to apply many standard local and global optimizations; and (3) the PCC binaries it produces are of reasonable size and can be rapidly checked for type safety by a small proof-checker. This paper also presents further evidence that PCC provides several advantages for compiler development. In particular, generating proofs of the target code helps to identify compiler bugs, many of which would have been dicult to discover by testing.
Christopher Colby, Peter Lee 0001, George C. Necula, Fred Blau, Mark Plesko, Kenneth Cline
PLDI2
1998 Efficient Representation and Validation of Proofs
abstract
This paper presents a logical framework derived from the Edinburgh Logical Framework (LF) that can be used to obtain compact representations of proofs and efficient proof checkers. These are essential ingredients of any application that manipulates proofs as first-class objects, such as a Proof-Carrying Code system, in which proofs are used to support easy validation of properties of safety-critical or untrusted code. Our framework, which we call LF/sub i/, inherits from LF the capability to encode various logics in a natural way. In addition, the LF/sub i/ framework allows proof representations without the high degree of redundancy that is characteristic of LF representations. The missing parts of LF/sub i/ proof representations can be reconstructed during proof checking by an efficient reconstruction algorithm. We also describe an algorithm that can be used to strip the unnecessary parts of an LF representation of a proof. The experimental data that we gathered in the context of a Proof-Carrying Code system shows that the savings obtained from using LF/sub i/ instead of LF can make the difference between practically useless proofs of several megabytes and manageable proofs of tens of kilobytes.
George C. Necula, Peter Lee 0001
LICS2
1998 Generational Stack Collection and Profile-Driven Pretenuring
abstract
This paper presents two techniques for improving garbage collection performance: generational stack collection and profile-driven pretenuring. The first is applicable to stack-based implementations of functional languages while the second is useful for any generational collector. We have implemented both techniques in a generational collector used by the TIL compiler (Tarditi, Morrisett, Cheng, Stone, Harper, and Lee 1996), and have observed decreases in garbage collection times of as much as 70% and 30%, respectively.Functional languages encourage the use of recursion which can lead to a long chain of activation records. When a collection occurs, these activation records must be scanned for roots. We show that scanning many activation records can take so long as to become the dominant cost of garbage collection. However, most deep stacks unwind very infrequently, so most of the root information obtained from the stack remains unchanged across successive garbage collections. Generational stack collection greatly reduces the stack scan cost by reusing information from previous scans.Generational techniques have been successful in reducing the cost of garbage collection (Ungar 1984). Various complex heap arrangements and tenuring policies have been proposed to increase the effectiveness of generational techniques by reducing the cost and frequency of scanning and copying. In contrast, we show that by using profile information to make lifetime predictions, pretenuring can avoid copying data altogether. In essence, this technique uses a refinement of the generational hypothesis (most data die young) with a locality principle concerning the age of data: most allocations sites produce data that immediately dies, while a few allocation sites consistently produce data that survives many collections.
Perry Cheng, Robert Harper 0001, Peter Lee 0001
PLDI3
1998 The Design and Implementation of a Certifying Compiler
abstract
This paper presents the design and implementation of a compiler that translates programs written in a type-safe subset of the C programming language into highly optimized DEC Alpha assembly language programs, and a certifier that automatically checks the type safety and memory safety of any assembly language program produced by the compiler. The result of the certifier is either a formal proof of type safety or a counterexample pointing to a potential violation of the type system by the target program. The ensemble of the compiler and the certifier is called a certifying compiler.Several advantages of certifying compilation over previous approaches can be claimed. The notion of a certifying compiler is significantly easier to employ than a formal compiler verification, in part because it is generally easier to verify the correctness of the result of a computation than to prove the correctness of the computation itself. Also, the approach can be applied even to highly optimizing compilers, as demonstrated by the fact that our compiler generates target code, for a range of realistic C programs, which is competitive with both the cc and gcc compilers with all optimizations enabled. The certifier also drastically improves the effectiveness of compiler testing because, for each test case, it statically signals compilation errors that might otherwise require many executions to detect. Finally, this approach is a practical way to produce the safety proofs for a Proof-Carrying Code system, and thus may be useful in a system for safe mobile code.
George C. Necula, Peter Lee 0001
PLDI2
1998 Run-time Code Generation and Modal-ML
abstract
This paper presents a typed programming language and compiler for run-time code generation. The language, called ML', extends ML with modal operators in the style of the Mini-ML'e language of Davies and Pfenning. ML' allows programmers to use types to specify precisely the stages of computation in a program. The types also guide the compiler in generating target code that exploits the staging information through the use of run-time code generation. The target machine is currently a version of the Categorical Abstract Machine, called the CCAM, which we have extended with facilities for run-time code generation.This approach allows the programmer to express the staging that he wants directly to the compiler. It also provides a typed framework in which to verify the correctness of his staging intentions, and to discuss his staging decisions with other programmers. Finally, it supports in a natural way multiple stages of run-time specialization, so that dynamically generated code can be used in the generation of yet further specialized code.This paper presents an overview of the language, with several examples of programs that illustrate key concepts and programming techniques. Then, it discusses the CCAM and the compilation of ML' programs into CCAM code. Finally, the results of some experiments are shown, to demonstrate the benefits of this style of run-time code generation for some applications.
Philip Wickline, Peter Lee 0001, Frank Pfenning
PLDI2
1998 Certifying, Optimizing Compilation (Abstract)
Peter Lee 0001
SAS1
1997 Research on Proof-Carrying Code for Untrusted-Code Security
abstract
A powerful method of interaction between two software systems is through mobile code. By allowing code to be installed dynamically and then executed, a host system can provide a flexible means of access to its internal resources and services. There are many problems to be solved before such uses of untrusted code can become practical. We focus on the problem of how to establish guarantees about the intrinsic behavior of untrusted programs. Of particular interest are the following: (1) How can the host system ensure that the untrusted code will not damage it, for example, by corrupting internal data structures? (2) How can the host ensure that the untrusted code will not use too many resources (such as CPU, memory, and so forth) or use them for too long a time period? (3) How can the host make these assurances without undue effort and deleterious effect on overall system performance? Our position is that the theory of programming languages, including formal semantics, type theory, and applications of logic, are critical to solving the untrusted code security problem. To illustrate the possibilities of programming language theory, we briefly describe one rather extreme but promising example, which is proof carrying code (PCC). This is a technique by which the host establishes a set of safety rules that guarantee safe behavior of programs, and the code producer creates a formal safety proof that proves, for the untrusted code, adherence to the safety rules. Then, the host is able to use a simple and fast proof validator to check, with certainty, that the proof is valid and hence the foreign code is safe to execute.
George C. Necula, Peter Lee 0001
S&P2
1996 Safe Kernel Extensions Without Run-Time Checking
abstract
No abstract available.
George C. Necula, Peter Lee 0001
OSDI2
1996 Optimizing ML with Run-Time Code Generation
abstract
We describe the design and implementation of a compiler that automatically translates ordinary programs written in a subset of ML into code that generates native code at run time. Run-time code generation can make use of values and invariants that cannot be exploited at compile time, yielding code that is often superior to statically optimal code. But the cost of optimizing and generating code at run time can be prohibitive. We demonstrate how compile-time specialization can reduce the cost of run-time code generation by an order of magnitude without greatly affecting code quality. Several benchmark programs are examined, which exhibit an average cost of only six cycles per instruction generated at run time.
Peter Lee 0001, Mark Leone
PLDI1
1996 TIL: A Type-Directed Optimizing Compiler for ML
abstract
article Free Access Share on TIL: a type-directed optimizing compiler for ML Authors: D. Tarditi School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PA School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PAView Profile , G. Morrisett School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PA School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PAView Profile , P. Cheng School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PA School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PAView Profile , C. Stone School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PA School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PAView Profile , R. Harper School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PA School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PAView Profile , P. Lee School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PA School of Computer Science, Carnegie Mellon University, 5000 Forbes Avenue, Pittsburgh, PAView Profile Authors Info & Claims ACM SIGPLAN NoticesVolume 31Issue 5May 1996 pp 181–192https://doi.org/10.1145/249069.231414Online:01 May 1996Publication History 212citation719DownloadsMetricsTotal Citations212Total Downloads719Last 12 Months39Last 6 weeks2 Get Citation AlertsNew Citation Alert added!This alert has been successfully added and will be sent to:You will be notified whenever a record that you have chosen has been cited.To manage your alert preferences, click on the button below.Manage my AlertsNew Citation Alert!Please log in to your account Save to BinderSave to BinderCreate a New BinderNameCancelCreateExport CitationPublisher SiteeReaderPDF
David Tarditi, J. Gregory Morrisett, Perry Cheng, Christopher A. Stone, Robert Harper 0001, Peter Lee 0001
PLDI6
1996 Trace-Based Program Analysis
abstract
We present trace-based program analysis, a semantics-based framework for statically analyzing and transforming programs with loops, assignments, and nested record structures. Trace-based analyses are based on transfer transition systems, which define the small-step operational semantics of programming languages. Intuitively, transfer transition systems provide direct support for reasoning about the possible execution traces of a program, instead of just individual program states. The traces in a transfer transition system have many uses, including the finite representation of all possible terminating executions of a loop. Also, traces may be systematically "pieced together," thus allowing the composition of separately analyzed program fragments. The utility of the approach is demonstrated by showing three applications: software pipelining, loop-invariant removal, and data alias detection. 1 Introduction In this paper, we consider semantics-based program analysis for the purposes of s...
Christopher Colby, Peter Lee 0001
POPL2
1996 Benchmarking Implementations of Functional Languages with 'Pseudoknot', a Float-Intensive Benchmark
abstract
Abstract Over 25 implementations of different functional languages are benchmarked using the same program, a floating-point intensive application taken from molecular biology. The principal aspects studied are compile time and execution time for the various implementations that were benchmarked. An important consideration is how the program can be modified and tuned to obtain maximal performance on each language implementation. With few exceptions, the compilers take a significant amount of time to compile this program, though most compilers were faster than the then current GNU C compiler (GCC version 2.5.8). Compilers that generate C or Lisp are often slower than those that generate native code directly: the cost of compiling the intermediate form is normally a large fraction of the total compilation time. There is no clear distinction between the runtime performance of eager and lazy implementations when appropriate annotations are used: lazy implementations have clearly come of age when it comes to implementing largely strict applications, such as the Pseudoknot program. The speed of C can be approached by some implementations, but to achieve this performance, special measures such as strictness annotations are required by non-strict implementations. The benchmark results have to be interpreted with care. Firstly, a benchmark based on a single program cannot cover a wide spectrum of ‘typical’ applications. Secondly, the compilers vary in the kind and level of optimisations offered, so the effort required to obtain an optimal version of the program is similarly varied.
Pieter H. Hartel, Marc Feeley, Martin Helmut Alt, Lennart Augustsson, Marcel Beemster, Emmanuel Chailloux, Christine H. Flood, Wolfgang Grieskamp, John H. G. van Groningen, Kevin Hammond, Bogumil Hausman, Melody Y. Ivory, Richard E. Jones, Jasper Kamperman, Peter Lee 0001, Xavier Leroy, Rafael Dueire Lins, Sandra Loosemore, Niklas Röjemo, Manuel Serrano, Jean-Pierre Talpin, Jon Thackray, Pum Walters, Pierre Weis, Peter Wentworth
J. Funct. Program.16
1994 Lightweight Run-Time Code Generation
Mark Leone, Peter Lee 0001
PEPM2
1992 Cache Behavior of Combinator Graph Reduction
abstract
The results of cache-simulation experiments with an abstract machine for reducing combinator graphs are presented. The abstract machine, called TIGRE, exhibits reduction rates that, for similar kinds of combinator graphs on similar kinds of hardware, compare favorably with previously reported techniques. Furthermore, TIGRE maps easily and efficiently onto standard computer architectures, particularly those that allow a restricted form of self-modifying code. This provides some indication that the conventional "stored program" organization of computer systems is not necessarily an inappropriate one for functional programming language implementations. This is not to say, however, that present day computer systems are well equipped to reduce combinator graphs. In particular, the behavior of the cache memory has a significant effect on performance. In order to study and quantify this effect, trace-driven cache simulations of a TIGRE graph reducer running on a reduced instruction-set computer are conducted. The results of these simulations are presented with the following hardware-cache parameters varied: cache size, block size, associativity, memory update policy, and write-allocation policy. To begin with, the cache organization of a commercially available system is used and then the performance sensitivity with respect to variations of each parameter are measured. From the results of the simulation study, a conclusion is made that combinator-graph reduction using TIGRE runs most efficiently when using a cache memory with an allocate-on-write-miss strategy, moderately large block size (preferably with subblock placement), and copy-back memory updates.
Philip Koopman, Peter Lee 0001, Daniel P. Siewiorek
ACM Trans. Program. Lang. Syst.2
1991 Metacircularity in the Polymorphic lambda-Calculus
Frank Pfenning, Peter Lee 0001
Theor. Comput. Sci.2
1989 A Fresh Look at Combinator Graph Reduction
abstract
We present a new abstract machine for graph reduction called TIGRE. Benchmark results show that TIGRE's execution speed compares quite favorably with previous combinator-graph reduction techniques on similar hardware. Furthermore, the mapping of TIGRE onto conventional hardware is simple and efficient. Mainframe implementations of TIGRE provide performance levels exceeding those previously available on custom graph reduction hardware.
Philip Koopman, Peter Lee 0001
PLDI2
1988 An Automatically Generated, Realistic Compiler for an Imperative Programming Language
abstract
We describe the automatic generation of a complete, realistic compiler from formal specifications of the syntax and semantics of Sol/C, a nontrivial imperative language “sort of like C.” The compiler exhibits a three pass structure, is efficient, and produces object programs whose performance characteristics compare favorably with those produced by commercially available compilers. To our knowledge, this is the first time that this has been accomplished.
Uwe F. Pleban, Peter Lee 0001
PLDI2
1987 A Realistic Compiler Generator Based on High-Level Semantics
abstract
We have developed a new style of semantic definition called high-level semantics. In constrast to traditional denotational semantics, high-level semantics is suitable for both defining the functional meaning of programming languages, as well as describing realistic compiler implementations. Moreover, high-level specifications are considerably more descriptive and intelligible than traditional specifications.
Peter Lee 0001, Uwe F. Pleban
POPL1