Comparison of Prolog implementations

From Wikipedia, the free encyclopedia
Jump to: navigation, search

The following Comparison of Prolog implementations provides a reference for the relative feature sets and performance of different implementations of the Prolog computer programming language.

Portability[edit]

There are Prolog implementations that are radically different, with different syntax and different semantics (e.g. Visual Prolog)[1] and sub-communities have developed around different implementations.[1]

Code that strictly conforms to the ISO-Prolog core language is portable across ISO-compliant implementations. However, the ISO standard for modules was never accepted by most Prolog implementors.[1]

Factors that can adversely affect portability include: use of bounded vs. unbounded integer arithmetic, additional types such as string objects, advanced numeric types (rationals, complex), feature extensions such as Unicode, threads, and tabling.[2] Use of libraries unavailable in other implementations and library organisation:[1]

Currently, the way predicates are spread over the libraries and system built-ins differs enormously. [...] Fortunately, there are only few cases where we find predicates with the same name but different semantics (e.g. delete/3)

Main features[edit]

Platform Features Toolkit Prolog Mechanics
Name OS Licence Native Graphics Compiled Code Unicode Object Oriented Native OS Control Stand Alone Executable C Interface[3] Java Interface[3] Interactive Interpreter Debugger Code Profiler Syntax
BProlog Unix, Windows, Mac OS X Free for non-commercial uses Yes Yes Yes Yes Yes Yes Yes Yes Yes ISO-Prolog, plus event-handling, CLP(FD), and tabling
JIProlog JVM, Android Shareware/Commercial and AGPL Yes Yes Yes via Java Yes Yes via Java Yes Yes Yes ISO-Prolog
Ciao Unix, Windows, Mac OS X GPL, LGPL Yes Yes Yes Yes Yes Yes Yes Yes Yes ISO-Prolog, plus extensions
DOS-PROLOG MS-DOS Shareware Yes Yes Yes Yes Yes Yes Edinburgh Prolog
GNU Prolog Unix, Windows, Mac OS X GPL, LGPL Yes Yes Yes Yes Yes Yes ISO-Prolog
Jekejeke Prolog JVM, Android Distribution Evaluation Yes Yes Yes Yes Yes Yes Yes Yes ISO-Prolog, Java API
JLog JVM GPL Yes Yes Yes Yes ISO-Prolog
JScriptLog Web Browser GPL Yes ISO-Prolog
jTrolog JVM LGPL Yes Yes Yes Yes ISO-Prolog tests
LPA-PROLOG Windows Commercial Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Edinburgh Prolog with extensions
Open Prolog Mac OS Freeware Yes
Poplog Prolog Linux (32- and 64-bit), Unix, Windows Free Open Source Only through POP-11, on Linux Yes Yes Yes Yes Yes Yes Edinburgh Prolog, with interfaces to Poplog Common Lisp and Pop-11
SICStus Prolog Unix, Linux, Windows, Mac OS X Commercial Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes ISO-Prolog
Strawberry Prolog Windows, Unix Freeware, Commercial Yes Yes Yes Yes Yes Not ISO-Prolog + extensions
SWI-Prolog Unix, Linux, Windows, Mac OS X LGPL Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes ISO-Prolog, Edinburgh Prolog
tuProlog JVM, Android LGPL Yes Yes Yes Yes Yes Yes ISO-Prolog
Visual Prolog Windows Freeware, Commercial Yes Yes Yes Yes Yes Yes Yes Yes Yes
XSB Prolog Linux, Windows, Solaris, Mac OS X LGPL Yes Yes Yes Yes Yes Yes Yes Yes Yes ISO-Prolog, tabled WFS
YAP-Prolog Linux, Windows, Solaris, Mac OS X, HP-UX GPL or Artistic (user choice) Yes Yes Yes Yes Yes Yes Yes Yes Edinburgh, ISO-Prolog, Quintus and SICStus Prolog compatible

Operating system and Web-related features[edit]

Web-related
Name Conditional compilation Sockets Multi-threading Tabling HTTP client HTTP server HTML Parser RDF Triple store
BProlog Yes
Ciao Yes Yes Yes Yes Yes Yes
GNU Prolog Yes
Jekejeke Prolog Yes Yes Yes Yes
LPA-Prolog Yes Yes Yes Yes
SICStus Prolog Yes Yes Yes
SWI-Prolog Yes Yes Yes Yes Yes Yes Yes
Visual Prolog Yes Yes Yes Yes Yes
XSB Yes Yes Yes Yes Yes
YAP-Prolog Yes Yes Yes Yes

Static analysis[edit]

Name Type checker Determinacy checker Call-pattern checker
Ciao Yes Yes Yes
GNU Prolog
Jekejeke Prolog
SICStus Prolog Yes
SWI-Prolog
Visual Prolog Yes Yes Yes
XSB
YAP-Prolog

Optimizations[edit]

Name Tail-Call Optimization Choice Point Elimination Environment Trimming Just-in-Time Indexing
Ciao Yes Yes Yes  ?
GNU Prolog Yes Yes Yes  ?
Jekejeke Prolog Yes (runtime) Yes (runtime) Yes (runtime) Yes
SICStus Prolog Yes Yes Yes  ?
SWI-Prolog Yes Yes Yes Yes
Visual Prolog Yes (compile time) Yes (compile time) N/A N/A (compile time)
XSB Yes Yes Yes  ?
YAP-Prolog Yes Yes Yes Yes

Benchmarks[edit]

References[edit]

  1. ^ a b c d Wielemaker, J.; Costa, V. T. S. (2011). "Practical Aspects of Declarative Languages". Lecture Notes in Computer Science 6539. p. 69. doi:10.1007/978-3-642-18378-2_8. ISBN 978-3-642-18377-5.  |chapter= ignored (help) edit
  2. ^ Jan Wielemaker and Vıtor Santos Costa: Portability of Prolog programs: theory and case-studies. CICLOPS-WLPE Workshop 2010.
  3. ^ a b C/Java interface can also be used for graphics and OS control.
  4. ^ B. Demoen, and P. Nguyen, About unnecessary performance differences between Prolog implementations, Proceedings of the Colloquium on Implementation of Constraint and Logic Programming Systems (CICLOPS 2001)
  5. ^ Bothe, K. (1990). "A prolog space benchmark suite". ACM SIGPLAN Notices 25 (12): 54–50. doi:10.1145/122193.122197.  edit
  6. ^ A Summary of XSB Performance (1993)[1]
  7. ^ Demoen, B.; Nguyen, P. L.; Vandeginste, R. (2002). "Copying Garbage Collection for the WAM: to Mark or Not to Mark?" 2401. p. 194. doi:10.1007/3-540-45619-8_14.  edit

External links[edit]