Results 1 - 10
of
10
Programming languages for distributed computing systems
- ACM Computing Surveys
, 1989
"... When distributed systems first appeared, they were programmed in traditional sequential languages, usually with the addition of a few library procedures for sending and receiving messages. As distributed applications became more commonplace and more sophisticated, this ad hoc approach became less sa ..."
Abstract
-
Cited by 211 (15 self)
- Add to MetaCart
When distributed systems first appeared, they were programmed in traditional sequential languages, usually with the addition of a few library procedures for sending and receiving messages. As distributed applications became more commonplace and more sophisticated, this ad hoc approach became less satisfactory. Researchers all over the world began designing new programming languages specifically for implementing distributed applications. These languages and their history, their underlying principles, their design, and their use are the subject of this paper. We begin by giving our view of what a distributed system is, illustrating with examples to avoid confusion on this important and controversial point. We then describe the three main characteristics that distinguish distributed programming languages from traditional sequential languages, namely, how they deal with parallelism, communication, and partial failures. Finally, we discuss 15 representative distributed languages to give the flavor of each. These examples include languages based on message passing, rendezvous, remote procedure call, objects, and atomic transactions, as well as functional languages, logic languages, and distributed data structure languages. The paper concludes with a comprehensive bibliography listing over 200 papers on nearly 100 distributed programming languages.
jc: An Efficient and Portable Sequential Implementation of Janus
- PROC. JOINT INTERNATIONAL CONFERENCE AND SYMPOSIUM ON LOGIC PROGRAMMING, WASHINGTON DC
, 1992
"... Janus is a language designed for distributed constraint programming [12]. This paper describes jc, an efficient and portable sequential implementation of Janus, which compiles Janus programs down to C code. Careful attention to the C code generated, together with some simple local optimizations, al ..."
Abstract
-
Cited by 22 (12 self)
- Add to MetaCart
Janus is a language designed for distributed constraint programming [12]. This paper describes jc, an efficient and portable sequential implementation of Janus, which compiles Janus programs down to C code. Careful attention to the C code generated, together with some simple local optimizations, allows the system to have fairly good performance despite the lack (at this time) of global flow analysis and optimization.
Call Forwarding: A Simple Interprocedural Optimization Technique for Dynamically Typed Languages
, 1994
"... This paper discusses call forwarding, a simple interprocedural optimization technique for dynamically typed languages. The basic idea behind the optimization is straightforward: find an ordering for the "entry actions" of a procedure, and generate multiple entry points for the procedure, so as to ma ..."
Abstract
-
Cited by 15 (6 self)
- Add to MetaCart
This paper discusses call forwarding, a simple interprocedural optimization technique for dynamically typed languages. The basic idea behind the optimization is straightforward: find an ordering for the "entry actions" of a procedure, and generate multiple entry points for the procedure, so as to maximize the savings realized from different call sites bypassing different sets of entry actions. We show that the problem of computing optimal solutions to arbitrary call forwarding problems is NP-complete, and describe an efficient greedy algorithm for the problem. Experimental results indicate that (i) this algorithm is effective, in that the solutions produced are generally close to optimal; and (ii) the resulting optimization leads to significant performance improvements for a number of benchmarks tested. 1 Introduction The code generated for a function or procedure in a dynamically typed language typically has to carry out various type and range checks on its arguments before it can op...
A Compiler Approach to Scalable Concurrent Program Design
- ACM TOPLAS
, 1992
"... The programmer's most powerful tool for controlling complexity in program design is abstraction. We seek to use abstraction in the design of concurrent programs, so as to separate design decisions concerned with decomposition, communication, synchronization, mapping, granularity, and load balancing. ..."
Abstract
-
Cited by 11 (7 self)
- Add to MetaCart
The programmer's most powerful tool for controlling complexity in program design is abstraction. We seek to use abstraction in the design of concurrent programs, so as to separate design decisions concerned with decomposition, communication, synchronization, mapping, granularity, and load balancing. This paper describes programming and compiler techniques intended to facilitate this design strategy. The programming techniques are based on a core programming notation with two important properties: the ability to separate concurrent programming concerns, and extensibility with reusable programmerdefined abstractions. The compiler techniques are based on a simple transformation system together with a set of compilation transformations and portable run-time support. The transformation system allows programmer-defined abstractions to be defined as source- to-source transformations that convert abstractions into the core notation. The same transformation system is used to apply compilation transformations that incrementally transform the core notation toward an abstract concurrent machine. This machine can be implemented on a variety of concurrent architectures using simple run-time support.
QD-Janus: a Sequential Implementation of Janus in Prolog
- Software---Practice and Experience
, 1993
"... This paper describes QDJanus, a sequential implementation of Janus in Prolog. The compiler uses a number of novel analyses and optimizations to improve the performance of the system. The choice of Prolog as the target language for a compiler, although unusual, is motivated by the following: (i) the ..."
Abstract
-
Cited by 5 (0 self)
- Add to MetaCart
This paper describes QDJanus, a sequential implementation of Janus in Prolog. The compiler uses a number of novel analyses and optimizations to improve the performance of the system. The choice of Prolog as the target language for a compiler, although unusual, is motivated by the following: (i) the semantic gap between Janus and Prolog is much smaller than that between Janus and, say, C or machine language---this simplifies the compilation process significantly, and makes it possible to develop a system with reasonable performance fairly quickly; (ii) recent progress in Prolog implementation techniques, and the development of Prolog systems whose speeds are comparable to those of imperative languages, indicates that the translation to Prolog need not entail a significant performance loss compared to native code compilers; and (iii) compilation to Prolog can benefit immediately from a significant body of work on, and implementations of, parallel Prolog systems. Our experience indicates that translation of logic programming languages to Prolog, accompanied by the development of good program analysis and optimization tools, is an effective way to quickly develop flexible and portable implementations with good performance and low cost
Performance Comparison between Conventional and Logic Programming Systems
, 1998
"... This work compares and analyses conventional and logic programming systems using a qualitative and quantitative approach. Logic programming is known to be easier and simpler than imperative programming, but it is not very popular because of its believed inefficiency. Our work shows that logic progra ..."
Abstract
-
Cited by 2 (1 self)
- Add to MetaCart
This work compares and analyses conventional and logic programming systems using a qualitative and quantitative approach. Logic programming is known to be easier and simpler than imperative programming, but it is not very popular because of its believed inefficiency. Our work shows that logic programming can be as efficient as imperative programming for a wide range of symbolic and scientific applications. We used different Prolog-based systems, including SICStus, XSB, Yap, CLP(R) and Aurora and compared to C, a structured language. We focus our studies on programmability, execution times and memory usage, and show that the use of techniques such as compilation, code specialization, tabling, constraints and parallelisation can improve the performance of declarative systems allowing them to behave better than imperative systems. Our best result shows that a logic program can run 200 times faster than its correspondent in C. Keywords: logic programming, conventional programming, program...
Improving the Efficiency of Nondeterministic Independent And-parallel Systems
- COMPUTER LANGUAGES
, 1996
"... We present the design and implementation of the and-parallel component of ACE. ACE is a computational model for the full Prolog language that simultaneously exploits both or-parallelism and independent and-parallelism. A high performance implementation of the ACE model has been realized and its p ..."
Abstract
-
Cited by 2 (1 self)
- Add to MetaCart
We present the design and implementation of the and-parallel component of ACE. ACE is a computational model for the full Prolog language that simultaneously exploits both or-parallelism and independent and-parallelism. A high performance implementation of the ACE model has been realized and its performance reported in this paper. We discuss how some of the standard problems which appear when implementing and-parallel systems are solved in ACE. We then propose a number of optimizations aimed at reducing the overheads and the increased memory consumption which occur in such systems when using previously proposed solutions. Finally, we present results from an implementation of ACE which includes the optimizations proposed. The results show that ACE exploits and-parallelism with high efficiency and high speedups. Furthermore, they also show that the proposed optimizations, which are applicable to many other and-parallel systems, significantly decrease memory consumption and incr...
Compiler Optimizations for Low-level Redundancy Elimination: An Application of Meta-level Prolog Primitives
- Proc. Third Workshop on Metaprogramming in Logic (META-92
, 1992
"... Much of the work on applications of meta-level primitives in logic programs focusses on high-level aspects such as source-level program transformation, interpretation, and partial evaluation. In this paper, we show how meta-level primitives can be used in a very simple way for low-level code opt ..."
Abstract
-
Cited by 1 (1 self)
- Add to MetaCart
Much of the work on applications of meta-level primitives in logic programs focusses on high-level aspects such as source-level program transformation, interpretation, and partial evaluation. In this paper, we show how meta-level primitives can be used in a very simple way for low-level code optimization in compilers. The resulting code optimizer is small, simple, efficient, and easy to modify and retarget. An optimizer based on these ideas is currently being used in a compiler that we have developed for Janus [6]. 1 Introduction Much of the work on applications of meta-level primitives in logic programs focuses on high-level aspects such as source-level program transformation, interpretation, and partial evaluation. In this paper, we consider instead the use of meta-level Prolog primitives in low-level code optimization in compilers. We show how such primitives can be used in a very simple way for a low-level code optimization called common subexpression elimination. The resu...
Some Methodological Issues in the Design of CIAO, a Generic, Parallel Concurrent Constraint Logic Programming System
"... 2 Separation of issues / Fundamental Principles We begin our discussion with some very general observations regarding computation rules, concurrency, parallelism, and independence. We believe these ..."
Abstract
- Add to MetaCart
2 Separation of issues / Fundamental Principles We begin our discussion with some very general observations regarding computation rules, concurrency, parallelism, and independence. We believe these
Towards CIAO-Prolog - A Parallel Concurrent Constraint System
, 1993
"... ing Away the Granularity Level: The Fundamental Principles Having argued for the separation of parallelism issues from those that are related to computation rules, we now concentrate on the fundamental principles governing parallelism in the different models proposed. We argue that moving a princip ..."
Abstract
- Add to MetaCart
ing Away the Granularity Level: The Fundamental Principles Having argued for the separation of parallelism issues from those that are related to computation rules, we now concentrate on the fundamental principles governing parallelism in the different models proposed. We argue that moving a principle from one system to another can often be done quite easily if another such "separation" is performed: isolating the principle itself from the level of granularity at which it is applied. This means viewing the parallelizing principle involved as associated to a generic concept of thread, to be particularized for each system, according to the fundamental unit of parallelism used in such system. As an example, and following these ideas, the fundamental principle of determinism used in the basic Andorra model can be applied to the &-Prolog system. The basic unit of parallelism considered when parallelizing programs in the classical &-Prolog tools is the subtree corresponding to the complete r...

