Interfaces-the collection of procedures and data structures that define a library, a subsystem, a module-are syntactically poor programming languages. They have state (defined both by the interface's data structur...
详细信息
Interfaces-the collection of procedures and data structures that define a library, a subsystem, a module-are syntactically poor programming languages. They have state (defined both by the interface's data structures and internally), operations on this state (defined by the interface's procedures), and semantics associated with these operations. Given a way to incorporate interface semantics into compilation, interfaces can be compiled in the same manner as traditional languages such as ANSI C or FORTRAN. This paper makes two contributions. First, ii proposes and explores the metaphor of interface compilation, and provides the beginnings of a programming methodology for exploiting it. Second, ii presents MAGIK, a system built to support interface compilation. Using MAGIK, software developers call build optimizers and checkers for their interface languages, and have these extensions incorporated into compilation, with a corresponding gain in efficiency and safety. This organization contrasts with traditional compilation, which relegates programmers to the role of passive consumers, rather than active exploiters of a complier's transformational abilities.
We consider a generalization of the concept of abstract data type suitable for modeling situations in which there is more than one level of functionality. An instance of such a situation is the difference in level of ...
详细信息
We consider a generalization of the concept of abstract data type suitable for modeling situations in which there is more than one level of functionality. An instance of such a situation is the difference in level of functionality between the query and update functions in a data base. We introduce the concept of a higher order data type to model this idea. The underlying algebraic ideas are outlined, and sample applications of the concept are presented.
Logicians have known since Kleene's work in the 1940s that various kinds of constructive proofs could be compiled into executable code. The results of this variety are known for many constructive formal systems. ...
详细信息
Logicians have known since Kleene's work in the 1940s that various kinds of constructive proofs could be compiled into executable code. The results of this variety are known for many constructive formal systems. An example can illustrate the basic ideas behind them. A very simple benchmark common in the literature, the Euclidean division algorithm, is selected. Programs are like constructive proofs of their specifications; this analogy is an exact equivalence for certain classes of programs. The relationship between formal logic and programs is a foundation for programming methodology superior to that usually adopted. Furthermore, this equivalence suggests programming languages which are much richer than all others currently in use. These claims are established through the introduction of parts of the PL/CV programming logics as a source of precision and examples.
AbstractThe methodology of top‐down (structured) programming has emerged in the last few years as a practical approach to the problem of developing reliable software systems. The methodology, however, places certain ...
详细信息
AbstractThe methodology of top‐down (structured) programming has emerged in the last few years as a practical approach to the problem of developing reliable software systems. The methodology, however, places certain demands on the language used for actual system implementation. In this paper we discuss the implications of these demands on a specific language, PL/I. From this discussion the basic objectives of a PL/I support system are deduced. These objectives deal primarily with: (1) specifying intermodule relationships; (2) propagating module modifications; and (3) maintaining consistency in the realization of abstractions. Finally, the essential elements of a system that realizes these objectives are describe
First-year graduate students in software engineering at the University of Southern California (Los Angeles) were told to deliver a small interactive version of the COCOMO model for estimating software costs. Two team...
详细信息
First-year graduate students in software engineering at the University of Southern California (Los Angeles) were told to deliver a small interactive version of the COCOMO model for estimating software costs. Two teams specified and developed independent versions of this product, one team using Fortran, the other using Pascal. At the conclusion of the project, it was determined that: 1. Large-scale software engineering procedures, such as unit development folders and walkthroughs, can be cost-effectively tailored to small projects. 2. The choice of programming language is not the dominant factor in small software product development. 3. programming is not the dominant activity in small software product development. 4. Intermediate ''deadlines'' can help to assure on-time completion of small software projects. 5. Most of the code in a small applications software product is devoted to ''housekeeping.''
Most current approaches to mechanical program verification transform a program and its specifications into first-order formulas and try to prove these formulas valid. Since the first-order predicate calculus is not de...
详细信息
Most current approaches to mechanical program verification transform a program and its specifications into first-order formulas and try to prove these formulas valid. Since the first-order predicate calculus is not decidable, such approaches are inherently limited. This paper proposes an alternative approach to program verification: correctness proofs are constructively established by proof justifications written in an algorithmic notation. These proof justifications are written as part of the program, along with the executable code and correctness specifications. A notation is presented in which code, specifications, and justifications are interwoven. For example, if a program contains a specification 3x P(x), the program also contains a justification that exhibits the particulat value of x that makes P true. Analogously, justifications may be used to state how universally quantified formulas are to be instantiated when they are used as hypotheses. Programs so justifiled may be verified by proving quantifier-free formulas. Additional classes of justifications serve related ends. Formally, justifications reduce correctness to a decidable theory. Informally, justifications establish the connection between the executable code and correctness specifications, documenting the reasoning on which the correctness is based.
In interactive systems that must display the text of programs, the size of the program is ordinarily much larger than the capacity of the screen. Although the obvious tactic is simply to select k contiguous lines for ...
详细信息
In interactive systems that must display the text of programs, the size of the program is ordinarily much larger than the capacity of the screen. Although the obvious tactic is simply to select k contiguous lines for display in a k-line window, in some cases, it is helpful to be able to represent m lines in a k-line window, where m is greater than k, by condensing portions of the text. Alternative tactics for controlling such condensation are considered. The 3 systems considered - PDE1L, the Cornell Program Synthesizer, and COPE - illustrate a useful idea, as well as 2 substantially different approaches to its implementation. PDE1L and COPE are demonstrable, but user experience is limited. The Synthesizer, however, has been used for more than 2 years at numerous universities. Only extensive user experience can resolve the choice between automatic and user-controlled condensation, and it will probably be concluded that under different circumstances each of these alternatives is advantageous. The issues in general will be simply how much effort is required for user control and how well automatic condensation can deduce the user's needs and intent. Of course, the possibility of compromise also exists.
In order to develop a loop from a given precondition and postcondition following the method developed in Dijkstra (1976) and described in Gries (1981), one attempts to obtain a loop invariant by weakening the postcond...
详细信息
In order to develop a loop from a given precondition and postcondition following the method developed in Dijkstra (1976) and described in Gries (1981), one attempts to obtain a loop invariant by weakening the postcondition in some way. To do so, one standard technique is to replace a constant or expression that occurs in the postcondition by a fresh variable. A situation in which it is useful to introduce fresh variables to replace some of the occurrences of existing variables is discussed. Both a new algorithm for linear search and an algorithm for binary search to illustrate the technique are developed.
A general initialization principle is presented that increases the efficiency of algorithms in terms of computation time. It is applied to the algorithm NS in [1] and results in significant performance improvements. I...
详细信息
A general initialization principle is presented that increases the efficiency of algorithms in terms of computation time. It is applied to the algorithm NS in [1] and results in significant performance improvements. In addition a programming bug is shown in the original version of NS.
Since the middle of the 1960s, computer science has been practised in Denmark under Peter Naur's termdatalogy, the science of data processes. Starting at Regenecentralen and the University of Copenhagen, the Copen...
详细信息
Since the middle of the 1960s, computer science has been practised in Denmark under Peter Naur's termdatalogy, the science of data processes. Starting at Regenecentralen and the University of Copenhagen, the Copenhagen Tradition of Computer Science has developed its own special characteristics by means of a close connection with applications and other fields of knowledge. The tradition is not least visible in the area of education. Comprehensive project activity is an integral part of the curriculum, thus presenting theory as an aspect of realistic solutions known primarily through actual experience. Peter Naur early recognized the particular educational challenges presented by computer science. His innovations have shown their quality and vitality also at other universities. There is a close connection between computer science training as it has been formed at Copenhagen University, and the view of computer science which has characterized Peter Naur's research. We illustrate how the study of programming and system development conceived as a human activity has been an all-pervasive theme in Naur's work. This approach has set the scene for central research issues in software development which today seem more topical than ever.
暂无评论