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.
Contents |
[edit] 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)
[edit] 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 academic uses | 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 | 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 | w/o Toolkit Distributable otherwise Evaluation | Yes (via Java) | Yes (16-bit) | Yes (via Java) | Yes | Yes | Yes | Yes (CERFs) | 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 | 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 | 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 | |||
[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 (via Java) | Yes | Yes (built-in) | Yes (via Java) | ||||
| 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 | ||||
| YAP-Prolog | Yes | Yes | Yes | Yes | ||||
[edit] Static analysis
| 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 |
[edit] Optimizations
| Name | Tail-Call Optimization | Choice Point Elimination | Environment Trimming | Just-in-Time Indexing |
|---|---|---|---|---|
| Ciao | Yes | Yes | Yes | ? |
| GNU Prolog | Yes | Yes | ? | ? |
| Jekejeke Prolog | Yes (runtime) | Yes (runtime) | Yes (runtime) | Yes |
| SICStus Prolog | Yes | Yes | Yes | ? |
| SWI-Prolog | ? | Yes | ? | Yes |
| Visual Prolog | Yes (compile time) | Yes (compile time) | N/A | ? |
| XSB | Yes | Yes | ? | |
| YAP-Prolog | Yes | Yes | Yes |
[edit] 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
[edit] References
- ^ 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. 6539. pp. 69. 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.
- ^ a b 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–50. doi:10.1145/122193.122197.
- ^ A Summary of XSB Performance (1993)[1]
- ^ Demoen, B.; Nguyen, P. L.; Vandeginste, R. (2002). Copying Garbage Collection for the WAM: to Mark or Not to Mark?. 2401. pp. 194. doi:10.1007/3-540-45619-8_14.
[edit] External Links
- Overview of Prolog Systems by Ulrich Neumerkel