NOTE: For recent developments see the Prolog Implementers Forum / Prolog Improvement Proposals site.
What is the Prolog Commons?
Have you ever tried to port a complex Prolog program from one Prolog system to another? The ISO Prolog standard makes this easy, right?
As anyone knows who has ever attempted such a port, the answer is usually "no". The core ISO Prolog standard, while a significant achievement, is limited in its scope. It does not address library interfaces, constraint systems, or a number of other features that real applications need. The lack of a broad-based standard is not the only impediment to portability. It actually may be impossible to move between Prolog systems if your application requires features such as tabling, native code generation, dynamic indexing, compiler analysis or an interactive development environment. To some extent, this diversity is a result of the health of logic programming, as there are numerous fine Prolog systems, each of which has a rapidly evolving code base and specializes in diverse and important research directions. However, the limited portablity of Prolog code, along with the lack of a single Prolog system to which all researchers contribute, can also be a barrier for potential users of logic programming.
The Prolog-Commons Working Group formed in order to start to address some of these issues. In particular, it works on gathering a common, public-domain set of libraries that will be supported across a wide range of system. This site and the manuals in it document the common libraries developed to date.
The first meeting of the Prolog Commons group, organized by Bart Demoen, occurred in Leuven, Belgium on February 12-14, 2009 and was attended by Manuel Hermenegildo and José Morales of Ciao Prolog, Jan Wielemaker of SWI Prolog, Vítor Santos Costas of YAP Prolog, Daniel Diaz and Salvador Abreu of GNU Prolog , and Terrance Swift of XSB Prolog. Each of the Prologs mentioned has unique features that the others do not, and as a result all have their own dedicated user communities.
The first day of that first meeting was somewhat informal. An important psychological milestone was passed when all implementors managed to install one another's Prologs on their laptops. A common repository for working code was also created, and discussion began on what exactly to do with the repository. The group quickly agreed on general standards for using modules in libraries, for adding annotations about types, and for unit testing. At the same time, consensus for documenting code in a "literate programming" style proved more difficult, although the group achieved a provisional agreement on this as well. The second and third days built on the progress of the first, when the attendees began to actually add code and APIs to the repository, which by the end of the meeting contained nearly 4000 lines of code.
Creation of a common set of sophisticated libraries and packages for Prolog is a giant task, of which the Leuven meeting was (hopefully) the first step. However, in addition to the concrete progress made on the repository, the attendees agreed that there was a great deal of intangible benefit in understanding both one another's systems and how to write more portable library code.
Getting it...
You can:
- Browse a manual for the different modules in the Prolog Commons.
- Browse the Prolog Commons sources in the GIT repository.
- Clone The GIT repository for Prolog Commons with:
git clone https://gitlab.software.imdea.org/prolog-commons/prolog-commons.git