An empirical study of list structure in Lisp
Communications of the ACM
List processing in real time on a serial computer
Communications of the ACM
Shifting garbage collection overhead to compile time
Communications of the ACM
A general scheme for the automatic inference of variable types
POPL '78 Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory
Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory
A Theory of Programming Language Semantics
A Theory of Programming Language Semantics
Automatic synthesis of optimal invariant assertions: Mathematical foundations
Proceedings of the 1977 symposium on Artificial intelligence and programming languages
Static determination of dynamic properties of generalized type unions
Proceedings of an ACM conference on Language design for reliable software
POPL '76 Proceedings of the 3rd ACM SIGACT-SIGPLAN symposium on Principles on programming languages
The Mathematical Theory of Context-Free Languages
The Mathematical Theory of Context-Free Languages
Towards dataflow analysis of communicating finite state machines
Proceedings of the eighth annual ACM Symposium on Principles of distributed computing
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
A finite presentation theorem for approximating logic programs
POPL '90 Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Data flow analysis of communicating finite state machines
ACM Transactions on Programming Languages and Systems (TOPLAS)
Soft typing with conditional types
POPL '94 Proceedings of the 21st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Set-based analysis of ML programs
LFP '94 Proceedings of the 1994 ACM conference on LISP and functional programming
A unified treatment of flow analysis in higher-order languages
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Formal language, grammar and set-constraint-based program analysis by abstract interpretation
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
PLDI '96 Proceedings of the ACM SIGPLAN 1996 conference on Programming language design and implementation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A demand-driven set-based analysis
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Data flow analysis is model checking of abstract interpretations
POPL '98 Proceedings of the 25th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Polymorphic splitting: an effective polyvariant flow analysis
ACM Transactions on Programming Languages and Systems (TOPLAS)
Partial online cycle elimination in inclusion constraint graphs
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Trace-Based Abstract Interpretation of Operational Semantics
Lisp and Symbolic Computation
Projection merging: reducing redundancies in inclusion constraint graphs
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Paths vs. trees in set-based program analysis
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Towards automatic construction of staged compilers
POPL '02 Proceedings of the 29th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Interprocedural Def-Use Associations for C Systems with Single Level Pointers
IEEE Transactions on Software Engineering
Set-Based Failure Analysis for Logic Programs and Concurrent Constraint Programs
ESOP '99 Proceedings of the 8th European Symposium on Programming Languages and Systems
Improving the Representation of Infinite Trees to Deal with Sets of Trees
ESOP '00 Proceedings of the 9th European Symposium on Programming Languages and Systems
Modal Transition Systems: A Foundation for Three-Valued Program Analysis
ESOP '01 Proceedings of the 10th European Symposium on Programming Languages and Systems
Entailment with Conditional Equality Constraints
ESOP '01 Proceedings of the 10th European Symposium on Programming Languages and Systems
Dead Code Elimination through Dependent Types
PADL '99 Proceedings of the First International Workshop on Practical Aspects of Declarative Languages
Eliminating Dead Code on Recursive Data
SAS '99 Proceedings of the 6th International Symposium on Static Analysis
An incremental unique representation for regular trees
Nordic Journal of Computing
Eliminating dead code on recursive data
Science of Computer Programming - Special issue on static analysis (SAS'99)
Set constraints with intersection
Information and Computation - Special issue: LICS'97
A semantic comparison of LISP and SCHEME
LFP '80 Proceedings of the 1980 ACM conference on LISP and functional programming
The essence of computation
Software validation via scalable path-sensitive value flow analysis
ISSTA '04 Proceedings of the 2004 ACM SIGSOFT international symposium on Software testing and analysis
A domain equation for refinement of partial systems
Mathematical Structures in Computer Science
Flow analysis of lazy higher-order functional programs
Theoretical Computer Science
Heap analysis in the presence of collection libraries
PASTE '07 Proceedings of the 7th ACM SIGPLAN-SIGSOFT workshop on Program analysis for software tools and engineering
The trace partitioning abstract domain
ACM Transactions on Programming Languages and Systems (TOPLAS) - Special Issue ESOP'05
Heap reference analysis using access graphs
ACM Transactions on Programming Languages and Systems (TOPLAS)
Iteration Disambiguation for Parallelism Identification in Time-Sliced Applications
Languages and Compilers for Parallel Computing
Electronic Notes in Theoretical Computer Science (ENTCS)
Abstract Interpretation From a Denotational-semantics Perspective
Electronic Notes in Theoretical Computer Science (ENTCS)
Electronic Notes in Theoretical Computer Science (ENTCS)
A static heap analysis for shape and connectivity: unified memory analysis: the base framework
LCPC'06 Proceedings of the 19th international conference on Languages and compilers for parallel computing
A practical escape and effect analysis for building lightweight method summaries
CC'07 Proceedings of the 16th international conference on Compiler construction
Maintaining doubly-linked list invariants in shape analysis with local reasoning
VMCAI'07 Proceedings of the 8th international conference on Verification, model checking, and abstract interpretation
Recency types for analyzing scripting languages
ECOOP'10 Proceedings of the 24th European conference on Object-oriented programming
Offline GC: trashing reachable objects on tiny devices
Proceedings of the 9th ACM Conference on Embedded Networked Sensor Systems
Fluid updates: beyond strong vs. weak updates
ESOP'10 Proceedings of the 19th European conference on Programming Languages and Systems
Inverse-limit and topological aspects of abstract interpretation
Theoretical Computer Science
Control-flow analysis of functional programs
ACM Computing Surveys (CSUR)
Efficient and formal generalized symbolic execution
Automated Software Engineering
Precise shape analysis using field sensitivity
Proceedings of the 27th Annual ACM Symposium on Applied Computing
Programming paradigm driven heap analysis
CC'12 Proceedings of the 21st international conference on Compiler Construction
Precise shape analysis using field sensitivity
Innovations in Systems and Software Engineering
Shape analysis in a functional language by using regular languages
Proceedings of the 15th Symposium on Principles and Practice of Declarative Programming
Hi-index | 0.00 |
In [12] the authors introduced the concept of binding time optimization and presented a series of data flow analytic methods for determining some of the binding time characteristics of programs. In this paper we extend that work by providing methods for determining the class of shapes which an unbounded data object may assume during execution of a LISP-like program, and describe a number of uses to which that information may be put to improve storage allocation in compilers and interpreters for advanced programming languages.We are concerned chiefly with finding, for each program point and variable a finite description of a set of graphs which includes all the shapes of values the variable could assume at that point during the execution of a program. If this set is small or regular in structure, this information can be used to optimize the program's execution, mainly by use of more efficient storage allocation schemes.In the first part we show how to construct from a program without selective updating a tree grammar whose nonterminals generate the desired sets of graphs; in this case they will all be trees. The tree grammars are of a more general form than is usually studied [8, 19], so we show that they may be converted to the usual form. The resulting tree grammar could naturally be viewed as a recursive type definition [11] of the values the variables may assume. Further, standard algorithms may be employed to test for infiniteness, emptiness or linearity of the tree structure.In the second part selective updating is allowed, so an alternate semantics is introduced which more closely resembles traditional LISP implementations, and which is equivalent to the tree model for programs without selective updating. In this model data objects are directed graphs. We devise a finite approximation method which provides enough information to detect cell sharing and cyclic structures whenever they can possibly occur. This information can be used to recognize when the use of garbage collection or of reference counts may be avoided.The work reported in the second part of this paper extends that of Schwartz [17] and Cousot and Cousot [7]. They have developed methods for determining whether the values of two or more variables share cells, while we provide information on the detailed structure of what is shared. The ability to detect cycles is also new. It also extends the work of Kaplan [13], who distinguishes only binary relations among the variables of a program, does not handle cycles, and does not distinguish selectors (so that his analysis applies to nodes representing sets rather than ordered tuples).