Results 1  10
of
14
A survey and classification of some program transformation approaches and techniques
 Program Specification and Tranformation
, 1987
"... ..."
Deriving incremental programs
, 1993
"... A systematic approach i s g i v en for deriving incremental programs from nonincremental programs written in a standard functional programming language. We exploit a number of program analysis and transformation techniques and domainspeci c knowledge, centered around e ective utilization of cachin ..."
Abstract

Cited by 39 (21 self)
 Add to MetaCart
(Show Context)
A systematic approach i s g i v en for deriving incremental programs from nonincremental programs written in a standard functional programming language. We exploit a number of program analysis and transformation techniques and domainspeci c knowledge, centered around e ective utilization of caching, in order to provide a degree of incrementality not otherwise achievable by a generic incremental evaluator. 1
Realtime simulation of a set machine on a RAM
 In Computing and Information, Vol. II
, 1989
"... ..."
(Show Context)
Mechanical Translation of Set Theoretic Problem Specifications Into Efficient RAM Code  A Case Study
 Proc. EUROCAL 85
, 1985
"... This paper illustrates a fully automatic topdown approach to program development in which formal problem specifications are mechanically translated into efficient RAM code. This code is guaranteed to be totally correct and an upper bound on its worst case asymptotic running time is automatically de ..."
Abstract

Cited by 27 (8 self)
 Add to MetaCart
This paper illustrates a fully automatic topdown approach to program development in which formal problem specifications are mechanically translated into efficient RAM code. This code is guaranteed to be totally correct and an upper bound on its worst case asymptotic running time is automatically determined. The user is only required to supply the system with a formal problem specification, and is relieved of all responsibilities in the rest of the program development process. These results are obtained, in part, by greatly restricting the system to handle a class of determinate, set theoretic, tractable problems. The most essential transformational techniques that are used are fixed point iteration, finite differencing, and data structure selection. Rudimentary forms of these techniques have been implemented and used effectively in the RAPTS transformational programming system. This paper explains the conceptual underpinnings of our approach by considering the problem of attribute closure for relational databases and systematically deriving a program that implements a linear time solution. 1.
Lazy Strength Reduction
 Journal of Programming Languages
"... We present a bitvector algorithm that uniformly combines code motion and strength reduction, avoids superfluous register pressure due to unnecessary code motion, and is as efficient as standard unidirectional analyses. The point of this algorithm is to combine the concept of lazy code motion of [1] ..."
Abstract

Cited by 22 (8 self)
 Add to MetaCart
(Show Context)
We present a bitvector algorithm that uniformly combines code motion and strength reduction, avoids superfluous register pressure due to unnecessary code motion, and is as efficient as standard unidirectional analyses. The point of this algorithm is to combine the concept of lazy code motion of [1] with the concept of unifying code motion and strength reduction of [2, 3, 4, 5]. This results in an algorithm for lazy strength reduction, which consists of a sequence of unidirectional analyses, and is unique in its transformational power. Keywords: Data flow analysis, program optimization, partial redundancy elimination, code motion, strength reduction, bitvector data flow analyses. 1 Motivation Code motion improves the runtime efficiency of a program by avoiding unnecessary recomputations of a value at runtime. Strength reduction improves runtime efficiency by reducing "expensive" recomputations to less expensive ones, e.g., by reducing computations involving multiplication to computat...
Caching intermediate results for program improvement
 In Proceedings of the 1995 ACM SIGPLAN Symposium on Partial Evaluation and SemanticsBased Program Manipulation, PEPM ’95
, 1995
"... A systematic approach is given for symbolically caching intermediate results useful for deriving incremental programs from nonincremental programs. We exploit a number of program analysis and transformation techniques, centered around e ective c a c hing based on its utilization in deriving increme ..."
Abstract

Cited by 22 (6 self)
 Add to MetaCart
(Show Context)
A systematic approach is given for symbolically caching intermediate results useful for deriving incremental programs from nonincremental programs. We exploit a number of program analysis and transformation techniques, centered around e ective c a c hing based on its utilization in deriving incremental programs, in order to increase the degree of incrementality not otherwise achievable by using only the return values of programs that are of direct interest. Our method can be applied straightforwardly to provide a systematic approach to program improvement via caching. 1
Efficient Code Motion and an Adaption to Strength Reduction
 In Proceedings of the 4th International Joint Conference on TAPSOFT
, 1991
"... this paper we consider two elaborations of this algorithm, which are dealt with in Part I and Part II, respectively. Part I deals with the problem that the full variant of the algorithm of [SKR1] may excessively introduce trivial redefinitions of registers in order to cover a single computation. Ros ..."
Abstract

Cited by 9 (2 self)
 Add to MetaCart
this paper we consider two elaborations of this algorithm, which are dealt with in Part I and Part II, respectively. Part I deals with the problem that the full variant of the algorithm of [SKR1] may excessively introduce trivial redefinitions of registers in order to cover a single computation. Rosen, Wegman and Zadeck avoided such a too excessive introduction of trivial redefinitions by means of some practically oriented restrictions, and they proposed an efficient algorithm, which optimally moves the computations of acyclic flow graphs under these additional constraints (the algorithm is "RWZoptimal " for acyclic flow graphs) [RWZ]. Here we adapt our algorithm to this notion of optimality. The result is a modular and efficient algorithm, which avoids a too excessive introduction of trivial redefinitions along the lines of [RWZ], and is RWZoptimal for arbitrary flow graphs. Part II modularly extends the algorithm of [SKR1] in order to additionally cover strength reduction. This extension generalizes and improves all classical techniques for strength reduction in that it overcomes their structural restrictions concerning admissible program structures (e.g. previously determined loops) and admissible term structures (e.g. terms built of induction variables and region constants). Additionally, the program transformation obtained by our algorithm is guaranteed to be safe and to improve runtime efficiency. Both properties are not guaranteed by previous techniques. Structure of the Paper
KORSO: A Methodology for the Development of Correct Software
, 1994
"... The Korso project aims, by the use of formal methods, at the enhancement of the quality of software development in all phases of the software life cycle. In requirements engineering domain modeling with formal specifications is integrated with informal and preformal approaches for the constructi ..."
Abstract

Cited by 8 (2 self)
 Add to MetaCart
The Korso project aims, by the use of formal methods, at the enhancement of the quality of software development in all phases of the software life cycle. In requirements engineering domain modeling with formal specifications is integrated with informal and preformal approaches for the construction of a formal requirements specification of the "functional" properties of the required system. The specifications are used in the modeling and analysis parts of the requirement process and provide means for validation, including early prototyping and theoremproving. An evolutionary process model is proposed for system design and program development, whereby the correctness of all development steps is checked by suitable verification tools. The model centers around a development graph which consists of units, e.g. formal specifications, proofs, and programs, and relations between these units. There are three kinds of relations: syntactic relations, semantic relations, and modificat...
A Method for the Development of Correct Software
, 1995
"... . In requirements engineering domain modeling with formal specifications is integrated with informal and preformal approaches for the construction of a formal requirements specification of the "functional " properties of the required system. The specifications are used in the modeling ..."
Abstract

Cited by 8 (2 self)
 Add to MetaCart
. In requirements engineering domain modeling with formal specifications is integrated with informal and preformal approaches for the construction of a formal requirements specification of the "functional " properties of the required system. The specifications are used in the modeling and analysis parts of the requirement process and provide means for validation, including early prototyping and theoremproving. An evolutionary process model is proposed for system design and program development, whereby the correctness of all development steps is checked by suitable verification tools. The model centers around a development graph which consists of units, e.g. formal specifications, proofs, and programs, and relations between these units. There are three kinds of relations: syntactic relations, semantic relations, and modifications. In each development step units are either created, transformed, or modified. Program and system development are understood as the development o...
Incremental computation for transformational software development
"... Given a program f and an input change, w e wish to obtain an incremental program that computes f (x y) e ciently by making use of the value of f (x), the intermediate results computed in computing f (x), and auxiliary information about x that can be inexpensively maintained. Obtaining such increment ..."
Abstract

Cited by 2 (2 self)
 Add to MetaCart
(Show Context)
Given a program f and an input change, w e wish to obtain an incremental program that computes f (x y) e ciently by making use of the value of f (x), the intermediate results computed in computing f (x), and auxiliary information about x that can be inexpensively maintained. Obtaining such incremental programs is an essential part of the transformationalprogramming approach to software development and enhancement. This paper presents a systematic approach that discovers a general class of useful auxiliary information, combines it with useful intermediate results, and obtains an e cient incremental program that uses and maintains these intermediate results and auxiliary information. We g i v e a n umbe r of examples from list processing, VLSI circuit design, image processing, etc. 1