Hostname: page-component-76fb5796d-wq484 Total loading time: 0 Render date: 2024-04-25T09:16:31.062Z Has data issue: false hasContentIssue false

On the implementation of GNU Prolog

Published online by Cambridge University Press:  12 December 2011

DANIEL DIAZ
Affiliation:
University of Paris 1, 90 rue de Tolbiac, 75013 Paris, France (e-mail: Daniel.Diaz@univ-paris1.fr)
SALVADOR ABREU
Affiliation:
Universidade de Évora and Centria FCT/UNL, Largo dos Colegiais 2, 7004-516 Évora, Portugal (e-mail: spa@di.uevora.pt)
PHILIPPE CODOGNET
Affiliation:
JFLI, CNRS, University of Tokyo, Tokyo, Japan (e-mail: Philippe.Codognet@lip6.fr)

Abstract

GNU Prolog is a general-purpose implementation of the Prolog language, which distinguishes itself from most other systems by being, above all else, a native-code compiler which produces stand-alone executables which do not rely on any bytecode emulator or meta-interpreter. Other aspects which stand out include the explicit organization of the Prolog system as a multipass compiler, where intermediate representations are materialized, in Unix compiler tradition. GNU Prolog also includes an extensible and high-performance finite-domain constraint solver, integrated with the Prolog language but implemented using independent lower-level mechanisms. This paper discusses the main issues involved in designing and implementing GNU Prolog: requirements, system organization, performance, and portability issues as well as its position with respect to other Prolog system implementations and the ISO standardization initiative.

Type
Regular Papers
Copyright
Copyright © Cambridge University Press 2011

Access options

Get access to the full version of this content by using one of the access options below. (Log in options will check for institutional or personal access. Content may require purchase if you do not have access.)

References

Abreu, S. and Diaz, D. 2003. Objective: In minimum context. In ICLP, Palamidessi, C., Ed. Lecture Notes in Computer Science, vol. 2916. Springer, 128147.Google Scholar
Aït-Kaci, H. 1991. Warren's Abstract Machine: A Tutorial Reconstruction. MIT Press.CrossRefGoogle Scholar
André, P. and Abreu, S. 2010. Casting the WAM as an EAM. In Proceedings of CICLOPS-WLPE 2010, Vidal, G. and Zhou, N.-F., Eds.Google Scholar
Carlsson, M. 1990. Design and Implementation of an Or-Parallel Prolog Engine. PhD thesis, SICS.Google Scholar
Chikayama, T., Fujise, T. and Sekita, D. 1994. A portable and efficient implementation of kl1. In PLILP, Hermenegildo, M. V. and Penjam, J., Eds. Lecture Notes in Computer Science, vol. 844. Springer, 2539.Google Scholar
Codognet, P. and Diaz, D. 1995. WAMCC: Compiling prolog to C. In ICLP, 317–331.Google Scholar
Codognet, P. and Diaz, D. 1996. Compiling constraints in clp(FD). Journal of Logic Programming 27, 3, 185226.Google Scholar
da Silva, A. F. and Santos Costa, V. 2006. The design of the yap compiler: An optimizing compiler for logic programming languages. Journal of Universal Computer Science 12, 7, 764787.Google Scholar
Diaz, D. and Codognet, P. 1993. A minimal extension of the WAM for clp(FD). In ICLP, 774–790.Google Scholar
Ferreira, M. and Damas, L. 1999. Multiple specialization of WAM code. In PADL, Gupta, G., Ed. Lecture Notes in Computer Science, vol. 1551. Springer, 243258.Google Scholar
Gudeman, D., de Bosschere, K. and Debray, S. 1992. jc: An efficient and portable sequential implementation of Janus. In Joint International Conference and Symposium on Logic Programming. MIT Press, Washington, DC.Google Scholar
Hausman, B. 1993. Turbo Erlang: Approaching the speed of C. In ICLP-Workshops on Implementation of Logic Programming Systems, 119–135.Google Scholar
Haygood, R. C. 1994. Native code compilation in SICStus prolog. In In Proceedings of the Eleventh International Conference on Logic Programming. MIT Press, 190204.Google Scholar
ISO-Part1. 1995. Information Technology – Programming Languages – Prolog – Part 1: General Core. ISO/IEC 13211-1.Google Scholar
Jaffar, J. and Lassez, J.-L. 1987. Constraint logic programming. In POPL. 111–19.CrossRefGoogle Scholar
Jones, S. L. P., Nordin, T. and Oliva, D. 1997. C–: A portable assembly language. In Implementation of Functional Languages, Clack, C., Hammond, K., and Davie, A. J. T., Eds. Lecture Notes in Computer Science, vol. 1467. Springer, 119.Google Scholar
Lattner, C. and Adve, V. 2004. LLVM: A compilation framework for lifelong program analysis transformation. In Code Generation and Optimization, 2004. CGO 2004. International Symposium on. 75–86.Google Scholar
Rao, P., Sagonas, K., Swift, T., Warren, D. and Freire, J. 1997. XSB: a system for efficiently computing well-founded semantics. In Proceedings of the 4th International Conference on Logic Programming and Non-Monotonic Reasoning (LPNMR'97). vol. 1265. 2–17.Google Scholar
Rocha, R., Silva, F. and Costa, V. S. 2000. YapTab: a tabling engine designed to support parallelism. In Conference on Tabulation in Parsing and Deduction. 77–87.Google Scholar
Rocha, R., Silva, F. M. A. and Costa, V. S. 2005. On applying or-parallelism and tabling to logic programs. TPLP 5, 1–2, 161205.Google Scholar
Tsang, E. 1993. Foundations of Constraint Satisfaction. Academic Press.Google Scholar
Van Hentenryck, P. 1989. Parallel constraint satisfaction in logic programming: preliminary results of chip within pepsys. In ICLP. 165–180.Google Scholar
Van Hentenryck, P., Saraswat, V. A. and Deville, Y. 1994. Design, implementation, and evaluation of the constraint language cc(fd). In Constraint Programming, Podelski, A., Ed. Lecture Notes in Computer Science, vol. 910. Springer, 293316.Google Scholar
van Roy, P. and Despain, A. M. 1992. High-performance logic programming with the aquarius Prolog compiler. IEEE Computer 25, 1, 5468.Google Scholar
Warren, D. H. D. 1983. An Abstract Prolog Instruction Set. Technical Note 309, SRI International.Google Scholar
Zhou, N.-F., Sato, T. and Shen, Y.-D. 2008. Linear tabling strategies and optimizations. TPLP 8, 1, 81109.Google Scholar