Comparison of Prolog implementations
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
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
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 | 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 | |||||
ECLiPSe | Linux, Windows, Solaris, macOS | MPL | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Extended Prolog, Multi-dialect, including ISO | ||||
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, macOS | 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, macOS | BSD License | 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, macOS | 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
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 | Yes | |
ECLiPSe | Yes | Yes | Yes | Yes | Yes | |||
GNU Prolog | Yes | |||||||
Jekejeke Prolog | Yes | Yes | Yes | Yes | Yes | |||
LPA-Prolog | Yes | Yes | Yes | Yes | ||||
SICStus Prolog | Yes | Yes | Yes | |||||
SWI-Prolog | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes |
Visual Prolog | Yes | Yes | Yes | Yes | Yes | Yes | ||
XSB | Yes | Yes | Yes | Yes | Yes | |||
YAP-Prolog | Yes | Yes | Yes | Yes |
Static analysis
Name | Type checker | Determinacy checker | Call-pattern checker |
---|---|---|---|
Ciao | Yes | Yes | Yes |
GNU Prolog | |||
Jekejeke Prolog | |||
SICStus Prolog | Yes | ||
SWI-Prolog | Yes | ||
Visual Prolog | Yes | Yes | Yes |
XSB | |||
YAP-Prolog |
Optimizations
Name | Tail-Call Optimization | Choice Point Elimination | Environment Trimming | Just-in-Time Indexing |
---|---|---|---|---|
Ciao | Yes | Yes | Yes | ? |
ECLiPSe | Yes | Yes | Yes | multi-argument (compile time) |
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 |
Release
Name | Version | Date |
---|---|---|
BProlog | 8.1 | 2014-02-23 |
JIProlog | 4.1.6.1 | 2018-03-17 |
Ciao | 1.19.0 | 2020-03-21 |
DOS-PROLOG | 6.0 | |
ECLiPSe | 7.0_54 | 2020-02-26 |
GNU Prolog | 1.4.5 | 2018-07-14 |
Jekejeke Prolog | 1.3.1 | 2018-11-02 |
JLog | 1.3.6 | 2007-09-13 |
JScriptLog | 0.7.5 beta | 2007-09-10 |
jTrolog | ||
LPA-PROLOG | 7.0 | 2019-12-19 |
Open Prolog | ||
Poplog Prolog | V15.65 | 2015-10-14 |
SICStus Prolog | 4.6.0 | 2020-05-04 |
Strawberry Prolog | 3.0 Beta 4 | 2013-12-10 |
SWI-Prolog | 8.2.3 | 2020-11-23 |
tuProlog | 3.2.1 | 2017-02-14 |
Visual Prolog | 9.0, Build 902 | 2019-04-26 |
XSB Prolog | 3.8 | 2017-10-29 |
YAProlog | 6.3.3 | 2013-01-21 |
Benchmarks
- Benchmarking issues: Odd Prolog benchmarking, Performance differences.[4]
- Benchmarking software: older, Dobry, Aquarius benchmark suite, (Bothe, 1990),[5] (Demoen et al. 2001), benchmark descriptions
- Benchmarking results: B-Prolog, SICStus, XSB,[6] SICStus vs Yap vs hProlog[7]
- Benchmarking results: Survey of java prolog engines by Michael Zeising
- Benchmarking results: OpenRuleBench yearly open-source benchmark of rule engines
References
- Wielemaker, J.; Costa, V. T. S. (2011). "On the Portability of Prolog Applications". Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. 6539. p. 69. CiteSeerX 10.1.1.1030.9396. doi:10.1007/978-3-642-18378-2_8. ISBN 978-3-642-18377-5.
- Jan Wielemaker and Vıtor Santos Costa: Portability of Prolog programs: theory and case-studies. CICLOPS-WLPE Workshop 2010.
- C/Java interface can also be used for graphics and OS control.
- 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)
- Bothe, K. (1990). "A prolog space benchmark suite". ACM SIGPLAN Notices. 25 (12): 54–60. doi:10.1145/122193.122197.
- A Summary of XSB Performance (1993)
- Demoen, B.; Nguyen, P. L.; Vandeginste, R. (2002). "Copying Garbage Collection for the WAM: to Mark or Not to Mark?". Logic Programming. Lecture Notes in Computer Science. 2401. pp. 194–208. CiteSeerX 10.1.1.13.2586. doi:10.1007/3-540-45619-8_14. ISBN 978-3-540-43930-1.
External links
- Overview of Prolog Systems by Ulrich Neumerkel
- Conformity assessment I: Syntax