Determining Storage Properties of Sequential and Concurrent Programs with Assignment and Structured Data

Determination of storage properties (e.g., aliasing, def-use chains, liveness, etc.) is one of the primary concerns in the implementation of any programming language. We present a new semantic framework and analysis based on operational traces that subsumes and improves upon most existing work in this area and handles concurrency, higher-order functions, first-class continuations, assignment, and recursive structured data. The analysis determines a storage relation: b\(\mathop \rightsquigarrow \limits^{a} \)a:x.w means that in any evaluation segment starting from program point a, the single unit of data allocated at point b is referenced by subcomponent w of variable x after evaluation proceeds through control path a, where b is either a control path representing the point of an allocation that occurred after point a, or a symbolic term x′.w′ representing an allocation before point a and referenced by component w′ of variable x′ at a. This relation can relate recursive control structure (including process spawns) and recursive data structure, and is suitable for analysis of arbitrary code or evaluation-trace fragments.

[1]  Philippe Granger,et al.  Static Analysis of Linear Congruence Equalities among Variables of a Program , 1991, TAPSOFT, Vol.1.

[2]  Philip Wadler,et al.  Is there a use for linear logic? , 1991, PEPM '91.

[3]  John C. Reynolds,et al.  Syntactic Control of Inference, Part 2 , 1989, ICALP.

[4]  Neil D. Jones,et al.  Flow analysis and optimization of LISP-like structures , 1979, POPL.

[5]  J A Fisher,et al.  Instruction-Level Parallel Processing , 1991, Science.

[6]  Alan Mycroft,et al.  Abstract interpretation and optimising transformations for applicative programs , 1982 .

[7]  Christopher Colby Analyzing the communication topology of concurrent programs , 1995, PEPM '95.

[8]  Thomas P. Murtagh,et al.  Lifetime analysis of dynamically allocated objects , 1988, POPL '88.

[9]  Martin Odersky Observers for Linear Types , 1992, ESOP.

[10]  K. Gopinath,et al.  Copy elimination in functional languages , 1989, POPL '89.

[11]  Nicolas Halbwachs,et al.  Automatic discovery of linear restraints among variables of a program , 1978, POPL.

[12]  Matthias Felleisen,et al.  Abstract models of memory management , 1995, FPCA '95.

[13]  Philippe Granger,et al.  Analyses semantiques de congruence , 1991 .

[14]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[15]  Alfred V. Aho,et al.  Compilers: Principles, Techniques, and Tools , 1986, Addison-Wesley series in computer science / World student series edition.

[16]  Arthur J. Bernstein,et al.  Analysis of Programs for Parallel Processing , 1966, IEEE Trans. Electron. Comput..

[17]  David W. Wall,et al.  Limits of instruction-level parallelism , 1991, ASPLOS IV.

[18]  Neil D. Jones,et al.  Program Flow Analysis: Theory and Application , 1981 .

[19]  Peter Sestoft,et al.  Replacing function parameters by global variables , 1989, FPCA.

[20]  Daniel Le Métayer,et al.  Computer-Time Garbage Collection by Sharing Analysis , 1989, FPCA.

[21]  Adrienne G. Bloss Update analysis and the efficient implementation of functional aggregates , 1989, FPCA.

[22]  Patrick Cousot,et al.  Abstract Interpretation Frameworks , 1992, J. Log. Comput..

[23]  Neil D. Jones,et al.  Program flow analysis - theory and applications , 1981, Prentice Hall software series.