Eliminating Redundant Recursive Calls.
ACM Transactions on Programming Languages and Systems (TOPLAS)
The analysis of algorithms
From function level semantics to program transformation and optimization
Proc. of the international joint conference on theory and practice of software development (TAPSOFT) Berlin, March 25-29, 1985 on Mathematical foundations of software development, Vol. 1: Colloquium on trees in algebra and programming (CAAP'85)
Linearisation: an optimisation for nonlinear functional programs
Science of Computer Programming
Program derivation by fixed point computation
Science of Computer Programming
Specification and transformation of programs: a formal approach to software development
Specification and transformation of programs: a formal approach to software development
Introduction to algorithms
Compile-time garbage collection by sharing analysis
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
KIDS: A Semiautomatic Program Development System
IEEE Transactions on Software Engineering
Automatic transformation of series expressions into loops
ACM Transactions on Programming Languages and Systems (TOPLAS)
Essentials of programming languages
Essentials of programming languages
A new approach to recursion removal
Theoretical Computer Science
A practical algorithm for exact array dependence analysis
Communications of the ACM
On the synthesis of function inverses
Acta Informatica
Improving recursive functions by inverting the order of evaluation
Science of Computer Programming
Lisp and Symbolic Computation
Systematic derivation of incremental programs
Science of Computer Programming
Rules and strategies for transforming functional and logic programs
ACM Computing Surveys (CSUR)
Discovering auxiliary information for incremental computation
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the IFIP TC 2 WG 2.1 international workshop on Algorithmic languages and calculi
Modern compiler implementation in Java
Modern compiler implementation in Java
Programming with variable functions
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Static caching for incremental computation
ACM Transactions on Programming Languages and Systems (TOPLAS)
A semantic model of reference counting and its abstraction (detailed summary)
LFP '86 Proceedings of the 1986 ACM conference on LISP and functional programming
A Transformation System for Developing Recursive Programs
Journal of the ACM (JACM)
Continuation-Based Program Transformation Strategies
Journal of the ACM (JACM)
Some Techniques for Recursion Removal from Recursive Functions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Finite Differencing of Computable Expressions
ACM Transactions on Programming Languages and Systems (TOPLAS)
Communications of the ACM
An efficient machine-independent procedure for garbage collection in various list structures
Communications of the ACM
Theory of Program Structures: Schemes, Semantics, Verification
Theory of Program Structures: Schemes, Semantics, Verification
Program improvement by internal specialization
POPL '81 Proceedings of the 8th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Algorithmic Language and Program Development
Algorithmic Language and Program Development
The Design and Analysis of Computer Algorithms
The Design and Analysis of Computer Algorithms
Revised Report on the Algorithmic Language Scheme
Higher-Order and Symbolic Computation
Recursion Versus Iteration at Higher-Orders
Proceedings of the 17th Conference on Foundations of Software Technology and Theoretical Computer Science
KBSE '95 Proceedings of The 10th Knowledge-Based Software Engineering Conference
A powerful strategy for deriving efficient programs by transformation
LFP '84 Proceedings of the 1984 ACM Symposium on LISP and functional programming
Transformations of FP program schemes
FPCA '81 Proceedings of the 1981 conference on Functional programming languages and computer architecture
Set Constraints for Destructive Array Update Optimization
ICCL '98 Proceedings of the 1998 International Conference on Computer Languages
The expressive power of higher-order types or, life without CONS
Journal of Functional Programming
Program optimization using indexed and recursive data structures
PEPM '02 Proceedings of the 2002 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Proceedings of the seventh ACM SIGPLAN international conference on Functional programming
Dynamic Programming via Static Incrementalization
Higher-Order and Symbolic Computation
Computational Divided Differencing and Divided-Difference Arithmetics
Higher-Order and Symbolic Computation
Optimizing Ackermann's function by incrementalization
Proceedings of the 2003 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation
Program transformation by solving recurrences
Proceedings of the 2006 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
A monadic approach for avoiding code duplication when staging memoized functions
Proceedings of the 2006 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Challenges in exploitation of loop parallelism in embedded applications
CODES+ISSS '06 Proceedings of the 4th international conference on Hardware/software codesign and system synthesis
Recursive function data allocation to scratch-pad memory
CASES '07 Proceedings of the 2007 international conference on Compilers, architecture, and synthesis for embedded systems
Proceedings of the 18th ACM Great Lakes symposium on VLSI
On the exploitation of loop-level parallelism in embedded applications
ACM Transactions on Embedded Computing Systems (TECS)
Optimizing the stack size of recursive functions
Computer Languages, Systems and Structures
An automatic parallelization framework for OpenAxiom
ACM Communications in Computer Algebra
Program parallelization using synchronized pipelining
LOPSTR'09 Proceedings of the 19th international conference on Logic-Based Program Synthesis and Transformation
JuliusC: a practical approach for the analysis of divide-and-conquer algorithms
LCPC'04 Proceedings of the 17th international conference on Languages and Compilers for High Performance Computing
Input-covering schedules for multithreaded programs
Proceedings of the 2013 ACM SIGPLAN international conference on Object oriented programming systems languages & applications
Hi-index | 0.00 |
Transforming recursion into iteration eliminates the use of stack frames during program execution. It has been studied extensively. This paper describes a powerful and systematic method, based on incrementalization, for transforming general recursion into iteration: identify an input increment, derive an incremental version under the input increment, and form an iterative computation using the incremental version. Exploiting incrementalization yields iterative computation in a uniform way and also allows additional optimizations to be explored cleanly and applied systematically, in most cases yielding iterative programs that use constant additional space, reducing additional space usage asymptotically, and run much faster. We summarize major optimizations, complexity improvements, and performance measurements.