Abstract:
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
Citations
|
709
|
Constraint logic programming
– Jaffar, Lassez
- 1987
|
|
255
|
The Family of Concurrent Logic Programming Languages
– Shapiro
- 1989
|
|
177
|
Concurrent Constraint Programming Languages
– Saraswat
- 1993
|
|
108
|
Guarded Horn Clauses
– Ueda
- 1985
|
|
100
|
The Muse Or-parallel Prolog Model and its Performance
– Ali, Karlsson
- 1990
|
|
85
|
Static Inference of Modes and Data Dependencies in Logic Programs
– Debray
- 1989
|
|
72
|
Prolog and its Performance: Exploiting Independent And-Parallelism
– Hermenegildo, Greene
- 1990
|
|
66
|
Denotational abstract interpretation of logic programs
– Marriott, Sondergaard, et al.
- 1994
|
|
49
|
Janus: A step towards distributed constraint programming
– Saraswat, Kahn, et al.
- 1990
|
|
45
|
The Andorra-I Engine: A Parallel Implementation of the Basic Andorra Model
– Costa, Warren, et al.
- 1991
|
|
44
|
An Instance of Abstract Interpretation Integrating Type and Mode Inferencing
– Janssens, Bruynooghe
- 1988
|
|
40
|
SICStus Prolog User's Manual
– Carlsson, Wid'en
- 1988
|
|
35
|
The Automatic Generation of Mode Declarations for Prolog Programs
– Mellish
- 1981
|
|
34
|
Parallel Logic Programming
– Tick
- 1991
|
|
29
|
on a MIPS: Results from a prolog compiler for a RISC
– LIPS
- 1990
|
|
29
|
The Benefits of Global Dataflow Analysis for an Optimizing Prolog Compiler
– Roy, Despain
- 1990
|
|
29
|
Compiled Execution of the Reduce-OR Process Model on Multiprocessors
– Ramkumar, Kale
- 1989
|
|
27
|
Specialisation of Prolog and FCP Programs Using Abstract Interpretation
– Gallagher, Codish, et al.
- 1988
|
|
21
|
jc: An Efficient and Portable Sequential Implementation of Janus
– Gudeman, Bosschere, et al.
- 1992
|
|
16
|
Strictness detection in non-flat domains
– Hughes
- 1985
|
|
12
|
Strand: A Practical Parallel Programming Tool
– Foster, Taylor
- 1989
|
|
10
|
A sequential abstract machine for Flat Concurrent Prolog
– HOURI, SHAPIRO
- 1986
|
|
9
|
Compiling Concurrent Logic Programming Languages
– Kliger
- 1992
|
|
9
|
LIPS on a MIPS: Results from a Prolog Compiler for a RISC
– Taylor
- 1990
|
|
7
|
Static Evaluation of Functional Programs
– Lindstrom
- 1986
|
|
2
|
Compiled Execution of the Reduce-OR
– Ramkumar, Kal'e
- 1989
|
|
1
|
Compiling CP(#; j; &) on top of Prolog
– Saraswat
- 1987
|
|
1
|
Compiling Extended Concurrent Prolog -- Single Queue Compilation
– Tanaka, Kishishita
- 1986
|
|
1
|
A compiler for concurrent Prolog
– Ueda, Chikayama
- 1985
|
|
1
|
Implementing logic programming languages: the quiche-eating approach
– Debray
- 1993
|
|
1
|
Compiler Optimizations for Low-Level Redundancy Elimination: An Application of Meta-level Prolog Primitives
– Debray
- 1992
|
|
1
|
Strictness Detection in Non-Flat Domains", in Programs as Data Objects
– Hughes
- 1985
|