scispace - formally typeset
Search or ask a question

Showing papers in "ACM Transactions on Programming Languages and Systems in 1985"


Journal ArticleDOI
David Gelernter1
TL;DR: This work is particularly concerned with implementation of the dynamic global name space that the generative communication model requires, and its implications for systems programming in distributed settings generally and on integrated network computers in particular.
Abstract: Generative communication is the basis of a new distributed programming langauge that is intended for systems programming in distributed settings generally and on integrated network computers in particular. It differs from previous interprocess communication models in specifying that messages be added in tuple-structured form to the computation environment, where they exist as named, independent entities until some process chooses to receive them. Generative communication results in a number of distinguishing properties in the new language, Linda, that is built around it. Linda is fully distributed in space and distributed in time; it allows distributed sharing, continuation passing, and structured naming. We discuss these properties and their implications, then give a series of examples. Linda presents novel implementation problems that we discuss in Part II. We are particularly concerned with implementation of the dynamic global name space that the generative communication model requires.

2,584 citations


Journal ArticleDOI
TL;DR: Virtual time is a new paradigm for organizing and synchronizing distributed systems which can be applied to such problems as distributed discrete event simulation and distributed database concurrency control.
Abstract: Virtual time is a new paradigm for organizing and synchronizing distributed systems which can be applied to such problems as distributed discrete event simulation and distributed database concurrency control. Virtual time provides a flexible abstraction of real time in much the same way that virtual memory provides an abstraction of real memory. It is implemented using the Time Warp mechanism, a synchronization protocol distinguished by its reliance on lookahead-rollback, and by its implementation of rollback via antimessages.

2,280 citations


Journal ArticleDOI
TL;DR: A recommended Multilisp programming style is presented which, if followed, should lead to highly parallel, easily understandable programs.
Abstract: Multilisp is a version of the Lisp dialect Scheme extended with constructs for parallel execution. Like Scheme, Multilisp is oriented toward symbolic computation. Unlike some parallel programming languages, Multilisp incorporates constructs for causing side effects and for explicitly introducing parallelism. The potential complexity of dealing with side effects in a parallel context is mitigated by the nature of the parallelism constructs and by support for abstract data types: a recommended Multilisp programming style is presented which, if followed, should lead to highly parallel, easily understandable programs.Multilisp is being implemented on the 32-processor Concert multiprocessor; however, it is ultimately intended for use on larger multiprocessors. The current implementation, called Concert Multilisp, is complete enough to run the Multilisp compiler itself and has been run on Concert prototypes including up to eight processors. Concert Multilisp uses novel techniques for task scheduling and garbage collection. The task scheduler helps control excessive resource utilization by means of an unfair scheduling policy; the garbage collector uses a multiprocessor algorithm based on the incremental garbage collector of Baker.

1,139 citations


Journal ArticleDOI
TL;DR: Information-flow relations are presented for while-programs, which identify those program statements whose execution may cause information to be transmitted from or to particular input, internal, or output values.
Abstract: Until recently, information-flow analysis has been used primarily to verify that information transmission between program variables cannot violate security requirements. Here, the notion of information flow is explored as an aid to program development and validation.Information-flow relations are presented for while-programs, which identify those program statements whose execution may cause information to be transmitted from or to particular input, internal, or output values. It is shown with examples how these flow relations can be helpful in writing, testing, and updating programs; they also usefully extend the class of errors which can be detected automatically in the “static analysis” of a program.

237 citations


Journal ArticleDOI
TL;DR: This work illustrates the use of an implemented program development system, called PRL ("pearl"), that provides automated assistance with the difficult part of the programming process.
Abstract: The significant intellectual cost of programming is for problem solving and explaining, not for coding. Yet programming systems offer mechanical assistance for the coding process exclusively. We illustrate the use of an implemented program development system, called PRL ("pearl"), that provides automated assistance with the difficult part. The problem and its explained solution are seen as formal objects in a constructive logic of the data domains. These formal explanations can be executed at various stages of completion. The most incomplete explanations resemble applicative programs, the most complete are formal proofs.

201 citations


Journal ArticleDOI
TL;DR: An operational semantics, acceptance semantics, is introduced, and it is in terms of this active experimentation that meaning is given to the CIRCAL syntax, thus allowing proof of system properties to be constructed.
Abstract: The CIRCAL calculus is presented as a mathematical framework in which to describe and analyze concurrent systems, whether hardware or software.The dot operator is used to compose CIRCAL descriptions, and it is this operator which permits the natural modeling of asynchronous and simultaneous behavior, thus allowing the representation and analysis of system timing properties such as those found in circuits.The CIRCAL framework uses an abstraction operator to permit the modeling of a system at different levels of detail. Behavioral complexity of real systems makes abstraction crucial when producing a tractable model, and we illustrate how abstraction introduces nondeterminisim into system representations.An operational semantics, acceptance semantics, is introduced, and it is in terms of this active experimentation that meaning is given to the CIRCAL syntax, thus allowing proof of system properties to be constructed.

177 citations


Journal Article
TL;DR: Illustration de ces strategies en devinant des algorithmes pour 2 problemes non-triviaux: 1) determiner si un digraphe donne est acyclique, and 2) construire la plus longue sous sequence d'une sequence donne de sommets.
Abstract: La strategie de promotion en programmation de transformation est en general une methode pour acquerir une efficacite en exploitant la structure recursive, dans le terme dominant d'une expression algorithmique. Illustration de ces strategies en devinant des algorithmes pour 2 problemes non-triviaux: 1) determiner si un digraphe donne est acyclique, et 2) construire la plus longue sous sequence d'une sequence donne de sommets qui forme un graphe connexe dans un digraphe donne

132 citations


Journal ArticleDOI
TL;DR: This work defines what it means for abstract data types to be atomic and resilient, and discusses issues that arise in implementing such types, and describes a particular linguistic mechanism provided in the Argus programming language.
Abstract: A major issue in many applications is how to preserve the consistency of data in the presence of concurrency and hardware failures. We suggest addressing this problem by implementing applications in terms of abstract data types with two properties: Their objects are atomic (they provide serializability and recoverability for activities using them) and resilient (they survive hardware failures with acceptably high probability). We define what it means for abstract data types to be atomic and resilient. We also discuss issues that arise in implementing such types, and describe a particular linguistic mechanism provided in the Argus programming language.

122 citations


Journal ArticleDOI
TL;DR: The two concepts may be combined to implement abstract data types, modules, separate compilation, views, and data protection, and the ideas may be used in system construction and version control, as demonstrated here.
Abstract: A persistent programming environment, together with a language that supports first class procedures, may be used to provide the semantic features of other object modeling languages. In particular, the two concepts may be combined to implement abstract data types, modules, separate compilation, views, and data protection. Furthermore, the ideas may be used in system construction and version control, as demonstrated here.

116 citations


Journal ArticleDOI
TL;DR: The criteria and transformation are useful for transforming denotational definitions into compilers and interpreters for imperative machines, for optimizing applicative programs, and for judging the suitability of semantic notations for describing imperative languages.
Abstract: Sufficient criteria are given for replacing all occurrences of the store argument in a Scott-Strachey denotational definition of a programming language by a single global variable. The criteria and transformation are useful for transforming denotational definitions into compilers and interpreters for imperative machines, for optimizing applicative programs, and for judging the suitability of semantic notations for describing imperative languages. An example transformation of a semantics of a repeat-loop language to one which uses a global store variable is given to illustrate the technique.

107 citations


Journal ArticleDOI
Robert Nix1
TL;DR: An editing by example system derived from an efficient heuristic that provably synthesizes a gap program from examples of its input/output behavior is embedded in a production text editor.
Abstract: An editing by example system is an automatic program synthesis facility embedded in a text editor that can be used to solve repetitive text editing problems The user provides the editor with a few examples of a text transformation The system analyzes the examples and generalizes them into a program that can perform the transformation to the rest of the user's text This paper presents an overview of the design, analysis, and implementation of a practical editing by example system It studies the problem of synthesizing a text processing program that generalizes the transformation implicitly described by a small number of input/output examples A class of text processing programs called gap programs is defined and the problems associated with synthesizing them from examples are examined, leading to an efficient heuristic that provably synthesizes a gap program from examples of its input/output behavior The editing by example system derived from this analysis has been embedded in a production text editor By developing an editing by example system that solves a useful class of text processing problems, this work demonstrates that program synthesis is feasible in the domain of text editing

Journal ArticleDOI
TL;DR: This paper presents the syntactic extensions for embedding the replacement model into Algol 68 and its operational semantics and an axiomatic semantic definition for the model can be found in [27].
Abstract: This paper presents a new model for exception handling, called the replacement model. The replacement model, in contrast to other exception-handling proposals, supports all the handler responses of resumption, termination, retry, and exception propagation, within both statements and expressions, in a modular, simple, and uniform fashion. The model can be embedded in any expression-oriented language and can also be adapted to languages which are not expression oriented with almost all the above advantages. This paper presents the syntactic extensions for embedding the replacement model into Algol 68 and its operational semantics. An axiomatic semantic definition for the model can be found in [27].

Journal ArticleDOI
TL;DR: This paper examines one of these underlying notions of data type, that of data type, with particular attention to the treatment of generic or polymorphic procedures and static type-checking.
Abstract: An important goal of programming language research is to isolate the fundamenal concepts of languages, those basic ideas that allow us to understand the relationships among various language features. This paper examines one of these underlying notions, that of data type, with particular attention to the treatment of generic or polymorphic procedures and static type-checking.

Journal ArticleDOI
Pamela Zave1
TL;DR: A specification technique, formally equivalent to finite-state machines, is offered as an alternative because it is inherently distributed and more comprehensible and facilitates automatic detection of some classes of error.
Abstract: A specification technique, formally equivalent to finite-state machines, is offered as an alternative because it is inherently distributed and more comprehensible. When applied to modules whose complexity is dominated by control, the technique guides the analyst to an effective decomposition of complexity, encourages well-structured error handling, and offers an opportunity for parallel computation. When applied to distributed protocols, the technique provides a unique perspective and facilitates automatic detection of some classes of error. These applications are illustrated by a controller for a distributed telephone system and the full-duplex alternating-bit protocol for data communication. Several schemes are presented for executing the resulting specifications.

Journal ArticleDOI
TL;DR: It is shown how a denotational setting can be useful for validating language-to-same-language transformations, and consideration of a transformation-exploiting liveness of variables indicates that a more satisfactory approach may be possible.
Abstract: Program transformations are frequently performed by optimizing compilers, and the correctness of applying them usually depends on data flow information. For language-to-same-language transformations, it is shown how a denotational setting can be useful for validating such program transformations.Strong equivalence is obtained for transformations that exploit information from a class of forward data flow analyses, whereas only weak equivalence is obtained for transformations that exploit information from a class of backward data flow analyses. To obtain strong equivalence, both the original and the transformed program must be data flow analysed, but consideration of a transformation-exploiting liveness of variables indicates that a more satisfactory approach may be possible.

Journal ArticleDOI
TL;DR: Affix grammars are used to describe the instruction set of a target architecture for purposes of compiler code generation and a compiler built on this model can automatically perform most popular machine-dependent optimizations, including peephole optimizations.
Abstract: Affix grammars are used to describe the instruction set of a target architecture for purposes of compiler code generation A code generator is obtained automatically for a compiler using attributed parsing techniques A compiler built on this model can automatically perform most popular machine-dependent optimizations, including peephole optimizations Code generators based on this model demonstrate retargetability for the VAX1-11, iAPX2-86, Z-80003, PDP4-11, MC-68000, NS32032, FOM, and IBM-370 architectures

Journal ArticleDOI
TL;DR: The feasibility of unified command/programming/debugging languages, and the concepts on which such languages have to be based, are investigated, and strict rules are laid down by which to judge language concepts presenting themselves as candidates for inclusion in the framework during each phase.
Abstract: Most programming environments are much too complex. One way of simplifying them is to reduce the number of mode-dependent languages the user has to be familiar with. As a first step towards this end, the feasibility of unified command/programming/debugging languages, and the concepts on which such languages have to be based, are investigated. The unification process is accomplished in two phases. First, a unified command/programming framework is defined and, second, this framework is extended by adding an integrated debugging capability to it. Strict rules are laid down by which to judge language concepts presenting themselves as candidates for inclusion in the framework during each phase. On the basis of these rules many of the language design questions that have hitherto been resolved this way or that, depending on the taste of the designer, lose their vagueness and can be decided in an unambiguous manner.

Journal ArticleDOI
TL;DR: A program transformation technique for programs in a general stream language L whereby a data-driven evaluation of the transformed program performs exactly the same computation as a demand-driven Evaluation of the original program.
Abstract: We describe a program transformation technique for programs in a general stream language L whereby a data-driven evaluation of the transformed program performs exactly the same computation as a demand-driven evaluation of the original program. The transformational technique suggests a simple denotational characterization of demand-driven evaluation.

Journal ArticleDOI
TL;DR: A formal framework is provided in which noncorrecting syntax error recovery concepts are defined and investigated, which allows the statement of provable properties, such as the absence of spurious error messages or the avoidance of skipping input text.
Abstract: A parser must be able to continue parsing after encountering a syntactic error to check the remainder of the input. To achieve this, it is not necessary to perform corrections on either the input text or the stack contents. A formal framework is provided in which noncorrecting syntax error recovery concepts are defined and investigated. The simplicity of these concepts allows the statement of provable properties, such as the absence of spurious error messages or the avoidance of skipping input text. These properties are due to the fact that no assumptions about the nature of the errors need be made to continue parsing.

Journal ArticleDOI
TL;DR: A different style of axiomatic definition for programming languages is presented, oriented toward imperative languages that do not distinguish between statements and expressions, which argues that this style of definition gives a significantly different view of the notion of “easy axiomatixability.”
Abstract: We present a different style of axiomatic definition for programming languages. It is oriented toward imperative languages, such as Algol 68, that do not distinguish between statements and expressions. Rather than basing the logic on a notion of pre- or postcondition, we use the value of a programming language expression as the underlying primitive.A number of language constructs are examined in this framework. We argue that this style of definition gives us a significantly different view of the notion of “easy axiomatixability.” Side effects in expressions as well as aliasing between variables are shown to be “easily axiomatizable” in our system.

Journal ArticleDOI
TL;DR: The formulation of analogies are suggested as a basic tool in program abstraction for transforming the existing programs into an abstract schema that represents the embedded technique.
Abstract: Our goal is to develop formal methods for abstracting a given set of programs into a program schema and for instantiating a given schema to satisfy concrete specifications. Abstraction and instantiation are two important phases in software development which allow programmers to apply knowledge learned in the solutions of past problems when faced with new situations. For example, from two programs using a linear (or binary) search technique, an abstract schema can be derived that embodies the shared idea and that can be instantiated to solve similar new problems. Along similar lines, the development and application of program transformations are considered.We suggest the formulation of analogies as a basic tool in program abstraction. An analogy is first sought between the specifications of the given programs; this yields an abstract specification that may be instantiated to any of the given concrete specifications. The analogy is then used as a basis for transforming the existing programs into an abstract schema that represents the embedded technique, with the invariant assertions and correctness proofs of the given programs helping to verify and complete the analogy. A given concrete specification of a new problem may then be compared with the abstract specification of the schema to suggest an instantiation of the schema that yields a correct program.

Journal ArticleDOI
TL;DR: In this paper, the traditional LALR analysis is reexamined using a new operator and an associated graph, and an improved method that allows factoring out a crucial part of the computation for defining states of LR(0) canonical collection and for computing LRR(1) lookahead sets is presented.
Abstract: The traditional LALR analysis is reexamined using a new operator and an associated graph. An improved method that allows factoring out a crucial part of the computation for defining states of LR(0) canonical collection and for computing LALR(1) lookahead sets is presented. This factorization leads to significantly improved algorithms with respect to execution time as well as storage requirements. Experimental results including comparison with other known methods are presented.


Journal ArticleDOI
TL;DR: A descriptive notation is introduced, and analysis techniques applicable to designs expressed in that notation are presented and applied to a realistic distributed software-system design problem involving mutual exclusion in a computer network.
Abstract: In this paper we outline an approach to describing and analyzing designs for distributed software systems. A descriptive notation is introduced, and analysis techniques applicable to designs expressed in that notation are presented. The usefulness of the approach is illustrated by applying it to a realistic distributed software-system design problem involving mutual exclusion in a computer network.

Journal ArticleDOI
TL;DR: This work argues for the need of supporting a symmetric select construct, in which entry calls as well as accepts can be alternatives, and shows that several semantic principles are violated by a nonsymmetric select, while being satisfied by a symmetrical one.
Abstract: We argue for the need of supporting a symmetric select construct, in which entry calls as well as accepts can be alternatives. We present several situations in which a symmetric select leads to a more natural programming style. We show that several semantic principles are violated by a nonsymmetric select, while being satisfied by a symmetric one. In particular, the suggested symmetric intertask communication mechanism is fully abstract and composable, and has a distributed termination rule which reduces the risk of deadlock. Our discussion is in terms of Ada™.

Journal ArticleDOI
TL;DR: Experience with the rules of the PECOS system has been positive, both during the process of developing the rule set and while developing rules for another domain, the existence of already codified rules proved very helpful.
Abstract: Several fairly large sets of programming rules have been developed recently. It is natural to ask whether the process of developing such rule bases may converge. Having developed sets of rules for specific programming tasks and domains, will they be helpful when other tasks and domains are considered? While it is too early to give definitive answers, experience with the rules of the PECOS system has been positive. Both during the process of developing the rule set and while developing rules for another domain, the existence of already codified rules proved very helpful.

Journal ArticleDOI
TL;DR: An efficient algorithm for communicating letter-shape information from a high-speed computer with a large memory to a typesetting device that has a limited memory is presented, using a model that generalizes well-known “demand paging” strategies to the case where changes to the cache are allowed before the associated information is actually needed.
Abstract: An efficient algorithm for communicating letter-shape information from a high-speed computer with a large memory to a typesetting device that has a limited memory is presented. The encoding is optimum, in the sense that the total time for typesetting is minimized, using a model that generalizes well-known “demand paging” strategies to the case where changes to the cache are allowed before the associated information is actually needed. Extensive empirical data show that good results are obtained even when difficult technical material is being typeset on a machine that can store information concerning only 100 characters. The methods of this paper are also applicable to other hardware and software caching applications with restricted lookahead.

Journal ArticleDOI
TL;DR: Two classes of uniformly implemented loops that are particularly susceptible to this form of analysis are defined and discussed and an implication of the concept of uniform loop implementation for the validation of the obtained generalization is explained.
Abstract: The problem of generalizing functional specifications for while loops is considered This problem occurs frequently when trying to verify that an initialized loop satisfies some functional specification, ie, produces outputs which are some function of the program inputsThe notion of a valid generalization of a loop specification is defined A particularly simple valid generalization, a base generalization, is discussed A property of many commonly occurring while loops, that of being uniformly implemented, is defined A technique is presented which exploits this property in order to systematically achieve a valid generalization of the loop specification Two classes of uniformly implemented loops that are particularly susceptible to this form of analysis are defined and discussed The use of the proposed technique is illustrated with a number of applications Finally, an implication of the concept of uniform loop implementation for the validation of the obtained generalization is explained

Journal ArticleDOI
TL;DR: POINTY combines an interactive programming environment with the teaching-by-guiding methodology that has been successful in industrial robotics to provide a friendly and powerful programming environment for robot applications.
Abstract: We introduce POINTY, an interactive system for constructing world-model-based programs for robots. POINTY combines an interactive programming environment with the teaching-by-guiding methodology that has been successful in industrial robotics. Owing to its ability to control robots in real time, and to interact with the user, POINTY provides a friendly and powerful programming environment for robot applications. In the past few years, POINTY has been in use at Stanford to write, test, and debug various robot programs.

Journal ArticleDOI
TL;DR: A complete, formal denotational semantics for the language DNP (dynamic networks of processes) is presented, along the lines sketched by Kahn and MacQueen.
Abstract: DNP (dynamic networks of processes) is a variant of the language introduced by Kahn and MacQueen [11, 12]. In the language it is possible to create new processes dynamically. We present a complete, formal denotational semantics for the language, along the lines sketched by Kahn and MacQueen. An informal explanation of the formal semantics is also given.