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. A comprehensive discussion of the most significant Prolog systems is presented in an article published in the 50-years of Prolog anniversary issue of the journal Theory and Practice of Logic Programming (TPLP).[1]
Portability
[edit ]Systems with a dark gray background are not supported any more. Arrows denote influences and inspiration of systems. Quick legend: JIT = "Just in Time Compiler", JVM = "Java Virtual Machine", TOAM = "Tree-Oriented Abstract Machine"
There are Prolog implementations that are radically different, with different syntax and different semantics (e.g. Visual Prolog)[2] and sub-communities have developed around different implementations.[2]
Code that strictly conforms to the ISO-Prolog core language is portable across ISO-compliant implementations. However, the ISO standard for modules is an extension which was not fully adopted in most Prolog systems.[2] [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.[3] Use of libraries unavailable in other implementations and library organisation:[2]
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[a]
|
Java Interface[a]
|
Interactive Interpreter
|
Debugger
|
Code Profiler
|
Syntax |
| AllegroProlog[4] | Unix, Windows, Mac OS X | Proprietary (limited free edition available) | Yes | Yes | Yes | Yes, via Lisp | Yes | Yes, via Lisp | Yes, via Lisp | Yes | Yes | Yes, via Lisp | S-expressions. Full Common Lisp integration. | |
| BProlog | Unix, Windows, Mac OS X | Proprietary (free for non-commercial uses) | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ISO-Prolog, plus event-handling, CLP(FD), and tabling | |
| Ciao | Unix, Windows, Mac OS X | GPL, LGPL | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ISO-Prolog, plus extensions | ||
| DOS-Prolog[5] | MS-DOS | Proprietary | 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 | |||||
| JIProlog [6] | JVM, Android | AGPL (commercial support available) | Yes | Yes | Yes via Java | Yes | Yes via Java | Yes | Yes | Yes | ISO-Prolog | |||
| JLog[7] | JVM | GPL | Yes | Yes | Yes | Yes | ISO-Prolog | |||||||
| JScriptLog[7] | Web Browser | GPL | Yes | ISO-Prolog | ||||||||||
| jTrolog[8] | JVM | LGPL | Yes | Yes | Yes | Yes | ISO-Prolog | |||||||
| WIN-Prolog[9] | Windows | Proprietary | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Edinburgh Prolog with extensions |
| Open Prolog[10] | Mac OS System 7 | 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 | ||||
| Scryer Prolog [11] | Linux, Windows, macOS | BSD License | Yes | Yes | ISO-Prolog | |||||||||
| SICStus Prolog | Unix, Linux, Windows, macOS | Proprietary | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | ISO-Prolog |
| Strawberry Prolog [12] | Unix, Windows | Freeware | 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 [13] | JVM, Android | LGPL | Yes | Yes | Yes | Yes | Yes | Yes | ISO-Prolog | |||||
| Visual Prolog | Windows | Freeware | 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 | ISO-Prolog, Edinburgh Prolog, Quintus and SICStus Prolog compatible | |||
Operating system and web-related features
[edit ]| OS-related | 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 | |||||||
| WIN-Prolog | Yes | Yes | Yes | Yes | ||||
| Scryer Prolog | Yes | 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
[edit ]| Name | Type checker | Determinacy checker | Call-pattern checker |
|---|---|---|---|
| Ciao | Yes | Yes | Yes |
| GNU Prolog | |||
| SICStus Prolog | Yes | ||
| SWI-Prolog | Yes | ||
| 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 | ? |
| ECLiPSe | Yes | Yes | Yes | multi-argument (compile time) |
| GNU Prolog | Yes | Yes | 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
[edit ]| Name | Version | Date |
|---|---|---|
| AllegroProlog | 1.1.2 | 2018年12月12日 |
| BProlog | 8.1 | 2014年02月23日 |
| JIProlog | 4.1.7.1 | 2021年08月26日 |
| Ciao | 1.25 | 2025年06月21日[14] |
| DOS-Prolog | 8.0 | |
| ECLiPSe | 7.1 | 2023年01月01日 |
| GNU Prolog | 1.5.0 | 2023年02月21日 |
| JLog | 1.3.6 | 2007年09月13日 |
| JScriptLog | 0.7.5 beta | 2007年09月10日 |
| jTrolog | ||
| WIN-Prolog | 8.0 | 2022年07月14日 |
| Open Prolog | ||
| Poplog Prolog | V16 | 2020年01月06日 |
| Scryer Prolog | 0.9.4 | 2024年02月29日[15] |
| SICStus Prolog | 4.9.0 | 2023年12月18日 |
| Strawberry Prolog | 6.1 | 2023年08月23日 |
| SWI-Prolog | 9.3.28 | 2025年08月08日[16] |
| tuProlog | 2P-Kt 1.0.4 | 2024年05月26日[17] |
| Visual Prolog | 10, Build 1000 | 2021年04月15日 |
| XSB Prolog | 5.0 | 2022年05月15日 |
| YAProlog | 7.1.0 | 2020年12月19日 |
Benchmarks
[edit ]- Benchmarking issues: Odd Prolog benchmarking, Performance differences.[18]
- Benchmarking software: older, Dobry's Benchmarks, Aquarius benchmark suite, (Bothe, 1990),[19] (Demoen et al. 2001), benchmark descriptions
- Benchmarking results: B-Prolog, SICStus, XSB,[20] SICStus vs Yap vs hProlog[21]
- Benchmarking results: Survey of java prolog engines by Michael Zeising
- Benchmarking results: OpenRuleBench yearly open-source benchmark of rule engines
Notes
[edit ]References
[edit ]- ^ a b Philipp Körner; Michael Leuschel; João Barbosa; Vítor Santos Costa; Verónica Dahl; Manuel V. Hermenegildo; Jose F. Morales; Jan Wielemaker; Daniel Diaz; Salvador Abreu; Giovanni Ciatto (November 2022), "Fifty Years of Prolog and Beyond", Theory and Practice of Logic Programming, 22 (6): 776–858, doi:10.1017/S1471068422000102 , hdl:10174/33387
- ^ a b c d Wielemaker, J.; Costa, V. T. S. (2011). "On the Portability of Prolog Applications". Practical Aspects of Declarative Languages. Lecture Notes in Computer Science. Vol. 6539. pp. 69–83. 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 Archived 2010年07月16日 at the Wayback Machine.
- ^ Allegro Prolog
- ^ "DOS-Prolog 8.0". Logic Programming Associates. 5 November 2023.
- ^ JIProlog
- ^ a b "JLog Homepage". jlogic.sourceforge.net. Retrieved 2023年11月03日.
- ^ "Jtrolog — Java.net". 2012年11月13日. Archived from the original on 2012年11月13日. Retrieved 2023年11月03日.
- ^ "WIN-Prolog 8.0". Logic Programming Associates. 5 November 2023.
- ^ Open Prolog Home Page
- ^ Scryer Prolog
- ^ Strawberry Prolog
- ^ tuProlog
- ^ https://github.com/ciao-lang/ciao
- ^ https://github.com/mthom/scryer-prolog
- ^ https://github.com/SWI-Prolog/swipl-devel/tags
- ^ https://github.com/tuProlog/2p-kt/releases
- ^ 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. Vol. 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
[edit ]- Overview of Prolog Systems by Ulrich Neumerkel
- Conformity assessment I: Syntax