Compilers: principles, techniques, and tools
Compilers: principles, techniques, and tools
Unfold/fold transformations and loop optimization of logic programs
PLDI '88 Proceedings of the ACM SIGPLAN 1988 conference on Programming Language design and Implementation
Journal of Logic Programming
Design of the kernel language for the parallel inference machine
The Computer Journal - On concurrent logic programming
Warren's abstract machine: a tutorial reconstruction
Warren's abstract machine: a tutorial reconstruction
Can logic programming execute as fast as imperative programming?
Can logic programming execute as fast as imperative programming?
On the scheme of passing arguments in stack frames for Prolog
Proceedings of the eleventh international conference on Logic programming
Implementation of PROLOG
Logic Programming
PLILP '90 Proceedings of the 2nd International Workshop on Programming Language Implementation and Logic Programming
Efficient memory management in a merged heap/stack prolog machine
Proceedings of the 2nd ACM SIGPLAN international conference on Principles and practice of declarative programming
Authoring graphics-rich and interactive documents in CGLIB: a constraint-based graphics library
DocEng '01 Proceedings of the 2001 ACM Symposium on Document engineering
SLT-Resolution for the Well-Founded Semantics
Journal of Automated Reasoning
Model Generation with Boolean Constraints
LPAR '01 Proceedings of the Artificial Intelligence on Logic for Programming
Implementation of a Linear Tabling Mechanism
PADL '00 Proceedings of the Second International Workshop on Practical Aspects of Declarative Languages
Linear Tabulated Resolutions for the Well-Founded Semantics
LPNMR '99 Proceedings of the 5th International Conference on Logic Programming and Nonmonotonic Reasoning
Efficient fixpoint computation in linear tabling
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
Linear tabulated resolution based on Prolog control strategy
Theory and Practice of Logic Programming
Programming finite-domain constraint propagators in Action Rules
Theory and Practice of Logic Programming
Linear tabling strategies and optimizations
Theory and Practice of Logic Programming
The language features and architecture of b-prolog
Theory and Practice of Logic Programming - Prolog Systems
Hi-index | 0.00 |
Parameter passing and control stack management are two of the crucial issues in Prolog implementation. In the Warren Abstract Machine (WAM), the most widely used abstract machine for Prolog implementation, arguments are passed through argument registers, and the information associated with procedure calls is stored in possibly two frames. Although accessing registers is faster than accessing memory, this scheme requires the argument registers to be saved and restored for back tracking and makes it difficult to implement full tail recursion elimination. These disadvantages may far outweigh the advantage in emulator-based implementations because registers are actually simulated by using memory. In this article, we reconsider the two crucial issues and describe a new abstract machine called ATOAM (yet Another Tree-Oriented Abstract Machine). The ATOAM differs from the WAM mainly in that (1) arguments are passed directly into stack frames, (2) only one frame is used for each procedure call, and (3) procedures are translated into matching trees is possible, and clauses in each procedure are indexed on all input arguments. The above-mentioned inefficiencies of the WAM do not exist in to he ATOAM because backtracking requires less bookkeeping operations, and tail recursion can be handled in most cases like a loop statement in procedural languages. An ATOAM-emulator-based Prolog system called B-Prolog has been implemented, which is available through anonymous ftp from ftp.kyutech.ac.jp (131.206.1.101) in the directory pub/Language/prolog.B-Prolog is comparable in performance with and can sometimes be significatly faster than emulated SICStus-Prolog. By measuring the numbers of memory and register references made in both systems, we found that passing arguments in stack is no worse than passing arguments in registers even if accessing memory is four times as expensive as accessing registers.