Results 1 -
6 of
6
Caching Intermediate Results for Program Improvement
- In Proceedings of the ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation
, 1995
"... A systematic approach is given for symbolically caching intermediate results useful for deriving incremental programs from non-incremental programs. We exploit a number of program analysis and transformation techniques, centered around effective caching based on its utilization in deriving increment ..."
Abstract
-
Cited by 19 (6 self)
- Add to MetaCart
A systematic approach is given for symbolically caching intermediate results useful for deriving incremental programs from non-incremental programs. We exploit a number of program analysis and transformation techniques, centered around effective caching 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 Introduction Incremental programs take advantage of repeated computations on inputs that differ only slightly from one another, making use of the old output in computing a new output rather than computing from scratch. Methods of incremental computation have widespread application, e.g., optimizing compilers [2, 9, 11], transformational programming [29, 32, 42], interactive editing systems [4, 38], etc. In this paper, ...
Incremental Computation: A Semantics-Based Systematic Transformational Approach
, 1996
"... ion of a function f adds an extra cache parameter to f . Simplification simplifies the definition of f given the added cache parameter. However, as to how the cache parameter should be used in the simplification to provide incrementality, KIDS provides only the observation that distributive laws can ..."
Abstract
-
Cited by 9 (3 self)
- Add to MetaCart
ion of a function f adds an extra cache parameter to f . Simplification simplifies the definition of f given the added cache parameter. However, as to how the cache parameter should be used in the simplification to provide incrementality, KIDS provides only the observation that distributive laws can often be applied. The Munich CIP project [BMPP89,Par90] has a strategy for finite differencing that captures similar ideas. It first "defines by a suitable embedding a function f 0 ", and then "derives a recursive version of f 0 using generalized unfold/fold strategy", but it provides no special techniques for discovering incrementality. We believe that both works provide only general strategies with no precise procedure to follow and therefore are less automatable than ours. Chapter 4 Caching intermediate results The value of f 0 (x \Phi y) may often be computed faster by using not only the return value of f 0 (x), as discussed in Chapter 3, but also the values of some subcomputation...
The Functional Side of Logic Programming
- In Proceedings of the Seventh International Conference on Functional Programming Languages and Computer Architecture (FPCA'95
, 1995
"... In this paper we study the relationships between logic programming and functional programming, trying to answer the following basic question: to what extent is logic programming just functional programming in disguise? We develop a theory to formally express this correspondence, and exhibit a class ..."
Abstract
-
Cited by 6 (2 self)
- Add to MetaCart
In this paper we study the relationships between logic programming and functional programming, trying to answer the following basic question: to what extent is logic programming just functional programming in disguise? We develop a theory to formally express this correspondence, and exhibit a class that can by right be considered as the functional core of logic programming. Moreover, since the functional meaning of each program in this class is provided constructively, via a transformation from logic to functional programs, we show how the obtained theoretical results are useful also in the study of languages integration, termination issues, and practical implementations. 1 Introduction During the recent years, a huge amount of effort was devoted to integrating the two paradigms of functional programming and logic programming, and to develop languages combining them (see for instance [12]). However, much less attention was devoted to the basic problem of studying what are the intimat...
What is a Universal Higher-Order Programming Language?
- In Proc. International Conference on Automata, Languages, and Programming. Lecture Notes in Computer Science
, 1993
"... . In this paper, we develop a theory of higher-order computability suitable for comparing the expressiveness of sequential, deterministic programming languages. The theory is based on the construction of a new universal domain T and corresponding universal language KL. The domain T is universal for ..."
Abstract
-
Cited by 4 (2 self)
- Add to MetaCart
. In this paper, we develop a theory of higher-order computability suitable for comparing the expressiveness of sequential, deterministic programming languages. The theory is based on the construction of a new universal domain T and corresponding universal language KL. The domain T is universal for observably sequential domains; KL can define all the computable elements of T, including the elements corresponding to computable observably sequential functions. In addition, domain embeddings in T preserve the maximality of finite elements---preserving the termination behavior of programs over the embedded domains. 1 Background and Motivation Classic recursion theory [7, 13, 18] asserts that all conventional programming languages are equally expressive because they can define all partial recursive functions over the natural numbers. This statement, however, is misleading because real programming languages support and enforce a more abstract view of data than bitstrings. In particular, mo...
Thirteen puzzles in programming logic
- Proceedings of the Workshop on Formal Software Development: Combining Specification Methods, Lecture
"... Very abstract concepts underlie the design of modern programming languages— higher-order functions, abstract data types, types as values, names of names. These concepts arise naturally in the course of program design; with an intuitive explanation, programmers generally understand and use them effec ..."
Abstract
-
Cited by 1 (0 self)
- Add to MetaCart
Very abstract concepts underlie the design of modern programming languages— higher-order functions, abstract data types, types as values, names of names. These concepts arise naturally in the course of program design; with an intuitive explanation, programmers generally understand and use them effectively. Nevertheless, intuition has its limits. Situations arise repeatedly where firmer guidelines are needed to resolve confusions and inconsistency. This note illustrates some of the places where intuitive programming concepts are not adequate. Some specific puzzling cases are collected below which highlight areas where more guidance would be valuable. The statements of the puzzles are, I hope, almost all accessible to novice programmers, though they vary in difficulty as well as significance. My emphasis is on puzzles which come up in most programming languages, not on problems reflecting the idiosyncrasies of some particular language. “Solutions ” for the puzzles are supplied, but they are really brief hints about the current state of the theoretical answers. Simple as the puzzles appear, several of them currently lack satisfactory solutions. The puzzles are intended to make the point that reasoning about program behavior raises challenges with a significant mathematical component. One aim of programming concepts in programming. Software engineering, in common with other design disciplines, deals with the organization and management of large systems interacting with complex environments. At the same time it contrasts with other design disciplines: programs, like essays or
Methods and Logics for Proving
"... this paper in HOARE & JONES [1989, pp. 45-58]). This paper introduced or revealed a number of ideas which originated an evolution of programming from arts and crafts to a science. Hoare logic had a very significant impact on program verification and design methods. It was an essential step in the ..."
Abstract
- Add to MetaCart
this paper in HOARE & JONES [1989, pp. 45-58]). This paper introduced or revealed a number of ideas which originated an evolution of programming from arts and crafts to a science. Hoare logic had a very significant impact on program verification and design methods. It was an essential step in the emergence of "structured programming" in the 1970's. It is also an important contribution to the development of formal semantics of programming languages. Understanding that programs can be a subject of mathematical investigations was also crucial in the development of a theory of programming. This is reflected in the fact that HOARE [1969] is one of the most widely cited papers in computing science (see the bibliography of more than 350 references)

